2015-04-28 75 views
3

我正在開發一個基於文本的應用程序,使用Python Tkinter,在我的文本小部件中創建了一些單詞是tag_configured,雙擊鼠標時該標記的單詞出現藍色選擇,如何可以我得到了進一步的處理這個選定的文本,代碼如下.........如何從Python中選取文本Tkinter文本部件

self.area.tag_configure('errorword',font=('MLU-Panini', 15,foreground="black",underline=True) 

self.area.tag_bind("errorword","<Double-Button-1>",self.mouse_click,add=None) 

def mouse_click(self,event): 

     errorstr=self.area.get(tk.SEL_FIRST,tk.SEL_LAST) 
     print("mmmmmm",errorstr) 

顯示錯誤

File "C:\Python34\lib\tkinter\__init__.py", line 3082, in get 
    return self.tk.call(self._w, 'get', index1, index2) 
_tkinter.TclError: text doesn't contain any characters tagged with "sel" 

............. .................................................. ........

有人可以指導我如何解決這個錯誤。

+0

你應該看看Tkinter StringVar;) –

+1

@ArthurVaïsse不,他不應該看看StringVar。 – nbro

+0

StringVar無法知道選擇了什麼 – Morb

回答

2

tobias_k mentions in his comment完全一樣,執行事件綁定的順序在這裏很關鍵,因爲您正試圖在實際選擇文本之前獲取選定的文本。您可以使用bindtags()窗口小部件方法查看綁定執行的順序。當你這樣做的文本控件,你會看到類似

('.38559496', 'Text', '.', 'all') 

這意味着順序,從左至右,結合事件的執行是爲了讓所特有的這種特定的小部件,第一事件進行判斷,然後是那些特定的小部件類,然後那些到你的根窗口,最後是應用程序級別的其他所有(source)。

您的雙擊事件位於窗口小部件級別,因爲它僅應用於該特定窗口小部件,但實際選擇的文本是Text類級別的事件。因此,您將不得不重新排列順序,以便類別事件在小部件事件之前出現。你可以通過調用bindtags不帶參數獲得訂單,然後把含有順序元組再次調用它定義了一個新秩序:

order = self.area.bindtags() 
self.area.bindtags((order[1], order[0], order[2], order[3])) 

這可以確保進行文本的選擇,您嘗試讀取前選擇。

相關問題