vap*_*vap 8 python lambda tkinter list python-3.x
香港专业教育学院尝试寻找解决方案,但找不到一个有效.我有一个2d的tkinter按钮列表,我想在鼠标点击时更改它们的文本.我试过这样做:
def create_board(number):
print(number)
for i in range (0,number):
buttonList.append([])
for j in range(0,number):
print(i,j)
buttonList[i].append(Button(root, text = " ", command = lambda: update_binary_text(i,j)))
buttonList[i][j].pack()
Run Code Online (Sandbox Code Playgroud)
然后单击它时调用此函数:
def update_binary_text(first,second):
print(first,second)
buttonList[first][second]["text"] = "1"
Run Code Online (Sandbox Code Playgroud)
当我点击一个按钮时,它什么都不做,我让程序显示被点击的按钮的索引,并且它们全部显示4,4(这是变量编号= 5时)是否有解决方案?
这是我第一次上课的python尝试.
谢谢
Joe*_*ett 10
您可以通过创建一个封闭解决这个问题i,并j与创建每个拉姆达:
command = lambda i=i, j=j: update_binary_text(i, j)
Run Code Online (Sandbox Code Playgroud)
您还可以创建一个回调工厂,其中包含对按钮对象本身的引用:
def callback_factory(button):
return lambda: button["text"] = "1"
Run Code Online (Sandbox Code Playgroud)
然后在您的初始化代码中:
for j in range(0, number):
new_button = Button(root, text=" ")
new_button.configure(command=callback_factory(new_button))
new_button.pack()
buttonList.append(new_button)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15797 次 |
| 最近记录: |