2017-01-09 67 views
0

我想通過使用類來製作一個小程序。我使用的名字可能看起來有點不可思議,但我想在此使用挪威語。到目前爲止,我已經做了兩個班,其中第一個班將進行下一個班。當我運行這個時,我收到一條錯誤消息。我不明白什麼是錯誤的,但它看起來像是有一些事情要做,以便在讀取之前定義名稱「Meny1」。我將在這些類之後創建一個新函數,首先運行「Hovedvindu」,然後運行「Meny1」。我仍然會很感激幫助。Python 3類錯誤

代碼:

class Hovedvindu: 
    app = Tk() 
    app.title("Matte") 
    vindu = Frame(app, width=1050, height=550) 
    app.minsize(width=1050, height=550) 
    vindu.pack() 
    meny = Meny1() 
    meny.lagMeny() 
    app.mainloop() 


class Meny1: 
    def lagMeny(self): 
     app.config(menu=meny) 
     menu.add_cascade(label="Innstillinger", menu=subMenu) 
     subMenu.add_command(label="Instillinger", command=innstillinger1) 

def innstillinger1(): 
    print("Åpne nytt vindu") 


if __name__ == "__main__": 
    Hovedvindu() 

錯誤消息:

Traceback (most recent call last): 
    File "", line 7, in <module> 
    class Hovedvindu: 
    File "", line 13, in Hovedvindu 
    meny = Meny1() 
NameError: name 'Meny1' is not defined 

Process finished with exit code 1 
+0

感謝您的編輯。我試圖讓代碼塊工作。 – Andreas

回答

3

一切下class Hovedvindu立即運行。這不是一種方法。此時class Meny1尚未執行,並且尚未有該名稱的類別退出。

它看起來像你真的只想Hovedvindu成爲功能來代替:

def hovedvindu(): 
    app = Tk() 
    app.title("Matte") 
    vindu = Frame(app, width=1050, height=550) 
    app.minsize(width=1050, height=550) 
    vindu.pack() 
    meny = Meny1() 
    meny.lagMeny() 
    app.mainloop() 

(我用的是小寫字母這個時候,作爲Python style guide儲備類駝峯名)。

您的下一個問題是,Meny1.lagMeny()無法訪問app局部變量hovedvindu();你需要把它傳遞:

meny = Meny1() 
meny.lagMeny(app) 

class Meny1: 
    def lagMeny(self, app): 
     app.config(menu=self) 
     menu.add_cascade(label="Innstillinger", menu=subMenu) 
     subMenu.add_command(label="Instillinger", command=innstillinger1) 

注意,我改變menyself那裏,menyhovedvindu是另一個地方的名字。

該代碼仍然不起作用,因爲您尚未在任何地方定義名稱subMenu,但這至少與步驟或距離更近。

+0

非常感謝。我會回頭再看看我以前的測試文件。 – Andreas

+0

反正有沒有去掉第一堂課就做這個工作? – Andreas

+0

@Andreas:當然,看看http://effbot.org/tkinterbook/tkinter-hello-again.htm關於如何正確使用類。這裏你沒有正確使用類。 –