在tkinter中使用for循环创建超链接标签,同时将每个标签绑定到不同的回调

2024-10-02 22:23:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的口述:

dict = {"site1": link to site1,
        "site2": link to site2,
        "site3": link to site3,
        [...]
        }

我也不知道在dict中会有多少个站点

我试图实现的是将不同的链接绑定到for循环中动态创建的标签。我想做一个有名字列表的窗口,当你点击名字时,它会在网站上重定向你

我正在使用下面的this示例,但没有成功

from tkinter import Tk, Label, StringVar
import webbrowser

root = Tk()

list1 = ["site1-google","site2-facebook"]
list2 = ["google.com", "fb.com"]

for v1, v2 in zip(list1, list2):

    item_values = '{}'.format(v1)
    sv = StringVar()
    lbl = Label(root, width="100", height="2",textvariable=sv)
    lbl.pack()
    lbl.bind("<Button-1>", lambda e: callback(v2))

    

    sv.set(item_values)
    
    def callback(url):
        webbrowser.open_new(url)

root.mainloop()

当我运行该程序时,它只是将列表2中的“最后一个站点”绑定到所有新创建的标签上

我在某个地方读到lambda是延迟绑定的,因此它将在每次给定列表的最后一个值绑定时进行绑定,但我不知道如何解决这个问题

我该怎么办


Tags: toimport列表for站点linkroot标签