在Tkinter的文本小部件中添加文本链接 [英] Adding Link to Text in Text Widget in Tkinter

查看:47
本文介绍了在Tkinter的文本小部件中添加文本链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Tkinter和bs4在python中创建一个歌曲通知程序.我已经从网站中提取了歌曲及其对应的网址.我已经使用文本小部件来存储歌曲,并将其网址作为字典中的键值.

I am creating a song notification program in python using Tkinter and bs4. I have extracted songs and their corresponding urls from a site. I have used text widget to store songs and have their urls as key value in a dictionary.

现在,我想添加指向歌曲名称(存储在文本小部件中)的链接,以便当我单击特定歌曲时,其网址以镶边形式打开.

Now I want to add links to the songs name(stored in text widget) so that when I click a particular song, its url is opened in chrome.

以下是代码段:

from tkinter import *
import webbrowser
from bollywood_top_50 import bollywood_songs_list , bollywood_songs_dict
from international_top_50 import international_songs_list


b_songs_list  = bollywood_songs_list()
b_songs_dict =  bollywood_songs_dict()
i_songs_list = international_songs_list()

root = Tk()
S = Scrollbar(root)
T = Text(root, height=20, width=30,cursor="hand2")
S.pack(side=RIGHT, fill=Y)
T.pack(side=LEFT, fill=Y)
S.config(command=T.yview)
T.config(yscrollcommand=S.set)    


def callback_a():
    T.delete(1.0,END)
    for songs in b_songs_list:
       T.insert(END, songs + '\n')   

def callback_b():
    T.delete(1.0,END)
    for songs in i_songs_list:
        T.insert(END, songs + '\n')        

bollywood_button = Button(root,text="Bollywood-Top-50", command=callback_a)
bollywood_button.pack()

international_button = Button(root,text="International-Top-50", command=callback_b)
international_button.pack()

以下是示例输出:

推荐答案

我没问题.创建一个名为"tkHyperlinkManager.py"的文件,其中包含:

I had no problem. Create a file called "tkHyperlinkManager.py" that contains:

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

将其导入您的程序并插入链接.我提供了似乎合理的样本数据.宝莱坞歌曲列表带有超链接,国际歌曲列表没有超链接.我只是对该机制的演示.您将必须自己编写所有回调和Web界面.

Import it to your program and insert links. I've supplied sample data which seems reasonable. The list of Bollywood songs are with hyperlinks and the list of International songs are not. I'ts just a demonstration of the mechanism. You will have to write all the callbacks and web interface yourself.

from tkinter import *
from tkHyperlinkManager import *

b_songs_list  = ['Bollywood song 1','Bollywood song 2','Bollywood song 3']
i_songs_list = ['International song 1','International song 2','International song 3']

root = Tk()
S = Scrollbar(root)
T = Text(root, height=20, width=30,cursor="hand2")
hyperlink = HyperlinkManager(T)
S.pack(side=RIGHT, fill=Y)
T.pack(side=LEFT, fill=Y)
S.config(command=T.yview)
T.config(yscrollcommand=S.set)    

def click1():
    print('click1')

def callback_a():   # Bollywood songs WITH hyperlinks
    T.delete(1.0,END)
    for songs in b_songs_list:
       T.insert(END, songs, hyperlink.add(click1))
       T.insert(END, '\n')

def callback_b():
    T.delete(1.0,END)
    for songs in i_songs_list:
        T.insert(END, songs + '\n')        

bollywood_button = Button(root,text="Bollywood-Top-50", command=callback_a)
bollywood_button.pack()

international_button = Button(root,text="International-Top-50", command=callback_b)
international_button.pack()

这篇关于在Tkinter的文本小部件中添加文本链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆