Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按钮矩阵/多按钮+;每一项的功能_Python_Python 3.x - Fatal编程技术网

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