首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tkinter -如何在我的循环中创建单独的超链接按钮?

问tkinter -如何在我的循环中创建单独的超链接按钮?
EN

Stack Overflow用户
提问于 2021-08-09 04:27:28
回答 1查看 31关注 0票数 0

我正在尝试做一些简单的程序来打开url,如果条件合适的话。

这是一个最小的可重现的例子。

代码语言:javascript
复制
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“。

如果有人可以解释如何使每个按钮链接到每个网址,那将是完美的。谢谢你的光临,希望你能帮我解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-09 05:18:07

好吧,我发现我并不完全理解lambda是如何工作的。

所以我改变了我的搜索关键词,找到了这个漂亮的问题和答案。

Tkinter assign button command in loop with lambda

我变了

代码语言:javascript
复制
var_dict["o-button%s" %num] = Button(win, command=lambda aurl=link_url:open_browse(link_url))

转到

代码语言:javascript
复制
var_dict["o-button%s" %num] = Button(win, command=lambda link_url=link_url:open_browse(link_url))

而且它起作用了。

谢谢大家!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68706862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档