Tkinter文本小部件中的文本事件

时间:2015-03-11 08:09:19

标签: python tkinter

我可以知道是否可以在tkinter文本小部件中为文本创建事件? 例如,我单击文本框上的单词,将弹出一个小窗口并给出该单词的简短定义。

3 个答案:

答案 0 :(得分:5)

您可以像对待任何其他窗口小部件一样向文本窗口小部件添加绑定。我认为你的意思是"创造一个活动"。

在下面的例子中,我绑定了鼠标按钮的释放并突出显示了光标下的单词。您可以轻松弹出窗口,在其他地方显示单词等。

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.text = tk.Text(self, wrap="none")
        self.text.pack(fill="both", expand=True)

        self.text.bind("<ButtonRelease-1>", self._on_click)
        self.text.tag_configure("highlight", background="green", foreground="black")

        with open(__file__, "rU") as f:
            data = f.read()
            self.text.insert("1.0", data)

    def _on_click(self, event):
        self.text.tag_remove("highlight", "1.0", "end")
        self.text.tag_add("highlight", "insert wordstart", "insert wordend")

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()

答案 1 :(得分:1)

是的,有可能。您可以使用tag_add功能向单词或文本区域添加标记,然后使用tag_bind方法(使用<Button>事件)生成文本&#34;可点击&#34 ;

您可以创建一个新的TopLevel窗口小部件,在回调函数中弹出一个新窗口。

答案 2 :(得分:0)

这是一个简单的例子:

from tkinter import *

def callback(event):
    info_window = Tk()
    info_window.overrideredirect(1)
    info_window.geometry("200x24+{0}+{1}".format(event.x_root-100, event.y_root-12))

    label = Label(info_window, text="Word definition goes here.")
    label.pack(fill=BOTH)

    info_window.bind_all("<Leave>", lambda e: info_window.destroy())  # Remove popup when pointer leaves the window
    info_window.mainloop()

root = Tk()

text = Text(root)
text.insert(END, "Hello, world!")
text.pack()

text.tag_add("tag", "1.7", "1.12")
text.tag_config("tag", foreground="blue")
text.tag_bind("tag", "<Button-1>", callback)

root.mainloop()

点击&#34; world&#34;将弹出一个小窗口,当鼠标指针离开小部件时它会消失