2014-02-25 67 views
1

我正在爲tkinter & python中的文本編輯器創建自動完成功能。 目前自動完成的過程如下:tkinter彈出窗口和文本處理自動完成

如果有像自動完成詞典中的輸入,請撥打popup

我這樣做通過t_start.bind("<Key>", asprint)其中asprint是我的彈出功能。 我可以通過轉義按鈕或通過點擊其他地方逃避彈出。 我想要的是 - 在用戶按任意文本鍵時 - 再次重新觸發彈出窗口,縮小自動完成中的搜索範圍。

F-> FI-> FIL->文件

之類的事情。我不知道用什麼來獲得輸入,在彈出窗口打開後。我如何得到第二個和每個後續輸入字符?

彈出功能:

def popup(event): 
    selected_text='' 
    try: 
     selected_text=t_start.get("sel.first", "sel.last") 
    except TclError: 
     for i in range(len(selected_text)): 
      if selected_text[i:0]==word[i:0]: 
       menu.add_command(label="%s" %selected_text, command=insert_word) 
       menu.delete(0) 
      else: 
       pass 
     menu.tk_popup(event.x_root, event.y_root) 
+0

你的彈出功能是什麼樣的? – atlasologist

+0

剛剛添加到問題 – kaboom

回答

0

的關鍵是要保持鍵盤焦點在您的輸入窗口小部件。當你彈出你的窗口時,確保焦點保持(或返回)入口小部件。任何影響彈出窗口的事件都需要附加到條目窗口小部件而不是彈出窗口。

但是,如果您使用菜單作爲彈出窗口,這將是不可能的。菜單是自動完成功能的錯誤選擇,因爲它會竊取所有事件,直到菜單被解除。如果您希望它嵌入到窗口中,您的彈出窗口需要是Toplevel窗口小部件的實例(如果您希望它「浮動」)或其他窗口小部件(列表框,文本,畫布等)。

在ActiveState上有一個配方,給出了一個使用嵌入窗口進行自動完成的例子。 http://code.activestate.com/recipes/578253-an-entry-with-autocompletion-for-the-tkinter-gui/

+0

感謝您的回答。我應該說 - 我需要通過文本字段完成此操作。您推薦的方法將一個列表放入我的文本字段中,並僅應用於此。你能建議我如何將它應用到整個文本領域? – kaboom