如何在 Tkinter 中创建带标签的超链接?

问题描述 投票:0回答:8

如何在 Tkinter 中使用 Label 创建

超链接

快速搜索并没有揭示如何做到这一点。相反,只有在

Text
小部件中创建超链接的解决方案。

python hyperlink tkinter label
8个回答
56
投票

将标签绑定到

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

11
投票

或者,如果您有多个标签并希望为所有标签提供一个功能。假设您有链接作为文本

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

4
投票

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

3
投票
您可以简单地导入网络浏览器,添加一个函数并在按钮内部调用它。声明您的布局管理器。代码如下:

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()
仅供参考。它将在计算机的默认浏览器中打开


0
投票
您可以创建一个继承自 tkinter 模块的标签小部件的类,用其他值初始化它,当然包括链接...... 然后创建它的实例,如下所示。

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
投票
""" 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()
    

0
投票
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") )
    

0
投票
要创建链接类型,您需要将按钮与标签绑定:

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

函数。

© www.soinside.com 2019 - 2024. All rights reserved.