簡體   English   中英

如何從Python Tkinter Text小部件中獲取所選文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM