2011-12-07 77 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

相關問題