def create_widget(self):
for x in range(11):
for y in range(11):
self.bttn = Button(self)
self.bttn.grid(row=x, column=y)
for c in range(len(path)):
if [x,y] == path[c]:
self.bttn["text"] = numbers[c]
break
else:
self.bttn["text"] = randint(0, 200)
def select(self):
print(self.bttn["text"])
注意:
path
是坐标列表(例如:[[0, 0], [0, 1], [1, 1],
[2, 1], [3, 1], [3, 2], [4, 2], [5, 2], [6, 2], [6, 3], [7, 3], [8,3], [8, 4], [9, 4], [9, 5], [10, 5], [10, 6], [10, 7], [10, 8], [10, 9], [10, 10]]
)
numbers
是随机生成的数字数组(例如:[15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99, 105, 111, 117, 123, 129, 135]
)
我有一个按钮矩阵,我想要一个函数(例如function select(self)
)来打印单击按钮的文本。现在它只打印最后点击按钮的文字。
答案 0 :(得分:0)
您声明的每个新按钮都会覆盖self.bttn
的同一个实例,最终导致您只能访问最后定义的按钮。因此,按钮创建得很好,但是您只能访问最后一个按钮。因此,它的名称将是您通过self.bttn
访问的名称,因此每次调用select时都会显示其名称。
答案 1 :(得分:0)
解决方案可能是创建一个嵌套列表来包含您的按钮,然后找到一些方法来检索您想要的按钮。
def __init__(self, ...):
...
self.buttons = []
...
def create_widget(self):
for x in range(11):
self.buttons.append([])
for y in range(11):
button = Button(self)
self.buttons[-1].append(button)
button.grid(row=x, column=y)
for c in range(len(path)):
if [x,y] == path[c]:
button["text"] = numbers[c]
break
else:
button["text"] = randint(0, 200)
def select(self, row, col):
button = self.buttons[row][col]
print(button["text"])
根据您能够通过select
函数的信息,其他结构可能会更好。