特金特。创建具有“不同”命令功能的多个按钮
Posted
技术标签:
【中文标题】特金特。创建具有“不同”命令功能的多个按钮【英文标题】:Tkinter. Create multiple buttons with "different" command function 【发布时间】:2015-01-27 16:21:12 【问题描述】:首先,抱歉标题,我找不到更好的。
以下代码是我在 Python 程序中遇到的问题的最小化版本(顺便说一句,我是新手。)。
def onClick(i):
print "This is Button: " + str(i)
return
def start():
b = [0 for x in range(5)]
win = Tkinter.Tk()
for i in range(5):
b[i] = Tkinter.Button(win,height=10,width=100,command=lambda : onClick(i))
b[i].pack()
return
它的作用: 无论我点击什么按钮,它都会显示“这是按钮:4”。
我想要的: 第一个按钮应该说“这是按钮:0”等等。
这是 Python 想要的行为吗?如果答案是肯定的,为什么会这样?我该如何解决?
另一方面,这很好用:
def start():
x = [0 for x in range(5)]
for i in range(5):
x[i] = lambda:onClick(i)
x[i]()
return
【问题讨论】:
【参考方案1】:使用默认参数来避免后期绑定问题(否则 i
在调用 lambda 函数时绑定,而不是在创建时绑定):
def start():
buttons = []
win = Tkinter.Tk()
for i in range(5):
b = Tkinter.Button(win, height=10, width=100, command=lambda i=i: onClick(i))
b.pack()
buttons.append(b)
【讨论】:
我如何在onClick()
中使用i
例如更改buttons[i]
颜色?
找到了。 buttons[i]
是对象的引用,因此,您只能使用 buttons[i].config(fg = "red")
来执行此操作。很好的答案。谢谢。以上是关于特金特。创建具有“不同”命令功能的多个按钮的主要内容,如果未能解决你的问题,请参考以下文章