Могу ли я узнать, возможно ли создать событие для текста в текстовом виджне tkinter? Пример: я нажимаю на слово в текстовом поле, и появляется небольшое окно и дается краткое определение слова.Событие для текста в текстовом виджете Tkinter
1
A
ответ
0
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()
Нажатие на «мир» появится небольшое окно, которое исчезает, когда указатель мыши покидает виджет
4
Вы можете добавить привязок в текстовый виджет, как и вы может с любым другим виджетами. Я думаю, это то, что вы подразумеваете под «созданием события».
В следующем примере я привязываюсь к отпуску кнопки мыши и выделяю слово под курсором. Вы также можете легко открыть окно, отобразить слово где-то в другом месте и т. Д.
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()
Вы также можете добавить привязку к текстовому виджету без использования тегов. –
Правда - я упомянул этот метод, потому что приведенный пример был * «Я нажимаю на слово в текстовом поле, и появляется небольшое окно» * – Brionius