Python 按钮矩阵/多按钮+;每一项的功能
注:Python 按钮矩阵/多按钮+;每一项的功能,python,python-3.x,Python,Python 3.x,注: 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,10]。) 数字是随机生成的数字数组(例如:[15、21、27、33、39、45、51、57、63、69、75、81、87、93、99、105、111、117、123、129、135]) 我有一个按钮矩阵,我需要一个函数
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,10]。
)数字
是随机生成的数字数组(例如:[15、21、27、33、39、45、51、57、63、69、75、81、87、93、99、105、111、117、123、129、135]
)我有一个按钮矩阵,我需要一个函数(例如,
函数选择(self)
)来打印单击按钮的文本。现在,它只打印上次单击按钮的文本。您声明的每个新按钮都会覆盖相同的self.bttn
实例,这最终导致您只能访问最后定义的按钮。因此,按钮可以正常创建,但是您只能访问最后一个按钮。因此,它的名称将是您通过self.bttn
访问的名称,因此每次调用select时都会显示它的名称。一个解决方案可能是创建一个嵌套列表来包含您的按钮,然后找到某种方法来检索您想要的按钮
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"])
根据您能够传递
select
函数的信息,其他结构可能会更好。您可以创建121个不同的按钮,然后用新创建的按钮重复替换self.bttn
。这些按钮必须定义某种类型的回调接口,以便您知道何时单击了一个,以及它是哪一个。我假设它可能是select方法,在这种情况下,您应该将Button子类化并重写该方法。
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"])