簡體   English   中英

在未聚焦的Tkinter文本小部件中突出顯示單擊的行

[英]Highlighting a clicked line in an unfocused Tkinter text widget

我想重點關注輸入文本小部件,它將把輸入的內容傳遞到單獨的顯示文本小部件中。 我有那部分工作。

我不知道如何做到這一點,以便當有人單擊顯示文本窗口小部件時,單擊的行被突出顯示(或者該行更改了背景顏色),但是焦點返回到了輸入窗口小部件。 我還需要存儲對該行的引用,以便我可以使用其他小部件對其進行操作。

這是一些示例代碼,因此您可以了解到目前為止的情況。 我現在在GUI中有更多的小部件和代碼,但是我只在我的問題上發布了相關的代碼:

from Tkinter import *

class GUI:
    def __init__(self,root):
        Window = Frame(root)
        self.OutWidget = Text(Window, state='disabled')
        self.InWidget = Text(Window,bg='black',bd=3,fg='white',exportselection=0,height=1,wrap=WORD,insertofftime=0,insertbackground="white")
        self.OutWidget.pack()
        self.InWidget.pack()
        Window.pack()
        self.InWidget.focus_set()
        self.OutWidget.bind("<Button 1>",self.Select)
        self.InWidget.bind("<Return>", self.Post)

    def Post(self,event):
        text = self.InWidget.get(1.0,2.0)
        self.InWidget.delete(1.0,2.0)
        self.OutWidget['state'] = ['normal']
        self.OutWidget.insert('end',text)
        self.OutWidget['state'] = ['disabled']
        return ("break")

    def Select(self,event):
        #highlight the CURRENT line
        #store a reference to the line
        #return focus to InWidget
        self.InWidget.focus()
        return ("break")

if __name__ == '__main__':
    root = Tk()
    App = GUI(root)
    root.mainloop()

您可以使用以下方法獲取您單擊的行的開頭的索引:

line_start = self.OutWidget.index("@%s,%s linestart" % (event.x, event.y))

您可以通過將標記應用到該行上來添加突出顯示,例如:

line_end = self.OutWidget.index("%s lineend" % line_start)
self.OutWidget.tag_remove("highlight", 1.0, "end")
self.OutWidget.tag_add("highlight", line_start, line_end)

您可以使用“ highlight”標簽為商品設置顏色,如下所示:

self.OutWidget.tag_configure("highlight", background="bisque")

您可以使用以下方法將焦點移回另一個窗口:

self.InWidget.focus_set()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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