【发布时间】:2015-11-05 05:56:23
【问题描述】:
我有一个带有两个屏幕的小型 kivy 应用程序。我正在尝试从第一个更新第二个标签
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
# Declare both screens
class MainScreen(Screen):
def SetText(self):
text='Total='+str(17*21)
StrategyScreen().SetText(text)
class StrategyScreen(Screen):
labelText = StringProperty()
labelText='My label'
print 'start'
def SetText(self, text):
print 'a', self.labelText
self.labelText=text
print 'b', self.labelText
class TestApp(App):
def build(self):
# Create the screen manager
screenManager = ScreenManager()
screenManager.add_widget(MainScreen(name='main'))
screenManager.add_widget(StrategyScreen(name='strategy'))
return screenManager
if __name__ == '__main__':
TestApp().run()
带有kv文件:
<MainScreen>:
BoxLayout:
orientation: "vertical"
Button:
text: 'Goto strategy'
on_press: root.manager.current = 'strategy'
Button:
text: 'Set text'
on_press: root.SetText()
<StrategyScreen>:
BoxLayout:
orientation: "vertical"
Label:
text: root.labelText
Button:
text: 'Back to menu'
on_press: root.manager.current = 'main'
从“开始”来看,只有一个 StrategyScreen 实例,并且 SetText 被正确调用,但标签仍显示旧文本。
谁能帮忙
【问题讨论】:
-
我想我在这里误解了 OOP。类 StrategyScreen 没有 init 那么它怎么知道'self'是什么?我很困惑
标签: kivy