用于单击Python Tkinter Text Widget中每一行的单独命令

时间:2012-05-15 17:46:26

标签: python tkinter

背景

我的文本小部件中出现的每个项目都代表任务。我在ListBox上使用Text小部件,因为Text小部件允许不同的颜色使用不同的颜色。每个任务的颜色都是它的状态。是否可以为每个任务设置单独的LC命令?

我有一个拆分窗格应用程序,右边有任务(可能是可滚动的),我想点击一个任务,在左边的窗格中打开它进行审查。

主要问题

我可以通过左键单击Python Text Tkinter小部件中的单独行来激活单独的事件吗?

2 个答案:

答案 0 :(得分:1)

我认为你可以做这样的事情。 tkHyperlinkManger做到了(http://effbot.org/zone/tkinter-text-hyperlink.htm

由于您已经对线条进行了不同的着色,我假设您正在使用tag_config。然后,您只需要tag_bind将回调绑定到文本区域。

答案 1 :(得分:1)

只需在<1>上设置绑定即可。使用窗口小部件的index方法和事件的x / y坐标,可以轻松获取单击的行号。

这是一个简单的例子:

import Tkinter as tk

class ExampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.status = tk.Label(self, anchor="w")
        self.status.pack(side="bottom", fill="x")
        self.text = tk.Text(self, wrap="word", width=40, height=8)
        self.text.pack(fill="both", expand=True)
        self.text.bind("<1>", self.on_text_button)
        for n in range(1,20):
            self.text.insert("end", "this is line %s\n" % n)


    def on_text_button(self, event):
        index = self.text.index("@%s,%s" % (event.x, event.y))
        line, char = index.split(".")
        self.status.configure(text="you clicked line %s" % line)

if __name__ == "__main__":
    app = ExampleApp()
    app.mainloop()