Tkinter Text Widget Hyperlink Manager
October 25, 2000 | Fredrik Lundh
The tkHyperlinkManager module is a simple container for Text widget hyperlinks. Just create a manager for your text widget, and use the add method to register actions.
text = Text(...)
hyperlink = HyperlinkManager(text)
text.insert(INSERT, "this is a link", hyperlink.add(callback))
Here’s the code:
Support module for Text hyperlinks (File: tkHyperlinkManager.py)
from Tkinter import * class HyperlinkManager: def __init__(self, text): self.text = text self.text.tag_config("hyper", foreground="blue", underline=1) self.text.tag_bind("hyper", "<Enter>", self._enter) self.text.tag_bind("hyper", "<Leave>", self._leave) self.text.tag_bind("hyper", "<Button-1>", self._click) self.reset() def reset(self): self.links = {} def add(self, action): # add an action to the manager. returns tags to use in # associated text widget tag = "hyper-%d" % len(self.links) self.links[tag] = action return "hyper", tag def _enter(self, event): self.text.config(cursor="hand2") def _leave(self, event): self.text.config(cursor="") def _click(self, event): for tag in self.text.tag_names(CURRENT): if tag[:6] == "hyper-": self.links[tag]() return
And here’s an example:
# File: hyperlink-1.py import tkHyperlinkManager from Tkinter import * root = Tk() root.title("hyperlink-1") text = Text(root) text.pack() hyperlink = tkHyperlinkManager.HyperlinkManager(text) def click1(): print "click 1" text.insert(INSERT, "this is a ") text.insert(INSERT, "link", hyperlink.add(click1)) text.insert(INSERT, "\n\n") def click2(): print "click 2" text.insert(INSERT, "this is another ") text.insert(INSERT, "link", hyperlink.add(click2)) text.insert(INSERT, "\n\n") mainloop()