Kivy:访问不同类的方法

时间:2014-05-20 22:00:43

标签: python binding popup parent kivy

让我们假装我正在构建一个井字游戏(因为它与结构非常相似) 我希望结果显示在一个弹出窗口中,带有一个新的游戏按钮,我希望这个弹出窗口让我访问设置(使用另一个按钮)并更改它们,始终保持在弹出窗口中,然后离开并最终关闭它并开始一款新游戏。

我希望我能保持秩序,因此有一个单独的弹出类,我可以在其中构建自定义弹出窗口。

我有newgame方法和reset方法作为我的游戏网格类的方法,很明显。 另一方面,更改设置的方法是自定义设置类

在设计弹出类时,如何将它的按钮(例如新游戏)绑定到完全不同的类中包含的方法?我已经查看了一些kv示例,他们通常使用root.blabla.method来访问位于同一树的不同位置的方法(在.kv文件中),但这里我尝试访问的方法是走出树!

我会尝试使用一些示例代码来使其更清晰

class Settings():

    def changeSettings(self):
        ....

class GmeGrid(GridLayout):

    def newGame(self):
        ....

    def reset(self):
        ...

class customPopup(Popup):

    pass

然后,在.kv文件上,我希望我可以将一些弹出窗口的按钮绑定到newGame并更改设置方法

这里的问题是我应该将popop类上的按钮绑定到完全不同的类的方法,我不知道如何(特别是在.kv文件上)

1 个答案:

答案 0 :(得分:1)

只要窗口小部件已完全实例化并添加到窗口小部件树,您就可以使用self.parent访问窗口小部件的父窗口。您可能会考虑传递引用:

Builder.load_string('''
<CustomPopup>:
    BoxLayout:
        orientation: 'vertical'
        # some settings stuff here
        BoxLayout:
            orientation: 'horizontal'
            Button:
                text: 'New Game'
                on_press: root.do_new_game()
''')

class CustomPopup(Popup):
    settings_widget = ObjectProperty()
    new_game = ObjectProperty()

    def do_new_game(self):
        self.settings_widget.some_property = some_value
        self.dismiss()
        self.new_game()

p = CustomPopup(settings_widget=my_widget, new_game=mygame.newGame)
p.open()

假设父级具有设置,这样做会更好,因为如果您更改了设置的位置,则只需更改一个参考。