[英]accessing data in the kivy language from ScreenManager
如何從MyScreenManager訪問kivy數據? 如何訪問Hellow或Timer數據? 我不能在Hellow中使用on_release:root.starttimer()。
class Hellow(Screen):
pass
class Timer(Screen):
pass
class MyScreenManager(ScreenManager):
def starttimer(self):
#change text Hellow Button
root_widget = Builder.load_string('''
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
MyScreenManager:
transition: FadeTransition()
Hellow:
Timer:
<Hellow>:
AnchorLayout:
Button:
id: but
size_hint: None, None
size:300,100
text: 'make a foto'
font_size: 30
on_release: app.root.starttimer()
<Timer>:
name: 'Timer'
''')
class ScreenManagerApp(App):
def build(self):
print(self.ids)
return root_widget
if __name__ == '__main__':
ScreenManagerApp().run()
一些用於stackoverflow的文本(它說我需要輸入更多文本),
屏幕管理器僅在嘗試添加按鈕或標簽之類的其他內容時才用於接受屏幕小部件,否則它將引發異常。 kivy.uix.screenmanager.ScreenManagerException: ScreenManager accepts only Screen widget.
.kv文件只允許一個根對象。在這種情況下,您可以互相訪問hello或Timer。
<Hellow>:
name: 'hello'
...
Button:
id: but
...
on_release: root.parent.current = 'Timer'
<Timer>:
name: 'Timer'
Button:
text: "Take me back to hellow"
on_release: root.parent.current = 'hello'
但也可能有另一種方式。
<Main>:
BoxLayout:
Button:
text: "Hello"
on_release: sm.current = 'Timer'
on_release: print(lbl.text)
Button:
text: "Timer"
on_release: sm.current = 'Hello'
ScreenManager:
id: sm
Screen:
name: hello
Label:
id: lbl
text: "I am hello"
Screen:
name: timer
Label:
text: "I am timer"
編輯1:
如您在評論中所問
class MyScreenManager(ScreenManager):
def __init__(self,**kwargs):
super(MyScreenManager,self).__init__(**kwargs)
def starttimer(self,event):
#print event.text
event.text = "changed text"
<Hellow>:
...
Button:
...
on_release: root.parent.starttimer(self)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.