2014-02-21 18 views
0

我已經使用了一個tkinter自動填充小部件。我的代碼從這裏:python tkinter autocomplete條目:如何重置它以及如何更改搜索模式?

http://code.activestate.com/recipes/578253-an-entry-with-autocompletion-for-the-tkinter-gui/

現在我有兩個問題。一個是,當用戶點擊清除按鈕時,這個自動填充小部件應該重置爲「」。

所以我上面給出這樣的代碼中增加了一個額外resetauto功能:

def resetauto(): 
    self.var.set("") 

在我清晰的按鍵功能,我用這個復位這樣的:

W2.resetauto(); # W2 is the name of the autocomplete entry widget 

但是,當我再次運行程序,並試圖重置它,我得到錯誤:

W2.resetauto() 
TypeError: resetauto() takes no arguments (1 given) 

有人能告訴我什麼出錯?

另外我還有一個問題。對於這個自動填充小部件,我有一個4000字的數據集。所有這些單詞開始「rs」,例如rs123,rs485459等。因此,如果用戶開始鍵入rs,它將顯示4000個單詞。相反,我希望這個自動完成小部件從輸入的第三個字符開始匹配。可能嗎?你能簡單地解釋一下,我需要從鏈接中查看這個小部件的代碼。謝謝...

+0

什麼'resetauto()'這裏它從哪兒得到叫什麼名字? – Gogo

+0

哦,我忘了函數名稱是重置自動等待我將編輯問題 –

+1

應該'def resetauto(self):'。 – BartoszKP

回答

0

因爲你有一個類名爲AutocompleteEntry和您所定義resetauto類裏面,你必須把它定義爲一個標準的類方法與self作爲第一個參數。例如:

def resetauto(self): 
    ... 

至於能夠只匹配三個大字已經進入後,它看起來像所有你需要做的是修改comparison,因爲這是爲返回列表。也許這會做的伎倆 - 它只返回模式的列表,如果您輸入至少三個字符:

def comparison(self): 
    if len(self.var.get()) < 3: 
     return [] 
    pattern = re.compile('.*' + self.var.get() + '.*') 
    return [w for w in self.lista if re.match(pattern, w)] 
+0

非常感謝。它效果很好 –

相關問題