gpt4 book ai didi

python - Kivy:访问不同类上的方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:57 24 4
gpt4 key购买 nike

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

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

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

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

我会尝试添加一些示例代码以使其更加清晰

class Settings():

def changeSettings(self):
....

class GmeGrid(GridLayout):

def newGame(self):
....

def reset(self):
...

class customPopup(Popup):

pass

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

这里的问题是我应该将 popop 类上的按钮绑定(bind)到完全不同的类的方法,但我不知道如何做到这一点(尤其是在 .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()

这比假设父级具有设置更好,因为如果您更改保存设置的位置,则只需更改一个引用。

关于python - Kivy:访问不同类上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23770703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com