2016-12-07 141 views
-1

嗯,我想添加菜單欄,但出了問題。Tkinter在python3,菜單欄不起作用

它說:AttributeError的: 'NoneType' 對象有沒有屬性 '配置'

我的代碼:

from tkinter import * 


class ApplicationWindow(Tk): 

    def __init__(self, master=None): 
     Tk.__init__(self, master) 
     self.master = master 
     self.geometry('800x400') 
     self.f_app = Frame(self).pack() 
     menubar = Menu(self.master) 
     self.master.config(menu=menubar) 

     fileMenu = Menu(menubar) 
     fileMenu.add_command(label="Exit", command=self.onExit) 
     menubar.add_cascade(label="File", menu=fileMenu) 
     self.b_log = Button(self, width=10, text="Войти", command=self.func).pack() 


    def onExit(self): 
     self.quit() 

    def func(self): 
     print("hello") 

def main(): 
    # root = tk 
    app = ApplicationWindow() 
    app.mainloop() 


if __name__ == '__main__': 
    main() 

回答

1

你初始化你ApplicationWindow課,而不會傳遞任何參數中,像這樣的app = ApplicationWindow()。在你init方法,你給master一個None默認情況下,當您嘗試使用master.config它說

'NoneType' object has no attribute 'config'

嘗試傳遞一個參數在初始化的ApplicationWindow實例英寸不管你想要master是什麼(只是不是None對象)。

我已經更新了你的代碼(下面),它運行。按鈕工作,退出功能關​​閉窗口。有很多事情要解決,但它運行沒有錯誤。從這裏取:

import tkinter 


class ApplicationWindow(tkinter.Tk): 

    def __init__(self, master=None): 
     # Tk.__init__(self, master) 
     self.master = master 
     self.master.geometry('800x400') 
     self.master.f_app = tkinter.Frame(self.master).pack() 
     menubar = tkinter.Menu(self.master) 
     self.master.config(menu=menubar) 

     fileMenu = tkinter.Menu(menubar) 
     fileMenu.add_command(label="Exit", command=self.onExit) 
     menubar.add_cascade(label="File", menu=fileMenu) 
     self.b_log = tkinter.Button(self.master, width=10, text="Войти", command=self.func).pack() 


    def onExit(self): 
     self.master.destroy() 

    def func(self): 
     print("hello") 

def main(): 
    root = tkinter.Tk() 
    app = ApplicationWindow(root) 
    root.mainloop() 


if __name__ == '__main__': 
    main() 
+1

謝謝你,工作! – genesi5

1

您有一個名爲master=None的參數默認爲None。所以,當你創建一個沒有參數的ApplicationWindow()實例時,你的master參數會得到None,並且在這裏你調用config()方法,但是你的master沒有,並且它沒有一個名爲config的方法。

class ApplicationWindow(Tk): 
    def __init__(self, master=None): 
     ... 
     self.master.config(menu=menubar) # Error accurred here 

def main(): 
    # root = tk 
    app = ApplicationWindow() # pass an argument