How to create a hyperlink with a Label in Tkinter?

后端 未结 4 924
逝去的感伤
逝去的感伤 2020-12-01 14:21

How do you create a hyperlink using a Label in Tkinter?

A quick search did not reveal how to do this. Instead there were only solutions

相关标签:
4条回答
  • 2020-12-01 14:42

    Bind the label to "<Button-1>" event. When it is raised the callback is executed resulting in a new page opening in your default browser.

    from tkinter import *
    import webbrowser
    
    def callback(url):
        webbrowser.open_new(url)
    
    root = Tk()
    link1 = Label(root, text="Google Hyperlink", fg="blue", cursor="hand2")
    link1.pack()
    link1.bind("<Button-1>", lambda e: callback("http://www.google.com"))
    
    link2 = Label(root, text="Ecosia Hyperlink", fg="blue", cursor="hand2")
    link2.pack()
    link2.bind("<Button-1>", lambda e: callback("http://www.ecosia.org"))
    
    root.mainloop()
    

    You can also open files by changing the callback to:

    webbrowser.open_new(r"file://c:\test\test.csv")
    
    0 讨论(0)
  • 2020-12-01 14:48

    There is a module on PyPi called tkhtmlview (pip install tkhtmlview) that supports HTML in tkinter. It only supports some tags, but on the page, it says that it has full support fro tags (anchor tags for hyperlinks), and supports the href attribute. It requires Python 3.4 or later with tcl/tk (tkinter) support and the Pillow 5.3.0 module. I haven't tried the tag yet, but I tried the module in general and it works.

    As an example:

    import tkinter as tk
    from tkhtmlview import HTMLLabel
    
    root = tk.Tk()
    html_label=HTMLLabel(root, html='<a href="http://www.google.com"> Google Hyperlink </a>')
    html_label.pack()
    root.mainloop()
    
    0 讨论(0)
  • 2020-12-01 14:49

    Alternatively if you have multiple labels and want the one function for all. That is assuming you have the link as the text

    import tkinter as tk
    import webbrowser
    
    def callback(event):
        webbrowser.open_new(event.widget.cget("text"))
    
    root = tk.Tk()
    lbl = tk.Label(root, text=r"http://www.google.com", fg="blue", cursor="hand2")
    lbl.pack()
    lbl.bind("<Button-1>", callback)
    root.mainloop()
    
    0 讨论(0)
  • 2020-12-01 14:53

    you can create a class that inherits from label widget of tkinter module , initialize it with additional values including the link of course ... then you create an instance of it as shown below.

    import tkinter as t
    import webbrowser
    
    
    class Link(t.Label):
        
        def __init__(self, master=None, link=None, fg='grey', font=('Arial', 10), *args, **kwargs):
            super().__init__(master, *args, **kwargs)
            self.master = master
            self.default_color = fg # keeping track of the default color 
            self.color = 'blue'   # the color of the link after hovering over it 
            self.default_font = font    # keeping track of the default font
            self.link = link 
    
            """ setting the fonts as assigned by the user or by the init function  """
            self['fg'] = fg
            self['font'] = font 
    
            """ Assigning the events to private functions of the class """
    
            self.bind('<Enter>', self._mouse_on)    # hovering over 
            self.bind('<Leave>', self._mouse_out)   # away from the link
            self.bind('<Button-1>', self._callback) # clicking the link
    
        def _mouse_on(self, *args):
            """ 
                if mouse on the link then we must give it the blue color and an 
                underline font to look like a normal link
            """
            self['fg'] = self.color
            self['font'] = self.default_font + ('underline', )
    
        def _mouse_out(self, *args):
            """ 
                if mouse goes away from our link we must reassign 
                the default color and font we kept track of   
            """
            self['fg'] = self.default_color
            self['font'] = self.default_font
    
        def _callback(self, *args):
            webbrowser.open_new(self.link)  
    
    
    root = t.Tk()
    root.title('Tkinter Links !')
    root.geometry('300x200')
    root.configure(background='LightBlue')
    
    URL = 'www.python.org'
    
    link = Link(root, URL, font=('sans-serif', 20), text='Python', bg='LightBlue')
    link.pack(pady=50)
    
    root.mainloop()
    
    0 讨论(0)
提交回复
热议问题