Created
January 29, 2020 09:56
-
-
Save Rooster212/95de2569ca4cd99be892b9b458efbf4b to your computer and use it in GitHub Desktop.
Peters Petrol pumps. One of my first Python projects. I'll upload this to a proper repo with running instructions at some point.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Jamie Roos | Peter's Petrol Pump's | Required - petrolpump.png in parent directory for window icon | |
import sys | |
from PyQt4 import QtGui,QtCore | |
class Pump(QtGui.QDialog): | |
def __init__(self,parent = None): | |
# private variables | |
self.amountToPay = 0.0 | |
self.numLitres = 0.0 | |
self.pricePerLitre = (1.199) # write price in pounds - program converts into pence for display | |
self.inUse = False | |
self.pumping = False | |
# gui stuff | |
QtGui.QMainWindow.__init__(self) | |
self.resize(400,320) | |
self.move(270,50) | |
self.grid = QtGui.QGridLayout() | |
self.setWindowIcon(QtGui.QIcon('petrolpump.png')) | |
self.counter = 0 | |
self.timer = QtCore.QTimer() | |
# -------------------------------------------- | |
self.priceDisplay = QtGui.QLCDNumber(6,self) | |
self.totalDisplay = QtGui.QLCDNumber(6,self) | |
self.litreDisplay = QtGui.QLCDNumber(6,self) | |
self.priceLabel = QtGui.QLabel("Price Per Litre (p)") | |
self.totalLabel = QtGui.QLabel("Total Price") | |
self.litreLabel = QtGui.QLabel("No. of Litres") | |
self.removePumpButton = QtGui.QPushButton("Remove Pump") | |
self.replacePumpButton = QtGui.QPushButton("Replace Pump") | |
self.pumpButton = QtGui.QPushButton("Pump Petrol") | |
self.setWindowTitle("Peter's Petrol Pumps") | |
self.stopPumpButton = QtGui.QPushButton("Stop Pump") | |
# -------------------------------------------- | |
self.grid.addWidget(self.priceDisplay,1,2) | |
self.grid.addWidget(self.priceLabel,1,1) | |
self.grid.addWidget(self.totalDisplay,2,2) | |
self.grid.addWidget(self.totalLabel,2,1) | |
self.grid.addWidget(self.litreDisplay,3,2) | |
self.grid.addWidget(self.litreLabel,3,1) | |
self.grid.addWidget(self.removePumpButton,4,1) | |
self.grid.addWidget(self.replacePumpButton,5,1) | |
self.grid.addWidget(self.pumpButton,4,2) | |
self.grid.addWidget(self.stopPumpButton,5,2) | |
# -------------------------------------------- | |
self.setLayout(self.grid) | |
self.connect(self.removePumpButton,QtCore.SIGNAL("clicked()"),self.setInUse) | |
self.connect(self.replacePumpButton,QtCore.SIGNAL("clicked()"),self.setNotInUse) | |
self.connect(self.pumpButton,QtCore.SIGNAL("clicked()"),self.fillUp) | |
self.connect(self.stopPumpButton,QtCore.SIGNAL("clicked()"),self.stopFillUp) | |
QtCore.QObject.connect(self.timer,QtCore.SIGNAL("timeout()"),self.fillUp) | |
# -------------------------------------------- | |
self.priceDisplay.display(str(self.pricePerLitre*100)) | |
self.replacePumpButton.setEnabled(False) | |
self.pumpButton.setEnabled(False) | |
self.stopPumpButton.setEnabled(False) | |
# public functions go here | |
def getAmount(self): | |
return self.amountToPay | |
def getNumLitres(self): | |
return self.numLitres | |
def getPricePerLitre(self): | |
return self.pricePerLitre | |
def stopFillUp(self): | |
self.timer.stop() | |
self.pumping = False | |
self.pumpButton.setEnabled(True) | |
self.stopPumpButton.setEnabled(False) | |
self.replacePumpButton.setEnabled(True) | |
def fillUp(self): | |
if self.inUse == True: | |
self.pumpButton.setEnabled(False) | |
self.stopPumpButton.setEnabled(True) | |
self.replacePumpButton.setEnabled(False) | |
self.pumping = True | |
self.timer.start(106) | |
self.amountToPay = self.numLitres * self.pricePerLitre | |
self.amountToPay = round(self.amountToPay,2) | |
self.numLitres = self.numLitres + 0.1 | |
if self.numLitres >= 99.9: | |
self.stopFillUp() | |
self.inUse = False | |
if str(self.amountToPay)[-2]==".": | |
self.amountToPay = str(self.amountToPay)+"0" | |
self.totalDisplay.display(str(self.amountToPay)) | |
self.litreDisplay.display(str(self.numLitres)) | |
main2.Update() | |
def reset(self): | |
self.amountToPay = 0.0 | |
self.numLitres = 0.0 | |
self.totalDisplay.display(str(self.amountToPay)) | |
self.litreDisplay.display(str(self.numLitres)) | |
self.removePumpButton.setEnabled(True) | |
def getInUse(self): | |
return self.inUse | |
def setInUse(self): | |
self.inUse = True | |
main2.status.setText("PUMP IN USE") | |
self.pumpButton.setEnabled(True) | |
self.removePumpButton.setEnabled(False) | |
self.replacePumpButton.setEnabled(True) | |
main2.deactivateButtons() | |
def setNotInUse(self): | |
if self.pumping == False: | |
self.inUse = False | |
main2.status.setText("PUMP NOT IN USE") | |
self.removePumpButton.setEnabled(True) | |
self.replacePumpButton.setEnabled(False) | |
self.stopPumpButton.setEnabled(False) | |
self.pumpButton.setEnabled(False) | |
main2.reactivateButtons() | |
def Update(self,ppl): | |
self.pricePerLitre = ppl | |
self.priceDisplay.display(str(self.pricePerLitre*100)) | |
class Console(QtGui.QDialog): | |
def __init__(self,parent = None): | |
QtGui.QMainWindow.__init__(self) | |
self.resize(200,320) | |
self.move(50,50) | |
self.grid = QtGui.QGridLayout() | |
self.setWindowIcon(QtGui.QIcon('petrolpump.png')) | |
self.totalPrice = 0.0 | |
self.totalLitres = 0.0 | |
self.totalPriceDay = 0.0 | |
self.totalLitreDay = 0.0 | |
self.setWindowTitle("Peter's Petrol Pumps Console") | |
self.PricePerLitre = main.getPricePerLitre() | |
self.priceDisplay = QtGui.QLCDNumber(6,self) | |
self.totalDisplay = QtGui.QLCDNumber(6,self) | |
self.litreDisplay = QtGui.QLCDNumber(6,self) | |
self.totalDayPriceDisplay = QtGui.QLCDNumber(6,self) | |
self.totalDayLitreDisplay = QtGui.QLCDNumber(6,self) | |
self.changePriceBox = QtGui.QLineEdit("Enter in POUNDS") | |
self.changePriceButton = QtGui.QPushButton("Change Price") | |
self.resetButton = QtGui.QPushButton("Reset Pump") | |
self.priceLabel = QtGui.QLabel("Price Per Litre (p)") | |
self.totalLabel = QtGui.QLabel("Last Pump Price") | |
self.litreLabel = QtGui.QLabel("No. of Litres Last Pump") | |
self.totalDayLabel = QtGui.QLabel("Total Net Income Day") | |
self.totalLitreLabel = QtGui.QLabel("Total Litres Sold Day") | |
self.status = QtGui.QLabel("PUMP NOT IN USE") | |
# -------------------------------------------- | |
self.grid.addWidget(self.priceDisplay,1,2) | |
self.grid.addWidget(self.priceLabel,1,1) | |
self.grid.addWidget(self.changePriceBox,2,1) | |
self.grid.addWidget(self.changePriceButton,2,2) | |
self.grid.addWidget(self.totalDisplay,3,2) | |
self.grid.addWidget(self.totalLabel,3,1) | |
self.grid.addWidget(self.litreDisplay,4,2) | |
self.grid.addWidget(self.litreLabel,4,1) | |
self.grid.addWidget(self.resetButton,5,2) | |
self.grid.addWidget(self.status,5,1) | |
self.grid.addWidget(self.totalDayLabel,6,1) | |
self.grid.addWidget(self.totalLitreLabel,7,1) | |
self.grid.addWidget(self.totalDayPriceDisplay,6,2) | |
self.grid.addWidget(self.totalDayLitreDisplay,7,2) | |
self.setLayout(self.grid) | |
# -------------------------------------------- | |
self.connect(self.changePriceButton,QtCore.SIGNAL("clicked()"),self.changePrice) | |
self.connect(self.resetButton,QtCore.SIGNAL("clicked()"),self.resetPump) | |
self.priceDisplay.display(str(self.PricePerLitre*100)) | |
def Update(self): | |
self.totalPrice = main.amountToPay | |
self.totalDisplay.display(str(self.totalPrice)) | |
self.totalLitres = main.numLitres | |
self.litreDisplay.display(str(self.totalLitres)) | |
if main.inUse: | |
self.status.setText("PUMP IN USE") | |
def deactivateButtons(self): | |
self.changePriceButton.setEnabled(False) | |
self.resetButton.setEnabled(False) | |
def reactivateButtons(self): | |
if main.numLitres == 0.0: | |
self.changePriceButton.setEnabled(True) | |
self.resetButton.setEnabled(True) | |
def changePrice(self): | |
self.PricePerLitre = eval(self.changePriceBox.text()) | |
self.priceDisplay.display(str(self.PricePerLitre*100)) | |
main.Update(self.PricePerLitre) | |
def resetPump(self): | |
if main.inUse == False and main.pumping == False and (main.amountToPay and main.numLitres) != 0.0: | |
self.totalPrice = main.amountToPay | |
self.totalDisplay.display(self.totalPrice) | |
self.totalLitres = main.numLitres | |
self.litreDisplay.display(self.totalLitres) | |
main.reset() | |
self.totalPriceDay = self.totalPriceDay + float(self.totalPrice) | |
self.totalLitreDay = self.totalLitreDay + float(self.totalLitres) | |
self.totalDayPriceDisplay.display(str(self.totalPriceDay)) | |
self.totalDayLitreDisplay.display(str(self.totalLitreDay)) | |
self.changePriceButton.setEnabled(True) | |
class infoWindow(QtGui.QDialog): | |
def __init__(self,parent = None): | |
QtGui.QMainWindow.__init__(self) | |
self.resize(620,100) | |
self.move(50,404) | |
self.grid = QtGui.QGridLayout() | |
self.setWindowIcon(QtGui.QIcon('petrolpump.png')) | |
self.setWindowTitle("Info") | |
self.quitButton = QtGui.QPushButton("Quit") | |
self.quitLabel = QtGui.QLabel("Quit button shuts down whole system!") | |
self.infoBox = QtGui.QLabel("Peter's Petrol Pumps is a simulation of a petrol pump system, featuring one petrol pump.") | |
self.authorTag = QtGui.QLabel("Created by Jamie Roos.") | |
self.grid.addWidget(self.quitButton,3,2) | |
self.grid.addWidget(self.quitLabel,3,1) | |
self.grid.addWidget(self.infoBox,1,1) | |
self.grid.addWidget(self.authorTag,2,1) | |
self.setLayout(self.grid) | |
self.connect(self.quitButton,QtCore.SIGNAL("clicked()"),self.quitProg) | |
def quitProg(self): | |
sys.exit() | |
app = QtGui.QApplication(sys.argv) | |
# create all the forms here | |
main = Pump() | |
main2 = Console() | |
infoObject = infoWindow() | |
main.show() | |
main2.show() | |
infoObject.show() | |
# the next line means wait for something to happen | |
app.exec_() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment