gpt4 book ai didi

python - 无法将信息传递给回调函数

转载 作者:行者123 更新时间:2023-12-01 05:55:20 24 4
gpt4 key购买 nike

我正在使用 Tkinter、python 2.7,并且是 GUI 编程的新手。我想将字符串传递给按钮中的回调函数。我尝试了 functools 和 lambda 函数的部分功能。到目前为止还没有运气。所以我一定做错了什么。

    def fetch_urls(name):
print name

root=Tk()
aname=StringVar()
E1 = Entry(root, bd =5,textvariable=aname,justify=CENTER,width=20)
E1.grid(row=0,column=1,columnspan=3)

fetchbutton=Button(root,text ="FETCH",command =fetch_urls)
fetchbutton.grid(row=7,column=0)

我基本上想要的是将 aname 中的字符串(即条目小部件 E1 中的文本)发送到函数 fetch_urls。我尝试了以下方法但没有成功

1) 使用 lambda

    anime=aname.get()
lambdafetch=lambda: fetch_urls(anime)
fetchbutton=Button(root,text ="FETCH",command =lambdafetch)

2)使用 functools 的部分内容

    anime=aname.get()
parfetch=partial(fetch_urls,anime)
fetchbutton=Button(root,text ="FETCH",command =parfetch)

在这两种情况下,字符串都不会传递给函数。我想知道我做错了什么以及如何让它发挥作用。

    def fetch():
fetch_urls(aname.get())
fetchbutton=Button(root,text ="FETCH",command =fetch)

这有效(在发布问题 15 分钟后得到这个想法)。但这肯定不是唯一的方法?

最佳答案

问题是,使用 lambdapartial 时,您会在创建回调时评估 aname,而不是在实际调用的时间。

对于 partial,您需要修改 fetch_urls 函数以实际评估该值:

def fetch_urls(aStringVar):
print aStringVar.get()

parfetch = partial(fetch_urls, aname)

对于lambda,只需让它评估对象:

lambdafetch = lambda: fetch_urls(aname.get())

但我倾向于不使用 lambda 进行回调,因为您可能会遇到范围问题。您可能需要使用技巧来“捕获”aname 对象:

lambdafetch = lambda s=aname: fetch_urls(s.get())

关于python - 无法将信息传递给回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12830177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com