lambda
ваш друг.
При работе с циклами у вас есть 2 основных варианта. Оба варианта используют лямбду, чтобы сохранить значения для кнопки в al oop следующим образом.
Один из них - уничтожить саму кнопку:
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
for i in range(10):
for k in range(10):
btn = tk.Button(self, text=' ')
btn.config(command=lambda b=btn: b.destroy())
btn.grid(row=i, column=k)
if __name__ == '__main__':
App().mainloop()
Или использовать счетчик и список , Я предпочитаю этот метод списка, так как мы можем многое сделать со списком, подобным этому, если нам нужно.
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.btn_list = []
counter = 0
for i in range(10):
for k in range(10):
self.btn_list.append(tk.Button(self, text=' '))
self.btn_list[-1].config(command=lambda c=counter: self.destroy_btn(c))
self.btn_list[-1].grid(row=i, column=k)
counter += 1
def destroy_btn(self, ndex):
self.btn_list[ndex].destroy()
if __name__ == '__main__':
App().mainloop()