如果您只想销毁Button小部件,那么简单的方法是在创建按钮后添加回调.例如,
import Tkinter as tk
grid_size = 10
root = tk.Tk()
blank = " " * 3
for y in range(grid_size):
for x in range(grid_size):
b = tk.Button(root, text=blank)
b.config(command=b.destroy)
b.grid(column=x, row=y)
root.mainloop()
但是,如果您需要在回调中进行额外处理,例如更新按钮网格,则可以方便地将Button的网格索引存储为Button对象的属性.
from __future__ import print_function
import Tkinter as tk
class ButtonDemo(object):
def __init__(self, grid_size):
self.grid_size = grid_size
self.root = tk.Tk()
self.grid = self.button_grid()
self.root.mainloop()
def button_grid(self):
grid = []
blank = " " * 3
for y in range(self.grid_size):
row = []
for x in range(self.grid_size):
b = tk.Button(self.root, text=blank)
b.config(command=lambda widget=b: self.delete_button(widget))
b.grid(column=x, row=y)
#Store row and column indices as a Button attribute
b.position = (y, x)
row.append(b)
grid.append(row)
return grid
def delete_button(self, widget):
y, x = widget.position
print("Destroying", (y, x))
widget.destroy()
#Mark this button as invalid
self.grid[y][x] = None
ButtonDemo(grid_size=10)
这两个脚本都与Python 3兼容,只需将导入行更改为
import tkinter as tk