2015-03-11 3 views

ответ

0

Да, это возможно. Вы можете добавить тег в слово или текстовую область, используя функцию tag_add, а затем использовать метод tag_bind (с событием <Button>), чтобы сделать текст «интерактивным».

Вы можете создать новый виджет TopLevel, чтобы открыть новое окно в функции обратного вызова.

+0

Вы также можете добавить привязку к текстовому виджету без использования тегов. –

+0

Правда - я упомянул этот метод, потому что приведенный пример был * «Я нажимаю на слово в текстовом поле, и появляется небольшое окно» * – Brionius

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()