Esta es la contestación más acertada que te podemos aportar, pero estúdiala detenidamente y valora si se puede adaptar a tu proyecto.
Solución:
Atar la etiqueta a "
evento. Cuando se levanta el callback
se ejecuta dando como resultado que se abra una nueva página en su navegador predeterminado.
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("", lambda e: callback("http://www.google.com"))
link2 = Label(root, text="Ecosia Hyperlink", fg="blue", cursor="hand2")
link2.pack()
link2.bind("", lambda e: callback("http://www.ecosia.org"))
root.mainloop()
También puede abrir archivos cambiando la devolución de llamada a:
webbrowser.open_new(r"file://c:testtest.csv")
Alternativamente, si tiene varias etiquetas y desea una función para todas. Eso es asumiendo que tienes el enlace como el texto.
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("", callback)
root.mainloop()
Hay un módulo en PyPi llamado tkhtmlview (pip install tkhtmlview
) que admite HTML en tkinter. Solo admite algunas etiquetas, pero en la página dice que tiene soporte completo para etiquetas (etiquetas de anclaje para hipervínculos) y admite href attribute. Requiere Python 3.4 o posterior con soporte tcl/tk (tkinter) y el módulo Pillow 5.3.0. Todavía no probé la etiqueta, pero probé el módulo en general y funciona.
Como ejemplo:
import tkinter as tk
from tkhtmlview import HTMLLabel
root = tk.Tk()
html_label=HTMLLabel(root, html=' Google Hyperlink ')
html_label.pack()
root.mainloop()
Agradecemos que desees asistir nuestro trabajo dejando un comentario y valorándolo te damos las gracias.