我的问题是我有一个创建Tkinter顶级对象的类,然后将一个字段放入其中,我想添加一个事件处理程序,每次按下按钮时都会运行一个方法(也在类中)但是当事件被调用时,它说
AttributeError:Toplevel实例没有属性'updateSearch'
class EditStudentWindow():
def __init__(self):
searchResultList = ['student1', 'student2', 'student3'] # test list
##### window attributes
# create window
self = Tkinter.Toplevel()
#window title
self.title('Edit Students')
##### puts stuff into the window
# text
editStudentInfoLabel = Tkinter.Label(self,text='Select the student from the list below or search for one in the search box provided')
editStudentInfoLabel.grid(row=0, column=0)
# entry box
searchRepositoryEntry = Tkinter.Entry(self)
searchRepositoryEntry.grid(row=1, column=0)
# list box
searchResults = Tkinter.Listbox(self)
searchResults.grid(row=2, column=0)
##### event handler
就在这里
searchRepositoryEntry.bind('<Key>',command = self.updateSearch)
# search results
for result in searchResultList:
searchResults.insert(Tkinter.END, result)
def updateSearch(self, event):
print('foo')
答案 0 :(得分:1)
仅根据您的示例的缩进来判断,似乎updateSearch确实不是类定义的一部分。
假设缩进是标记错误,并且基于您报告的错误消息,另一个问题是您重新定义self
,因此'self.updateSearch'指向顶层而不是EditStudentWindow类。请注意,消息显示为Toplevel instance has no attribute 'updateSearch'
而不是EditStudentWindow instance...
通常,这些小部件是使用继承而不是组合创建的。您可能需要考虑重构代码,使其类似于:
class EditStudentWindowClass(Tkinter.Toplevel):
def __init__(self, *args, **kwargs):
Tkinter.Toplevel.__init__(self, *args, **kwargs)
self.title('Edit Students')
...