如何将不同的 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 对用户事件做出反应。如果您需要在无限循环中做某事,请考虑查看线程(超出此特定问题的范围)
我正在使用函数生成我的标签,每个标签必须打开不同的 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 对用户事件做出反应。如果您需要在无限循环中做某事,请考虑查看线程(超出此特定问题的范围)