【问题标题】:Highlighting a clicked line in an unfocused Tkinter text widget在未聚焦的 Tkinter 文本小部件中突出显示单击的行
【发布时间】:2012-01-15 09:56:52
【问题描述】:

我想继续关注输入文本小部件,它会将输入的任何内容传递到单独的显示文本小部件中。我有那部分工作。

我不知道如何做到这一点,以便当有人单击显示文本小部件时,单击的行会突出显示(或该行更改背景颜色),但焦点会返回到条目小部件。我还需要存储对该行的引用,以便我可以使用其他小部件对其进行操作。

这里有一些示例代码,您可以了解我目前的情况。我现在在 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()

【问题讨论】:

    标签: python widget tkinter


    【解决方案1】:

    您可以使用以下方法获取您单击的行首的索引:

    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()
    

    【讨论】:

    • Bryan,你是男人中的神,如果没有你的持续帮助,我不可能学得足够多的东西来完成这个项目。谢谢。
    • @Symon,我几乎想在所有 Tkinter 问题上提前感谢他:P
    • @Symon 我是否可以将突出显示的文本保存在变量中
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 2011-04-16
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多