我正在使用屏幕管理器来管理多个不同的屏幕。其中一个屏幕有两个按钮,它们都导航到另一个屏幕,但是根据按下的按钮不同,我希望标签在第二个屏幕上显示不同的文本。这是我的代码:
.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
.kv
ScreenManagement:
transition: FadeTransition()
HomeScreen:
ChooseProgScreen:
SwitchScreen:
NewProgScreen:
<ChooseProgScreen>:
name: "chooseprog"
FloatLayout:
Button:
text: "test1"
on_release:
root.setTitle("test1")
app.root.current = "switch"
color: 1,1,1,1
font_size: 25
size_hint: 0.15,0.15
pos_hint: {"center_x":.1, "center_y":.9}
Button:
text: "test2"
on_release:
root.setTitle("test2")
app.root.current = "switch"
color: 1,1,1,1
font_size: 25
size_hint: 0.15,0.15
pos_hint: {"center_x":.3, "center_y":.9}
<SwitchScreen>:
name: "switch"
FloatLayout:
Label:
text: root.getTitle()
pos_hint: {"center_x":.1, "center_y":.1}
font_size: 25
在.kv文件中的ChooseProgScreen中,当按钮释放时,我调用.py文件中的一个方法来设置全局变量为新屏幕并打印它。当你按下其中一个按钮时,打印部分正常工作,并且全局变量以新字符串打印出来,但SwitchScreen标签仍然显示原来的内容。
"test"
而不是
"test1" or "test2"
我认为全局变量可能是做这件事情的一种可怕方式,但我不知道如何使用Screen管理器和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