簡體   English   中英

從ScreenManager訪問奇異語言的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM