首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中使用变量的值,而不使用指向变量的指针

在python中使用变量的值,而不使用指向变量的指针
EN

Stack Overflow用户
提问于 2018-06-25 00:19:23
回答 1查看 43关注 0票数 0

我有一个tkinter按钮的列表,创建一个对话框窗口,并允许用户输入文本,这将是按钮的新文本。然而,我似乎想不出如何让每个按钮自动更新。我有的代码如下

代码语言:javascript
复制
myButtons = []
timeSlots = []

while startH < endH:
    timeSlots.append(str(startH) + ":00")
    timeSlots.append(str(startH) + ":15")
    timeSlots.append(str(startH) + ":30")
    timeSlots.append(str(startH) + ":45")
    startH += 1

for x in range(len(timeSlots)):
    Label(frame, text=timeSlots[x]).grid(row=x, column=0)
    z = Button(frame, text="Nothing Scheduled", command=lambda: dialogMain(myButtons[x]))
    z.grid(row=x, column=1)
    myButtons.append(z)

对dialogMain的调用将打开一个窗口,供用户输入文本,而参数就是要更新的按钮。当然,问题是,虽然所有的按钮都出现在正确的位置,但当我单击任何按钮时,它只会更新最后一个按钮,即x的当前值。在command=lambda: dialogMain(myButtons[x])行中,是否可以只存储x的值,而不是指向x的指针,我认为这是问题所在。我曾尝试添加一个辅助函数,该函数只接受x,将其赋给一个新变量,并在dialogMain的命令调用中将其作为索引返回,但该函数似乎直到单击按钮时才被调用,这给我留下了同样的问题。如果有一种方法可以引用按钮本身,那么它也可以工作,我已经尝试了类似下面的代码,但它仍然只更新最后一个按钮。

代码语言:javascript
复制
z = Button(frame, text="Nothing Scheduled")
z["command"] = lambda: dialogMain(z)
z.grid(row=x, column=1)
myButtons.append(z)

该窗口运行良好,看起来像this,但只会更新底部的按钮

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-25 00:49:48

你的问题是关于binding lambda in a loop的。

一个很好的解决方案是创建一个返回绑定函数的lambda:

代码语言:javascript
复制
on_click = lambda button: lambda : DialogMain(button)
for x in range(len(timeSlots)):
    ... command = onclick(myButtons[x])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51011756

复制
相关文章

相似问题

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