[英]How to get selected text from Python Tkinter Text widget
我正在使用Python Tkinter開發一個基於文本的應用程序,在我的Text小部件中創建了一些單詞是tag_configured,雙擊鼠標時,標記的單詞選擇顯示為藍色,如何獲取此選定文本以供進一步處理,代碼如下。 ........
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"
.................................................. .....................
有人可以指導我如何解決這個錯誤。
正如在評論中提到的tobias_k一樣,事件綁定的執行順序在這里是關鍵,因為您試圖在實際選擇文本之前獲取所選文本。 您可以使用bindtags()
窗口小部件方法查看綁定執行的順序。 當您為文本小部件執行此操作時,您將看到類似的內容
('.38559496', 'Text', '.', 'all')
這意味着從左到右,綁定事件執行的順序是這樣,以便評估特定小部件特有的第一個事件,然后是特定於小部件類的那些,然后是那些到根窗口的那些,最后是應用程序中的其他所有事件。等級( 來源 )。
您的雙擊事件位於窗口小部件級別,因為它僅應用於該特定窗口小部件,但實際選擇的文本是Text類級別的事件。 因此,您必須重新排列順序,以便類事件發生在窗口小部件事件之前。 您可以通過調用不帶參數的bindtags
來獲取訂單,然后通過使用包含訂單的元組再次調用它來定義新訂單:
order = self.area.bindtags()
self.area.bindtags((order[1], order[0], order[2], order[3]))
這樣可確保在嘗試讀取選擇之前執行文本選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.