如何让 tkinter 中的按钮重复工作?

问题描述 投票:0回答:1

我尝试制作一个网格来模拟兰顿蚂蚁。我想要一个可以在模拟开始之前修改的网格,但我无法制作按钮在单击后再次使用功能。


from tkinter import *
window = Tk()
frame = Frame(window).grid()
files = []
btn=[]
status=[]
def btn_color(status):
    if status==1:
        return("black")
    if status==0:
        return("white")
def click_update(status,btn):
    return(lambda: click_update1(status,btn))
def click_update1(status,btn):
    status=abs(status-1)
    if status==1:
        btn.config(bg="black")
    if status==0:
        btn.config(bg="white")
for i in range(2500):
    files.append("button"+str(1))
for i in range(len(files)):
    status.append(int(0))
    btn.append(Button(frame,text="k", font=("Arial",3),width=2,height=2,repeatdelay=100,repeatinterval=100))
    btn[i].grid(row=int(i//50),column=int(i%50),sticky="we")
for i in range(len(files)):
    btn[i].config(bg=btn_color(status[i]), command=click_update(status[i],btn[i]))
window.mainloop()

tkinter button
1个回答
0
投票

btn[i] 是直接传递的,但是由于 lambda 内部的函数对局部变量进行操作,因此按钮的引用不正确。 所以我改变了这一点,部分函数将当前循环索引绑定到回调函数,确保每个按钮的单击事件链接到正确的按钮及其状态。

© www.soinside.com 2019 - 2024. All rights reserved.