Class pythonqt4类&;QTGui窗口

Class pythonqt4类&;QTGui窗口,class,methods,pyqt4,python-3.4,qmainwindow,Class,Methods,Pyqt4,Python 3.4,Qmainwindow,我正在努力学习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

我正在努力学习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()
首先,有一个选择是基于什么样的比萨饼制作:罗马或纳波列塔纳 然后是形状:Tonda(圆形)或Rettangolare(矩形) 然后是问题 还有一份配料的打印件

比萨饼有4种基本配料:面粉、酵母、水、盐。 要想制作罗曼娜,必须在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_())
代码的第一部分(主窗口)起作用。 如果我删除比萨饼类的3'',程序将无法运行

它应该在窗口中打印出4种基本成分(stampaIngredientiPizza法)。 它应该在同一个窗口中添加2种以上的配料(tondaRomana法),这取决于要制作的比萨饼的种类


确定了主窗口类的工作,我希望你的帮助运行类比萨饼,然后把一切都放在一起。我编辑了下面的代码。现在我有一个错误:NameError:name'stampaIngredientiPizza'没有定义

    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_())

你不应该使用globals。在制作GUI时,Globals非常糟糕。您可能需要某个项目的多个项目,但您依赖于全局项目的值。当您想要操纵实例变量时,您也在操纵类变量。您应该在主窗口中实例化变量

例如:

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_())
此用户界面的要点是与当前值交互。通过更改比萨饼类型,可以更改显示的默认值。更改GUI中的值会更改正在使用的对象。该实例包含在主窗口中,因此您可以调用MainWindow()两次,并拥有两个相互独立的工作主窗口


在这个例子中,我还包括了基本等级比萨饼中所有不同的配料和配料。这使得任何人都可以用你现有的任何配料做比萨饼。如果选择Romana等特色比萨饼,则用户界面将使用该比萨饼类型填充值,用户可以按照自己的方式进行调整。

什么“不起作用”?您能否尝试缩短代码,使Romana(Pizza)类中有一个?tondaRettangolare?它虽然是一个全局变量,但未定义。Romana(披萨)班的stampaIngredientiPizza(farina、acqua、lievito、sale)不打印输出。在评论Pizza类及其子类时,主窗口一直工作,直到配料打印输出确定主窗口类工作为止,我希望您帮助运行Pizza类,然后将所有内容组合在一起。我编辑了下面的代码。现在我有一个错误:NameError:name'stampaIngredientiPizza'没有定义我做了一个MCVE。最后一个代码只有两个类。现在我有一个错误:NameError:name'stampaIngredientiPizza'没有定义。我无法从Romana(Pizza)类启动stampaIngredientiPizza方法最后一个代码修改并使用超类工作。现在的问题是如何从主窗口调用Romana类(比萨饼),非常感谢。现在我有很多东西要学习,但首先,如果我运行程序,没有任何附加(我还包括:import sys和从PyQt4导入QtGui,顶部的QtCore行),我只是给了你一个如何编写代码的示例。该程序不应该做任何事情。我的意思是[link](www.mediafire.com/view/akdb9gzodhh48st/pizza.png)您是否将其作为主程序运行?语句“if name==“main”:”使代码仅在主文件时运行。通过这种方式,您可以在另一个项目上使用“导入pizza”并从另一个文件或项目调用“pizza.Romana()”。主窗口是类。您必须有一个应用程序来运行GUI。即使您“导入比萨饼”并调用“w=pizza.MainWindow()”“w.show()”。您仍然必须调用“app=QtGui.QApplication([])”和“sys.exit(app.exec_389;())”。