一个对象没有属性

时间:2013-08-25 02:55:40

标签: python python-3.x

这些天我学习了“编程python”这本书。当我运行这些例子时,我遇到了问题。shell向我显示了错误:

AttributeError:'NoneType'对象没有属性'pack'

但是,我从书中复制了确切的代码。我是Python的新手。我试着自己解决它,但我失败了。所以我希望有人能帮助我。

谢谢!!!!!!

CODE:

#File test.py
from tkinter import *
from tkinter.messagebox import showinfo

def MyGui(Frame):
    def __init__(self, parent = None):
        Frame.__init__(self, parent)
        button = Button(self, text='press', command=reply)
        button.pack()
    def reply(self):
        showinfo(title = 'popup',message ='Button pressed!')

if __name__ == '__main__':
    window = MyGui()
    window.pack()
    window.mainloop()

    #File test2.py
from tkinter import *
from test import MyGui

mainwin = Tk()
Label(mainwin,text = __name__).pack()

popup = Toplevel()
Label(popup,text = 'Attach').pack(side = LEFT)
MyGui(popup).pack(side=RIGHT)
mainwin.mainloop()

1 个答案:

答案 0 :(得分:2)

您可以使用以下代码解决此问题:

#File test.py
from tkinter import *
from tkinter.messagebox import showinfo

class MyGui(Frame):
    def __init__(self, parent = None):
        Frame.__init__(self, parent)
        button = Button(self, text='press', command=self.reply)
        button.pack()
    def reply(self):
        showinfo(title = 'popup',message ='Button pressed!')

if __name__ == '__main__':
    window = MyGui()
    window.pack()
    window.mainloop()

基本上有两个小的语法错误。首先,您尝试创建一个MyGui类,但是您使用了关键字def来代替函数(返回None,因此收到了错误。)它在语法上是正确的python用于定义函数内部的函数,因此有点难以捕获。您必须使用关键字class来定义类。

其次,在引用函数reply时,您必须在类本身中使用self.reply