我有一个带有一组变量的类,这些变量可以从main.py脚本进行初始化和访问。我有另一个类,它是从main.py文件深一层的文件夹中导入的。
我可以通过引用appVars.some_variable
访问main.py文件中任何位置的已设置变量。但是,我无法在--screen1.py
类中访问它们。似乎--Variables.py
类正在嵌套类中重新初始化,这导致空值。
如何从main.py
脚本中的--ScreenOne.py
脚本访问已经初始化的类变量?
文件/文件夹结构
main.py
-classes
--ScreenOne.py
--Variables.py
variables.py
from kivy.properties import StringProperty
class Variables():
def __init__(self):
self.server_time = StringProperty('')
main.py
from classes.ScreenOne import ScreenOne
from classes.Variables import Variables
appVars = Variables()
class SomeApp(App):
def update_clock(self, *args):
appVars.server_time = datetime.now()
-ScreenOne.py
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
from classes.Variables import Variables
class ScreenOne(Screen):
def on_enter(self):
print(Variables.server_time)
我还尝试过将appVars = Variables()
添加到--ScreenOne.py
脚本的开头并引用appVars.server_time
,但是,效果不佳。
答案 0 :(得分:0)
在main.py中,您可以通过appVars = Variables()
初始化类Variables。但是在ScreenOne
中,您导入变量却从不启动它,除了启动它之外,它还会提供一个与main中的appVars不同的新实例(print(Variables.server_time)
也会给出错误)。
要在ScreenOne中使用appVars,您需要将appVars传递给此类,例如:
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
class ScreenOne(Screen):
def __init__(self, appVars):
self.appVars = appVars
def on_enter(self):
print(self.appVars.server_time)
然后,当您启动ScreenOne
时,您将执行以下操作:
screen_one = ScreenOne(appVars)
请注意,ScreenOne
中,您无需导入Variables
,因为此类的所有属性都将随appVars
一起提供。
按照PEP8的方式,变量名不应使用大写字母,而应使用下划线appVars
-> app_vars
。