【问题标题】:How to acces variables, from a functions that are inside a class, from the kivy file?如何从 kivy 文件中从类内部的函数访问变量?
【发布时间】:2022-01-09 09:36:45
【问题描述】:

我知道我们可以访问应用程序主类中声明的变量。这可以使用“app.NameOfTheVariable”来完成,例如,访问一个字符串值:

#Python file
from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout

class MainScreen(MDBoxLayout):
    pass

class MainApp(MDApp):
    App_Name = "Galasken Proyect 001"

MainApp.run()



#Kivy file
MainScreen:
<MainScreen>:
    MDLabel:
       text: app.App_name
  

但是,我想知道我们如何访问类内部函数内部的变量。例如,在接下来的代码中,如何访问“Object_name”

#Python file
from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout

class MainScreen(MDBoxLayout):
    pass

class MainApp(MDApp):
    App_Name = "App Example"

    def a_function(self):
        Object_name = "this is a name"

MainApp.run()

我在 kivy 文件上尝试了不同的方法,但没有任何效果。这些是我尝试过的事情:

#Kivy file
MainScreen:
<MainScreen>:
    MDLabel:
       text: app.a_function().App_name
     # text: app.a_function.App_name
     # text: app.App_name   

如何访问该变量?

【问题讨论】:

    标签: python function class kivy kivymd


    【解决方案1】:

    您无法访问函数a_function 中的变量Object_name,因为它在函数范围内是“本地的”。

    你可以做的一件事是:

    def a_function(self):
        self.Object_name = "this is a name"
    

    这会将Object_name 置于MainApp 的范围内,并且可以通过app.Object_name 访问

    注意:这可能是副作用。 MainApp 中的 Object_name 成员变量在您调用 a_function() 之前不存在。如果您在调用该函数之前尝试访问app.Object_name,您将收到关于属性不存在的错误。

    您可以通过在 __init__ 构造函数方法中添加 self.Object_name 来阻止这种副作用。或者,您可以让a_function() 直接返回该字符串。

    def a_function(self):
        Object_name = "this is a name"
        return Object_name
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2021-09-08
      • 2018-03-04
      • 2011-06-15
      • 2019-05-31
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多