2011-12-07 108 views
2

我希望将注意力集中在文本小部件上,该小部件会将所输入的内容传递到单独的显示文本小部件中。我有那部分工作。突出显示未聚焦的Tkinter文本小部件中的单击行

我无法弄清楚如何做到这一点,当有人点击显示文本小部件时,单击的行会突出显示(或线条会更改背景颜色),但焦点会返回到条目小部件。我还需要存储对该行的引用,以便我可以使用其他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() 

回答

4

你可以得到你使用这样的点击行开始的索引:

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) 

您可以设置颜色与像这样的“亮点”标签的项目:

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

您可以通过应用标签到该行像这样的东西添加突出显示:

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

你可以像这样将焦点移回到另一个窗口:

self.InWidget.focus_set() 
+0

布莱恩,你是人中的神,没有办法我就已经能够足够的学习完成这个项目没有你的继续帮助。谢谢。 – Symon

+0

@Symon,我几乎想要在我所有的Tkinter问题上事先感谢他:P – DuckPuncher

+0

@Symon有可能我可以将突出显示的文本保存在变量中 – Fahadkalis

相关问题