watch(_ => props.initData, _ => initEditor(props))
如果未将按钮分配给变量,如何将其删除?
答案 0 :(得分:0)
lambda
是你的朋友。
处理循环时,您有2个主要选择。这两个选项都使用lambda来在这样的循环中保持每个按钮的值。
一种是让按钮自行销毁:
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()
答案 1 :(得分:0)
问题:如果未将按钮分配给变量,如何将其删除?
核心点:
.bind('<Button-1>', self.on_click)
使用事件回调,为您提供Grid
坐标,以用其他小部件(例如将Button
替换为图像)替换移除的Label
。
import tkinter as tk
class Button(tk.Button):
def __init__(self, parent, **kwargs):
super().__init__(parent, **kwargs)
self.bind('<Button-1>', self.on_click)
def on_click(self, event):
w = event.widget
row, column = w.grid_info().get('row'), w.grid_info().get('column')
print('coord:{}'.format((row, column)))
w.destroy()
class App(tk.Tk):
def __init__(self):
super().__init__()
for row in range(0, 9):
for column in range(0, 9):
Button(self, text=" ").grid(row=row, column=column)
if __name__ == '__main__':
App().mainloop()