2016-12-07 87 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