如何将不同的 URL 分配给 for 循环中生成的 tkinter 标签?

How to assign different URLs to tkinter labels generated in for loop?

我正在使用函数生成我的标签,每个标签必须打开不同的 URL。到目前为止,无论我点击什么文本,它都会打开最后一个 URL

from tkinter import *
import webbrowser

def callback(url):
    webbrowser.open_new(url)
    
def write_hello():
        
    tuples = (('bing ', 'https://bing.com'), ('youtube ', 'https://youtube.com'), ('google ', 'google.com'))

    for label_text, url in tuples:
        
        text = mytext.cget("text") + '\n' + str(label_text)
        mytext.pack()
        mytext.configure(text=text)
        mytext.bind("<Button-1>", lambda e, _url=url: callback(_url))


    
root = Tk()

button = Button(root, text = "Hello!", command = write_hello )
button.pack()
mytext=Label(root,bg="pink",width=30,height=20)

root.mainloop()

尝试以下方法

from tkinter import *
import webbrowser

def callback(event, url):
    print(url)
    webbrowser.open_new(url)
    
def write_hello():
        
    tuples = (('bing ', 'https://bing.com'), ('youtube ', 'https://youtube.com'), ('google ', 'google.com'))

    for label_text, url in tuples:
        new_label = Label(root)
        new_label['text'] = label_text
        new_label.bind("<Button-1>", lambda e,x=url: callback(e,x))
        new_label.pack()
    
root = Tk()

button = Button(root, text = "Hello!", command = write_hello )
button.pack()
mytext=Label(root,bg="pink",width=30,height=20)

root.mainloop()

根据您的代码示例,在您按下“Hello!”之后按钮,将创建包含 URL 名称的新标签,单击后将带您到正确的网页。 这里的困难是由使用标签而不是按钮引起的。单击标签的绑定方法会向调用的函数发送一个“事件”参数,在创建 lambda 函数时需要考虑该参数。

关于您的相关问题,无限循环和 tkinter GUI 不能很好地协同工作,因为无限循环会阻止 GUI 对用户事件做出反应。如果您需要在无限循环中做某事,请考虑查看线程(超出此特定问题的范围)