【发布时间】:2015-11-20 13:53:28
【问题描述】:
我正在尝试学习 Python 和 QT4。我喜欢比萨,所以我实现了一个程序,可以根据我要制作的比萨的数量计算配料量。
程序如下并完成它的工作。
class Pizza:
# MEMBRI
farina=0
acqua=0
lievito=0
sale=0
def stampaIngredientiPizza(self, f, a, l, s):
self.stampaFarina=f
self.stampaAcqua=a
self.stampaLievito=l
self.stampaSale=s
print("Farina 00 (W240): ", self.stampaFarina, "gr")
print("Acqua: ", self.stampaAcqua, "gr")
print("Lievito di birra: ", self.stampaLievito, "gr")
print("Sale: ", self.stampaSale, "gr")
class Romana(Pizza):
# MEMBRI
olio=0
semola=0
class Napoletana(Pizza):
# MEMBRI
strutto=0
manitoba=0
# INIZIALIZZAZIONE OGGETTI
#
# TONDA ROMANA
#
tondaRomana=Romana()
tondaRomana.farina=80
tondaRomana.semola=20
tondaRomana.acqua=57
tondaRomana.lievito=0.171
tondaRomana.sale=2.85
tondaRomana.olio=2.85
#
# TEGLIA ROMANA
#
# TUTTI I VALORI VANNO MOLTIPLICATI X 1,5
#
#
# TONDA NAPOLETANA
#
tondaNapoletana=Napoletana()
tondaNapoletana.farina=72
tondaNapoletana.manitoba=48
tondaNapoletana.acqua=72
tondaNapoletana.lievito=0.216
tondaNapoletana.sale=3.6
tondaNapoletana.strutto=7.2
#
# TEGLIA NAPOLETANA
#
# TUTTI I VALORI VANNO MOLTIPLICATI X 1,5
#
romaNapoli=-1 # Romana o Napoleta
tondaTeglia=-1 # Tonda o Teglia
print("\t\t\tPIZZA ROMANA o NAPOLETANA\n\n")
while(romaNapoli!=0):
print("1) Pizza Romana")
print("2) Pizza Napoletana")
print("0) Uscita")
romaNapoli=int(input("\nSelezione (0, 1 ,2)? "))
if(romaNapoli==1): ##### PIZZA ROMANA #####
while(tondaTeglia!=0):
print()
print("1) Tonda 30cm")
print("2) Teglia 40x35cm")
print("0) Uscita")
tondaTeglia=int(input("\nSelezione (0, 1 ,2)? ")) ##### TONDA O TEGLIA #####
if(tondaTeglia==1): # TONDA
quantePizze=eval(input("\nQuante pizze tonde da 30cm vuoi preparare? "))
print()
totaleImpasto=(tondaRomana.farina*quantePizze+tondaRomana.semola*quantePizze+
tondaRomana.acqua*quantePizze+tondaRomana.olio*quantePizze+tondaRomana.sale*quantePizze)
if(quantePizze==1):
print("Per preparare", quantePizze, "pizza Romana in teglia tonda, ti occorrono:")
print()
else:
print("Per preparare", quantePizze, "pizze Romane in teglia tonda, ti occorrono:")
print()
print("Farina di semola rimacinata: ", tondaRomana.semola*quantePizze, "gr")
tondaRomana.stampaIngredientiPizza(tondaRomana.farina*quantePizze, tondaRomana.acqua*quantePizze, tondaRomana.lievito*quantePizze, tondaRomana.sale*quantePizze)
print("Olio: ", tondaRomana.olio*quantePizze, "gr")
print()
print("Totale impasto: ", totaleImpasto, "gr\n")
premiUnTasto=input("Premi INVIO per continuare")
print()
if(tondaTeglia==2): # TEGLIA
quantePizze=eval(input("\nQuante pizze in teglia 40x35cm vuoi preparare? "))
print()
totaleImpasto=(tondaRomana.farina*1.5*quantePizze+tondaRomana.semola*1.5*quantePizze+
tondaRomana.acqua*1.5*quantePizze+tondaRomana.olio*1.5*quantePizze+tondaRomana.sale*1.5*quantePizze)
if(quantePizze==1):
print("Per preparare", quantePizze, "pizza Romana in teglia rettangolare, ti occorrono:")
print()
else:
print("Per preparare", quantePizze, "pizze Romane in teglia rettangolare, ti occorrono:")
print()
print("Farina di semola rimacinata: ", tondaRomana.semola*1.5*quantePizze, "gr")
tondaRomana.stampaIngredientiPizza(tondaRomana.farina*1.5*quantePizze, tondaRomana.acqua*1.5*quantePizze, tondaRomana.lievito*1.5*quantePizze,
tondaRomana.sale*1.5*quantePizze)
print("Olio: ", tondaRomana.olio*1.5*quantePizze, "gr")
print()
print("Totale impasto: ", totaleImpasto, "gr\n")
premiUnTasto=input("Premi INVIO per continuare")
print()
if(romaNapoli==2): ##### PIZZA NAPOLETANA #####
print()
print("1) Tonda 30cm")
print("2) Teglia 40x35cm")
print("0) Uscita")
tondaTeglia=int(input("\nSelezione (0,1 ,2)? ")) ##### TONDA O TEGLIA #####
if(tondaTeglia==0):
break
if(tondaTeglia==1): # TONDA
quantePizze=eval(input("\nQuante pizze tonde da 30cm vuoi preparare? "))
print()
totaleImpasto=(tondaNapoletana.farina*quantePizze+tondaNapoletana.manitoba*quantePizze+
tondaNapoletana.acqua*quantePizze+tondaNapoletana.strutto*quantePizze+
tondaNapoletana.sale*quantePizze)
if(quantePizze==1):
print("Per preparare", quantePizze, "pizza Napoletana in teglia tonda, ti occorrono:")
print()
else:
print("Per preparare ", quantePizze, "pizze Napoletane in teglia tonda, ti occorrono:")
print()
print("Farina manitoba : ", tondaNapoletana.manitoba*quantePizze, "gr")
tondaNapoletana.stampaIngredientiPizza(tondaNapoletana.farina*quantePizze, tondaNapoletana.acqua*quantePizze, tondaNapoletana.lievito*quantePizze,
tondaNapoletana.sale*quantePizze)
print("Strutto: ", tondaNapoletana.strutto*quantePizze, "gr")
print()
print("Totale impasto: ", totaleImpasto, "gr\n")
premiUnTasto=input("Premi INVIO per continuare")
print()
if(tondaTeglia==2): # TEGLIA
quantePizze=eval(input("\nQuante pizze in teglia 40x35cm vuoi preparare? "))
print()
totaleImpasto=(tondaNapoletana.farina*1.5*quantePizze+tondaNapoletana.manitoba*1.5*quantePizze+
tondaNapoletana.acqua*1.5*quantePizze+tondaNapoletana.strutto*1.5*quantePizze+
tondaNapoletana.sale*1.5*quantePizze)
if(quantePizze==1):
print("Per preparare", quantePizze, "pizza Napoletana in teglia rettangolare, ti occorrono:")
print()
else:
print("Per preparare ", quantePizze, "pizze Napoletane in teglia rettangolare, ti occorrono:")
print()
print("Farina manitoba : ", tondaNapoletana.manitoba*1.5*quantePizze, "gr")
tondaNapoletana.stampaIngredientiPizza(tondaNapoletana.farina*1.5*quantePizze, tondaNapoletana.acqua*1.5*quantePizze, tondaNapoletana.lievito*1.5*quantePizze,
tondaNapoletana.sale*1.5*quantePizze)
print("Strutto: ", tondaNapoletana.strutto*1.5*quantePizze, "gr")
print()
print("Totale impasto: ", totaleImpasto, "gr\n")
premiUnTasto=input("Premi INVIO per continuare")
print()
首先根据要制作的披萨类型进行选择:Romana 或 Napoletana 然后是形状:Tonda(圆形)或 Rettangolare(矩形) 然后是数量 并且有成分的打印输出。
比萨有 4 种基本成分:面粉、酵母、水、盐。 要制作 Romana,必须在 4 种基础上添加油和粗面粉。 做 Napoletana 必须在 4 个基础上添加猪油和马尼托巴
所以有一个基类比萨 以及两个派生类 Romana 和 Napoletana
现在我想给程序一个图形界面。 我写了这段代码,但由于我缺乏知识而遇到问题
import sys
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(750, 250)
self.setWindowTitle("CALCOLATORE DOSI IMPASTO PER PIZZA ROMANA O NAPOLETANA")
#self.setWindowIcon(QtGui.QIcon('pizza.jpg'))
self.schermataRomaNapoli()
# SCHERMATA SELEZIONE TIPO IMPASTO DA REALIZZARE: ROMANA O NAPOLETANA
def schermataRomaNapoli(self):
cWidget = QtGui.QWidget(self)
grid = QtGui.QGridLayout(cWidget)
vBox = QtGui.QVBoxLayout()
etichetta1 = QtGui.QLabel("Seleziona il tipo di pizza che vuoi preparare:", cWidget)
etichetta1.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
radio1 = QtGui.QRadioButton("Pizza Romana", cWidget)
radio1.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
radio1.clicked.connect(self.romana)
radio2 = QtGui.QRadioButton("Pizza Napoletana", cWidget)
radio2.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
radio2.clicked.connect(self.napoletana)
radio3 = QtGui.QRadioButton("Uscita", cWidget)
radio3.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
radio3.clicked.connect(self.close)
vBox.addWidget(etichetta1)
vBox.addWidget(radio1)
vBox.addWidget(radio2)
vBox.addWidget(radio3)
grid.addLayout(vBox, 1, 0)
cWidget.setLayout(grid)
self.setCentralWidget(cWidget)
# PIZZA ROMANA
def romana(self):
global romaNapoli
romaNapoli=" Romana "
olio=0
semola=0
self.schermataTondaTeglia()
# PIZZA NAPOLETANA
def napoletana(self):
global romaNapoli
romaNapoli=" Napoletana "
strutto=0
manitoba=0
self.schermataTondaTeglia()
# SCHERMATA SELEZIONE FORMATO TEGLIA: TONDA 30cm O RETTANGOLARE 40x35cm
def schermataTondaTeglia(self):
cWidget = QtGui.QWidget(self)
grid = QtGui.QGridLayout(cWidget)
vBox = QtGui.QVBoxLayout()
etichetta1 = QtGui.QLabel("Seleziona il tipo di formato che vuoi preparare:", cWidget)
etichetta1.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
radio1 = QtGui.QRadioButton("Tonda 30cm", cWidget)
radio1.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
radio1.clicked.connect(self.schermataQuanteTonde)
radio2 = QtGui.QRadioButton("Teglia 40x35cm", cWidget)
radio2.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
radio2.clicked.connect(self.schermataQuanteRettangolari)
radio3 = QtGui.QRadioButton("Indietro", cWidget)
radio3.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
radio3.clicked.connect(self.schermataRomaNapoli)
vBox.addWidget(etichetta1)
vBox.addWidget(radio1)
vBox.addWidget(radio2)
vBox.addWidget(radio3)
grid.addLayout(vBox, 1, 0)
cWidget.setLayout(grid)
self.setCentralWidget(cWidget)
# SCHERMATA SELEZIONE QUANTE PIZZE TONDE DA REALIZZARE
def schermataQuanteTonde(self):
global quantePizze, pizzaPizze, romaNapoli, tondaRettangolare
quantePizze = QtGui.QInputDialog.getInt(self, "CALCOLATORE DOSI IMPASTO PER PIZZA ROMANA O NAPOLETANA", "Quante pizze tonde da 30cm vuoi preparare?", 1)
tondaRettangolare=" tonda"
if(quantePizze[0]==1):
pizzaPizze=" pizza"
# SE LE PIZZE SONO PIU' DI UNA, LE PAROLE PIZZA, ROMANA E NAPOLETANA DIVENTANO PLURALI: PIZZE, ROMANE, NAPOLETANE
if(quantePizze[0]!=1):
pizzaPizze=" pizze"
if(romaNapoli==" Romana "):
romaNapoli=" Romane "
else:
romaNapoli=" Napoletane "
if(romaNapoli==" Romana "):
Romana() # VA SULLA CLASSE ROMANA(PIZZA)
if(romaNapoli==" Napoletana "):
Napoletana() # VA SULLA CLASSE NAPOLETANA(PIZZA)
# SCHERMATA SELEZIONE QUANTE PIZZE RETTANGOLARI DA REALIZZARE
def schermataQuanteRettangolari(self):
global quantePizze, pizzaPizze, romaNapoli, tondaRettangolare
quantePizze = QtGui.QInputDialog.getInt(self, "CALCOLATORE DOSI IMPASTO PER PIZZA ROMANA O NAPOLETANA", "Quante pizze rettangolari da 40x35cm vuoi preparare?", 1)
tondaRettangolare=" rettangolare"
if(quantePizze[0]==1):
pizzaPizze=" pizza"
# SE LE PIZZE SONO PIU' DI UNA, LE PAROLE PIZZA, ROMANA E NAPOLETANA DIVENTANO PLURALI: PIZZE, ROMANE, NAPOLETANE
if(quantePizze[0]!=1):
pizzaPizze=" pizze"
if(romaNapoli==" Napoletana "):
romaNapoli=" Napoletane "
else:
romaNapoli=" Romane "
if(romaNapoli==" Romana "):
Romana() # VA SULLA CLASSE ROMANA(PIZZA)
if(romaNapoli==" Napoletana "):
Napoletana() # VA SULLA CLASSE NAPOLETANA(PIZZA)
class Pizza(QtGui.QMainWindow):
global farina, acqua, lievito, sale
# INGREDIENTI PIZZA BASE
farina=0
acqua=0
lievito=0
sale=0
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(750, 250)
self.setWindowTitle("CALCOLATORE DOSI IMPASTO PER PIZZA ROMANA O NAPOLETANA")
self.setWindowIcon(QtGui.QIcon('pizza.jpg'))
self.stampaIngredientiPizza(farina, acqua, lievito, sale)
# STAMPA INGREDIENTI BASE
def stampaIngredientiPizza(self, f, a, l, s):
stampaFarina=f
stampaAcqua=a
stampaLievito=l
stampaSale=s
# DA TOGLIERE
quantePizze=['2']
pizzaPizze=" pizze"
romaNapoli=" Romane "
tondaRettangolare=" tonda"
# DA TOGLIERE
cWidget = QtGui.QWidget()
grid = QtGui.QGridLayout(cWidget)
vBox = QtGui.QVBoxLayout()
etichetta11 = QtGui.QLabel("Per preparare " + str(quantePizze[0])+ pizzaPizze + romaNapoli + "in teglia" + tondaRettangolare + ", ti occorrono:\n", cWidget)
etichetta11.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
etichetta1 = QtGui.QLabel("Farina 00 (W240): " + str(stampaFarina) + "gr", cWidget)
etichetta1.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
etichetta2 = QtGui.QLabel("Acqua: " + str(stampaAcqua) + "gr", cWidget)
etichetta2.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
etichetta3 = QtGui.QLabel("Lievito di birra: " + str(stampaLievito) + "gr", cWidget)
etichetta3.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
etichetta4 = QtGui.QLabel("Sale: " + str(stampaSale) + "gr", cWidget)
etichetta4.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
vBox.addWidget(etichetta11)
vBox.addWidget(etichetta1)
vBox.addWidget(etichetta2)
vBox.addWidget(etichetta3)
vBox.addWidget(etichetta4)
grid.addLayout(vBox, 1, 0)
cWidget.setLayout(grid)
self.setCentralWidget(cWidget)
# IMPASTO TONDA ROMANA
class Romana(Pizza):
tondaRettangolare=" tonda" # DA TOGLIERE
if(tondaRettangolare==" tonda"):
def stampaIngredientiPizza(self, f, a, l, s):
farina=80
semola=20
acqua=57
lievito=0.171
sale=2.85
olio=2.85
super(Romana, self).stampaIngredientiPizza(farina, acqua, lievito, sale)
app=QtGui.QApplication(sys.argv)
main=MainWindow()
main.show()
sys.exit(app.exec_())
代码的第一部分(MainWindow)有效。 如果我删除 Pizza Class 的 3 ''',则程序将无法运行。
它应该在窗口中打印 4 种基本成分(stampaIngredientiPizza 方法)。 它应该在同一个窗口中添加另外 2 种成分(tondaRomana 方法),具体取决于要制作的比萨饼的种类。
确定 mainWindow 类可以正常工作,我希望您能帮助我运行比萨类,然后将所有内容放在一起。我编辑了下面的代码。现在我有这个错误: NameError: name 'stampaIngredientiPizza' is not defined
class Pizza(QtGui.QMainWindow):
global farina, acqua, lievito, sale
# INGREDIENTI PIZZA BASE
farina=0
acqua=0
lievito=0
sale=0
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(750, 250)
self.setWindowTitle("CALCOLATORE DOSI IMPASTO PER PIZZA ROMANA O NAPOLETANA")
self.setWindowIcon(QtGui.QIcon('pizza.jpg'))
self.stampaIngredientiPizza(farina, acqua, lievito, sale)
# STAMPA INGREDIENTI BASE
def stampaIngredientiPizza(self, f, a, l, s):
stampaFarina=f
stampaAcqua=a
stampaLievito=l
stampaSale=s
# DA TOGLIERE
quantePizze=['2']
pizzaPizze=" pizze"
romaNapoli=" Romane "
tondaRettangolare=" tonda"
# DA TOGLIERE
cWidget = QtGui.QWidget()
grid = QtGui.QGridLayout(cWidget)
vBox = QtGui.QVBoxLayout()
etichetta11 = QtGui.QLabel("Per preparare " + str(quantePizze[0])+ pizzaPizze + romaNapoli + "in teglia" + tondaRettangolare + ", ti occorrono:\n", cWidget)
etichetta11.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
etichetta1 = QtGui.QLabel("Farina 00 (W240): " + str(stampaFarina) + "gr", cWidget)
etichetta1.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
etichetta2 = QtGui.QLabel("Acqua: " + str(stampaAcqua) + "gr", cWidget)
etichetta2.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
etichetta3 = QtGui.QLabel("Lievito di birra: " + str(stampaLievito) + "gr", cWidget)
etichetta3.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
etichetta4 = QtGui.QLabel("Sale: " + str(stampaSale) + "gr", cWidget)
etichetta4.setFont(QtGui.QFont("Times", 20, QtGui.QFont.Bold))
vBox.addWidget(etichetta11)
vBox.addWidget(etichetta1)
vBox.addWidget(etichetta2)
vBox.addWidget(etichetta3)
vBox.addWidget(etichetta4)
grid.addLayout(vBox, 1, 0)
cWidget.setLayout(grid)
self.setCentralWidget(cWidget)
# IMPASTO TONDA ROMANA
class Romana(Pizza):
tondaRettangolare=" tonda" # DA TOGLIERE
if(tondaRettangolare==" tonda"):
def stampaIngredientiPizza(self, f, a, l, s):
farina=80
semola=20
acqua=57
lievito=0.171
sale=2.85
olio=2.85
super(Romana, self).stampaIngredientiPizza(farina, acqua, lievito, sale)
app=QtGui.QApplication(sys.argv)
pizza=Romana()
pizza.show()
sys.exit(app.exec_())
【问题讨论】:
-
什么“不工作”?您可以尝试缩短代码以拥有MCVE 吗?
-
tondaRettangolare in class Romana(Pizza) 虽然它是一个全局变量,但它没有定义。 Romana(Pizza) 类中的 stampaIngredientiPizza(farina, acqua, lievito, sale) 不生成打印输出。评论 Pizza Class 及其子类时,MainWindows 一直工作到成分打印输出
-
确定 mainWindow 类可以工作,我希望您能帮助我运行比萨类,然后将所有内容放在一起。我编辑了下面的代码。现在我有这个错误: NameError: name 'stampaIngredientiPizza' is not defined
-
我制作了一个 MCVE。最后一个代码只有两个类。现在我有这个错误: NameError: name 'stampaIngredientiPizza' is not defined。我无法从 Romana(Pizza) 类中启动 stampaIngredientiPizza 方法
-
最后一次修改代码并使用超类工作。现在的问题是如何从 MainWindow 调用 class Romana(Pizza)
标签: class methods pyqt4 python-3.4 qmainwindow