如何在 Tkinter 中使用 Label
创建
超链接?
快速搜索并没有揭示如何做到这一点。相反,只有在
Text
小部件中创建超链接的解决方案。
将标签绑定到
"<Button-1>"
事件。当它被提升时,callback
被执行,导致在默认浏览器中打开一个新页面。
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()
您还可以通过将回调更改为:
来打开文件webbrowser.open_new(r"file://c:\test\test.csv")
或者,如果您有多个标签并希望为所有标签提供一个功能。假设您有链接作为文本
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()
PyPi 上有一个名为 tkhtmlview (pip install tkhtmlview
) 的模块,支持 tkinter 中的 HTML。它只支持一些标签,但是在页面上,它说它完全支持标签(超链接的锚标签),并且支持href属性。它需要具有 tcl/tk (tkinter) 支持的 Python 3.4 或更高版本以及 Pillow 5.3.0 模块。我还没有尝试过该标签,但我总体上尝试了该模块并且它有效。举个例子:
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()
from tkinter import *
import webbrowser
# Displaying the root window
window = Tk()
window.config(padx=100, pady=100)
# Function Declaration
def callback():
webbrowser.open_new("https://www.google.com/")
# Button Declaration
your_variable_name = Button(text="button_name", command=callback)
your_variable_name.grid(column=2, row=3)
# keeping the Tkinter Interface running
window.mainloop()
仅供参考。它将在计算机的默认浏览器中打开
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()
""" Hyperlink *with* hover affect - Wallee """
from tkinter import *
import webbrowser
# Creates hyperlinks
def hyperlink(root, link: str, **kwargs) -> Label:
# Iterate through a few default settings to make it look like a link
for i in (("fg", "blue"), ("text", "Hyperlink!"), ("font", "None 10"), ("cursor", "hand2")):
kwargs.setdefault(i[0], i[1])
# Create the label
label = Label(root, **kwargs)
label.link = link
# Bind the click event to a lambda that opens the link using the webbrowser module
label.bind("<Button-1>", lambda e: webbrowser.open(e.widget.link))
# Bind the enter and leave events to add a hover affect
label.bind("<Enter>", lambda e: e.widget.configure(font=e.widget.cget("font") + " underline"))
label.bind("<Leave>", lambda e: e.widget.configure(font=e.widget.cget("font")[:-10]))
return label
# Basic Tkinter setup
root = Tk()
root.geometry("150x50")
# Create and pack the "hyperlink" (AKA label)
link = hyperlink(root, "https://www.google.com", font="None 15")
link.pack()
root.mainloop()
from tkinter import *
import tkinter as tkr
import webbrowser
link = Label(root, text="Forgot your password?", fg="blue", cursor="hand2")
link.grid(row=4,column=3)
link.bind("<Button-1>", lambda e: webbrowser.open_new_tab("https://thozhiindia.com/login?forget_password")
)
from tkinter import *
import webbrowser
def callback(link):
webbrowser.open_new(link)
root = Tk()
link = Label(root, text="Click to visit website", cursor="hand")
link.bind("<Button-1>", callback("http://www.google.com"))
link.pack()
root.mainloop()
我们使用回调函数打开网站,然后在单击链接时调用它。确保在绑定标签后调用
link.pack()
函数。