【问题标题】:Referencing a Function From Another Class in Kivy引用 Kivy 中另一个类的函数
【发布时间】:2016-04-01 09:32:43
【问题描述】:

这是我的代码及其作用:

Label:
    id: easyscore
    text: "0"
    font_size: 44
    bold: True
    color: [1, 1, 1, 1]

这个标签在一个叫做easy的屏幕类上,它计算分数。

Button:
    text: "Restart"
    font_size: 32
    bold: True
    color: [1, 1, 1, 1]
    background_normal: ""
    background_color: [0.31, 0.4, 0.63, 1]
    on_release: root.rst_gmvr()

此按钮位于名为 gameovereasy 的屏幕类上,当它被释放时,它应该将屏幕变回简单并将分数计数器重置为零。

前两段代码写在.kv文件中,后面两段写在.py文件中

它调用的函数叫做rst_gmvr,它在gameovereasy屏幕类中,它看起来像:

def rst_gmvr(self):
    easy().rec_rst()

这个函数然后调用一个名为 rec_rst 的函数,它位于简易屏幕类中,它看起来像:

def rec_rst(self):
    self.ids.easyscore.text = "0"
    sm.current = "easy"

因此,此函数应将名为easyscore 的分数计数器标签重置为0,并将屏幕更改为easy。但是,它只改变屏幕而不改变计分器标签。

有人可以帮我了解如何在释放按钮时同时更改屏幕和计分器标签。

谢谢:)

顺便说一句,当按钮被释放时,不会给出错误消息。如果您需要更多信息和/或代码来回答这个问题,我很乐意将其提供给您。

【问题讨论】:

    标签: android python function python-3.x kivy


    【解决方案1】:

    正如你所说,你在两个不同的类中有两个函数,因此你需要让这些类互相看到。基本上你要么需要在另一个函数很小的时候访问另一个函数,要么在你的情况下你需要另一个类来维护你的所有类。

    第二个选项已经存在,您只需要输入一些内容,因为类是 App(),您可以在每个应用程序中使用它。将类easygameovereasy 分配给App() 并通过应用程序通过get_running_app() 使用调用,如下所示:

    class My(...):
        def __init__(self, **kwargs):
            self.app = App.get_running_app()
            self.my = self.app.my
    
    class MyAppClass(App):
        my = My()
        def build(self):
            ...
    

    或者直接self.my = App.get_running_app().my,然后用my.function()调用函数。您需要将它添加到您想与之交流的每个班级。

    【讨论】:

    • 非常感谢@KeyWeeUsr 的回答,我需要制作您创建的My 课程吗?我不太了解那部分。
    • @BenHaysome 不,不.. My 类基本上是您将在 App 类中引用的类,您可以使用它来启动应用程序代码,然后您就可以像访问它一样App 类中的一个临时变量,因为get_running_app() 将在您使用它的任何地方(几乎)为您提供App 类本身。
    猜你喜欢
    • 2022-01-08
    • 2020-04-16
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多