2013-08-25 2 views
0

я узнал книгу «программирование питона.. В эти дни, когда я запускаю примеры, я встретил эту проблему Скорлупа показала мне ошибку:Там нет атрибута для одного объекта

AttributeError:„объекта NoneType“имеет no attribute 'pack'

Однако я копирую именно код из книги. Я новичок в Python. Я пытаюсь исправить это самостоятельно, но я потерпел неудачу. Поэтому я надеюсь, что кто-то может мне помочь.

Спасибо !!!!!!

КОД:

#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() 
+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 внутри самого класса.

Смежные вопросы