我使用屏幕管理器来管理几个不同的屏幕。一个屏幕有两个按钮,两个按钮都指向另一个屏幕,但根据按下的按钮的不同,我希望在第二个屏幕上显示不同的文本。这是我的代码:
.py
MY_GLOBAL = "test"
class ChooseProgScreen(Screen):
global MY_GLOBAL
def setTitle(self, newTitle):
MY_GLOBAL = newTitle
print(MY_GLOBAL)
class SwitchScreen(Screen):
global MY_GLOBAL
def getTitle(self):
return MY_GLOBAL
class ScreenManagement(ScreenManager):
pass
class MainApp(App):
def build(self):
presentation = Builder.load_file("kivy.kv")
return presentation
千伏
^{pr2}$在.kv中的ChooseProgScreen中,当释放按钮时,我从.py文件调用一个方法,该方法将全局变量设置为新屏幕并打印它。当您按下其中一个按钮时,打印部分工作正常,全局变量作为新字符串打印,但SwitchScreen标签仍然显示
"test"
而不是
"test1" or "test2"
我认为全局变量可能是一种很糟糕的方法,但是我不知道如何使用屏幕管理器和kivy语言来实现这一点。如果有人能帮助正确地使用全局变量,或者提出更好的方法来实现这一点,我们将不胜感激。在
编辑
问题是屏幕只在第一次加载时更新。我为SwitchScreen添加了一个更新方法:
def update(self):
self.ids.switchtitle.text = self.getTitle()
更新了.kv文件中的SwitchScreen:
<SwitchScreen>:
on_enter:
root.update()
Label:
id: switchtitle
text: root.getTitle()
pos_hint: {"center_x":.1, "center_y":.1}
font_size: 25
解决方案
示例
在主.py在
在千伏在
^{pr2}$输出
这应该能解决你的问题。
MY_GLOBAL
在技术上可以通过self.MY_GLOBAL
获得,相反,您将其分配给方法下的一个新变量,但没有将其分配给全局变量对象。在相关问题 更多 >
编程相关推荐