2011-02-15 67 views
0

我的問題是,我有一個創建一個Tkinter的TOPCLASS對象,然後把現場變成它的一類,我想補充一點,運行的方法(這也是在事件處理程序類)每次按下按鈕時,但是當事件被稱爲它說故障一類的內部Tkinter的事件處理程序

AttributeError: Toplevel instance has no attribute '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 

right here

searchRepositoryEntry.bind('<Key>',command = self.updateSearch) 
    # search results 

    for result in searchResultList: 
     searchResults.insert(Tkinter.END, result) 

def updateSearch(self, event): 
    print('foo')  
+0

你覺得`self = Tkinter.Toplevel()`做了什麼? – delnan 2011-02-15 17:56:27

回答

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') 
     ... 
+0

我試着添加繼承,它仍然表示頂層沒有該屬性,是的,這是一個標記錯誤,我再次檢查和代碼縮進 – Brandon 2011-02-15 20:05:22