在该类的__init __()方法中使用类的方法

时间:2017-03-27 23:16:50

标签: python button kivy tic-tac-toe

所以我试图建立一个小型的tic tac toe游戏,我用kivy来实现它。我遇到的问题是我已经制作了一个9个按钮(3x3)的网格,现在我正在绑定它们(或尝试)。

我在我的类BoardGrid的__init__方法中完成所有这些操作,因为只有在程序第一次运行时才会发生这种情况。

class BoardGrid(GridLayout):
    def __init__(self, **kwargs):
        super(BoardGrid, self).__init__(**kwargs)
        self.board = []
        self.buttons = []
        for i in range(9):
            self.board.append('')
            self.buttons.append(Button(text=self.board[i]))
            self.buttons[i].bind(on_press=BoardGrid.callback(????, i))
            self.add_widget(self.buttons[i])

    def callback(self, btn):
        print(btn)

问题是on_press需要一个它将指向的函数,如果我让BoardGrid.callback不带参数,这可以正常工作,但是因为我希望它知道我想要发送哪个按钮。这导致了一个问题,我需要将BoardGrid传递给我在类中创建的回调函数吗?

也许我在这里从错误的角度攻击这个,我想我可以将我的按钮绑定到回调函数中的特定输入,但这可能是不可能的。

非常感谢有关如何使绑定工作的任何建议

编辑:似乎现在正在工作,对不起,我无法回复所有人,这是我的第一篇文章,我似乎很难理解它,但是嘿嘿。非常感谢你的回复!

1 个答案:

答案 0 :(得分:1)

from functools import partial

class BoardGrid(GridLayout):
    def __init__(self, **kwargs):
        ...
            self.buttons[i].bind(on_press=partial(self.callback, i))
            ...

    def callback(self, btn):
        print(btn)