2015-06-14 35 views
0

如何從MyScreenManager訪問kivy數據?我如何訪問Hellow或Timer數據?我不能在Hellow中使用on_release:root.starttimer()。從屏幕管理器訪問kivy語言的數據

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() 

一些文字計算器(它說,我需要輸入更多的文字),

+0

問你需要添加你想知道更多的細節。 – kiok46

+0

好吧,我怎麼能改變Hellow-> Button->來自starttimer()函數的文本? – novox

+0

好的!我將編輯我的答案 – kiok46

回答

2

屏幕經理只用於接受屏幕小部件,如果你試圖增加任何像按鈕或標籤,然後它會拋出異常。 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) 
+0

非常感謝你,它解決了這個問題,但我沒有解釋我的自我,我需要在按鈕點擊後在功能上做一些工作,然後更改一些對象數據(按鈕或屏幕) – novox

+0

我很樂意幫助:) – kiok46

+0

讓我告訴你一個很棒的技巧。'on_press:print(root)'它會打印''現在如果你輸入'on_press:print(root.parent )'它會打印出<__ main __。MyScreenManager對象在0x7f37b1366ef0>',如果你輸入'on_press:print(self)',它會打印出<'這給出了一個好主意你的地點。 – kiok46