按钮矩阵/多个按钮+每个功能

时间:2017-05-08 20:37:06

标签: python python-3.x

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"])

注意:

  1. 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]]

  2. numbers是随机生成的数字数组(例如:[15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99, 105, 111, 117, 123, 129, 135]

  3. 我有一个按钮矩阵,我想要一个函数(例如function select(self))来打印单击按钮的文本。现在它只打印最后点击按钮的文字。

2 个答案:

答案 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函数的信息,其他结构可能会更好。