我正在尝试做一些简单的程序来打开url,如果条件合适的话。
这是一个最小的可重现的例子。
from tkinter import *
import requests
from bs4 import BeautifulSoup
import webbrowser
import time
def call_back(event):
input_id.delete(0,END)
return None
def open_browse(url):
webbrowser.open_new(url)
win = Tk()
win.geometry("150x150")
win.title("Example")
search_btn = Button(win)
search_btn.config(text="search")
search_btn.config(width=5,height=1)
search_btn.grid(column = 2, row = 2)
def search_chr():
chr_list = ["test1","test2"]
result = [(0,"test_r_1"),(0,"test_r_2")]
var_dict = {}
num = -1
for ch in chr_list:
num += 1
var_dict["output%s" %num] = Entry(win, width = 10)
if result[0] == 0:
pass
else:
link_url = result[num][1]
print(link_url)
var_dict["o-button%s" %num] = Button(win, command=lambda aurl=link_url:open_browse(link_url))
var_dict["output"+str(num)].insert(0, "Text")
var_dict["output"+str(num)].grid(column = 0, row = 0+num, columnspan = 4, sticky=W, padx=5, pady=5)
var_dict["o-button"+str(num)].config(text="URL")
var_dict["o-button"+str(num)].grid(column = 4, row = 0+num, sticky=E, padx=5, pady=5)
var_dict["output"+str(num)].config(state="disabled")
search_btn.config(command = search_chr)
win.mainloop()因此,如果您运行代码,将会有一个按钮。如果你点击它,会出现两组标签,一个是“文本”,另一个是"URL“按钮。当您按下url按钮时,它应该会打开一个带有给定URL的浏览。
正如您在终端中看到的打印文本一样,url应该是"test_r_1“和"test_r_2”,但是,如果您按下每个按钮,所有按钮都指向"test_r_2“。它似乎也以某种方式覆盖了以前的"test_r_1“。
如果有人可以解释如何使每个按钮链接到每个网址,那将是完美的。谢谢你的光临,希望你能帮我解决这个问题。
发布于 2021-08-09 05:18:07
好吧,我发现我并不完全理解lambda是如何工作的。
所以我改变了我的搜索关键词,找到了这个漂亮的问题和答案。
Tkinter assign button command in loop with lambda
我变了
var_dict["o-button%s" %num] = Button(win, command=lambda aurl=link_url:open_browse(link_url))转到
var_dict["o-button%s" %num] = Button(win, command=lambda link_url=link_url:open_browse(link_url))而且它起作用了。
谢谢大家!
https://stackoverflow.com/questions/68706862
复制相似问题