假设我正在构建一个井字游戏(因为它与结构非常相似),我希望结果在弹出窗口中显示,并带有一个新的游戏按钮,并且希望此弹出窗口允许我访问设置(另一个按钮)并对其进行更改,使其始终位于弹出窗口中,然后离开并最终将其关闭并开始新游戏。
我希望我可以保持秩序,因此有一个单独的弹出窗口类,可以在其中构建自定义弹出窗口。
显而易见,我将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文件上)
只要窗口小部件已完全实例化并添加到窗口小部件树中,您就可以使用它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()
最好假设父级具有设置,因为如果更改设置的保留位置,则只需更改一个引用。