Python Qt4 类和 QTGui 窗口
Posted
技术标签:
【中文标题】Python Qt4 类和 QTGui 窗口【英文标题】:Python Qt4 classes & QTGui Windows 【发布时间】: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) 【参考方案1】:您不应该使用全局变量。制作 GUI 时,全局变量非常糟糕。您可能需要多个项目,但您依赖于全局值。当您想要操作实例变量时,您也在操作类变量。您应该在 MainWindow 中实例化变量。
例子:
class Pizza(object):
'''Create a pizza'''
def __init__(self):
self.farina=0
self.acqua=0
self.lievito=0
self.sale=0
self.olio=0
self.semola=0
self.strutto=0
self.manitoba=0
self.set_default_ingredients()
# end Constructor
@classmethod
def default_ingredients(cls):
'''Return the default ingredients for a pizza.'''
return 'farina':0, 'acqua':0, 'lievito':0, 'sale':0
def set_default_ingredients(self):
'''Set the default ingredients.'''
self.farina=0
self.acqua=0
self.lievito=0
self.sale=0
self.olio=0
self.semola=0
self.strutto=0
self.manitoba=0
# end set_default_ingredients
def bake(self):
'''Bake the pizza.'''
pass # Do something to bake the pizza.
# end class Pizza
class Romana(Pizza):
'''Create a special Romana Pizza.'''
@classmethod
def default_ingredients(cls):
'''Return the default ingredients for a Romana Pizza.'''
return 'farina':80, 'semola':20, 'acqua':57, 'lievito':0.171, 'sale':2.85, 'olio':2.85
def set_default_ingredients(self):
'''Set the default ingredients for a Romana Pizza.'''
self.farina=80
self.semola=20
self.acqua=57
self.lievito=0.171
self.sale=2.85
self.olio=2.85
class Napoletana(Pizza):
'''Create a special Napoletana Pizza.'''
@classmethod
def default_ingredients(cls):
'''Return the default ingredients for a Romana Pizza.'''
return 'farina':72, 'manitoba':48, 'acqua':72, 'lievito':0.216, 'sale':3.6, 'strutto':7.2
def set_default_ingredients(self):
'''Set the default ingredients for a Romana Pizza.'''
self.farina=72
self.manitoba=48
self.acqua=72
self.lievito=0.216
self.sale=3.6
self.strutto=7.2
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super().__init__()
self.main_widg = QtGui.QWidget()
self.main_layout = QtGui.QFormLayout()
self.main_widg.setLayout(self.main_layout)
self.setCentralWidget(self.main_widg)
self.current_pizza = Pizza()
self.pizza_type = QtGui.QComboBox()
self.pizza_type.addItems(['Pizza', 'Romana', 'Napoletana'])
self.pizza_type.currentIndexChanged.connect(self.select_pizza)
# Ingredients
self.farina = QtGui.QLineEdit('0')
self.farina.textChanged.connect(self.set_farina)
self.acqua = QtGui.QLineEdit('0')
self.acqua.textChanged.connect(self.set_acqua)
self.lievito = QtGui.QLineEdit('0')
self.lievito.textChanged.connect(self.set_lievito)
self.sale = QtGui.QLineEdit('0')
self.sale.textChanged.connect(self.set_sale)
self.olio = QtGui.QLineEdit('0')
self.olio.textChanged.connect(self.set_olio)
self.semola = QtGui.QLineEdit('0')
self.semola.textChanged.connect(self.set_semola)
self.strutto = QtGui.QLineEdit('0')
self.strutto.textChanged.connect(self.set_strutto)
self.manitoba = QtGui.QLineEdit('0')
self.manitoba.textChanged.connect(self.set_manitoba)
# Actions
self.bake_btn = QtGui.QPushButton("Bake")
self.bake_btn.clicked.connect(self.bake)
# Layout
self.main_layout.addRow('Pizza Type', self.pizza_type)
self.main_layout.addRow('farina', self.farina)
self.main_layout.addRow('acqua', self.acqua)
self.main_layout.addRow('lievito', self.lievito)
self.main_layout.addRow('olio', self.olio)
self.main_layout.addRow('semola', self.semola)
self.main_layout.addRow('strutto', self.strutto)
self.main_layout.addRow('manitoba', self.manitoba)
self.main_layout.addRow(self.bake_btn)
# end __init__
def select_pizza(self, idx):
if self.pizza_type.currentText() == 'Pizza':
self.current_pizza = Pizza()
elif self.pizza_type.currentText() == 'Romana':
self.current_pizza = Romana()
else:
self.current_pizza = Napoletana()
self.set_values()
# end select_pizza
def set_values(self):
'''Set the values from the current pizza.'''
self.farina.setText(str(self.current_pizza.farina))
self.acqua.setText(str(self.current_pizza.acqua))
self.lievito.setText(str(self.current_pizza.lievito))
self.sale.setText(str(self.current_pizza.sale))
self.olio.setText(str(self.current_pizza.olio))
self.semola.setText(str(self.current_pizza.semola))
self.strutto.setText(str(self.current_pizza.strutto))
self.manitoba.setText(str(self.current_pizza.manitoba))
def set_farina(self, val):
self.current_pizza.farina = val
def set_acqua(self, val):
self.current_pizza.acqua = val
def set_lievito(self, val):
self.current_pizza.lievito = val
def set_sale(self, val):
self.current_pizza.sale = val
def set_olio(self, val):
self.current_pizza.olio = val
def set_semola(self, val):
self.current_pizza.semola = val
def set_strutto(self, val):
self.current_pizza.strutto = val
def set_manitoba(self, val):
self.current_pizza.manitoba = val
def bake(self):
self.current_pizza.bake()
# end class MainWindow
if __name__ == "__main__":
import sys
QtGui.QApplication([])
window = MainWindow()
window.show()
sys.exit(QtGui.qApp.exec_())
此用户界面的主要目的是与 current_pizza 值进行交互。通过更改比萨饼类型,您可以更改显示的默认值。更改 GUI 中的值会更改您正在使用的对象。该实例包含在主窗口中,因此您可以调用 MainWindow() 两次并拥有两个彼此独立的工作主窗口。
在这个例子中,我还在基类 Pizza 中包含了所有不同的配料和配料。这使得任何人都可以使用您可用的任何成分制作比萨饼。如果您选择像 Romana 这样的特色披萨,那么用户界面将使用该披萨类型填充值,并且用户可以按照他们想要的方式对其进行调整。
【讨论】:
非常感谢。现在我有很多东西要研究,但首先,如果我运行程序,没有任何附加内容(我还包括:import sys 和 from PyQt4 import QtGui, QtCore lines at TOP) 我只是给你一个如何编写代码的例子。该程序不应该做任何事情。 我的意思是 [链接](www.mediafire.com/view/akdb9gzodhh48st/pizza.png#) 您是否将其作为主要运行? ''if name == "main":'' 语句使得代码仅在主文件时运行。这样在另一个项目中你可以使用''import Pizza''并从另一个文件或项目中调用''pizza.Romana()''。 effbot.org/pyfaq/tutor-what-is-if-name-main-for.htm MainWindow 是类。您必须有一个应用程序才能运行 GUI。即使你''导入比萨''并调用''w = Pizza.MainWindow()''''w.show()''。你仍然需要调用 ''app = QtGui.QApplication([])'' 和 ''sys.exit(app.exec_())''。以上是关于Python Qt4 类和 QTGui 窗口的主要内容,如果未能解决你的问题,请参考以下文章