2016-07-26 62 views
0

我有一個程序,使用ScreenManager,在按鈕按下屏幕之間切換,我想要實現的是第二個屏幕的標籤,從文本前一個屏幕的textinput,我的問題似乎是在不同的類中,我對對象編程相當陌生,因此我的問題可能看起來很愚蠢,我認爲問題在於程序不會每次運行時都運行類按鈕,但改爲將當前小部件更改爲其他類的小部件。Kivy:標籤與前一個屏幕的文本,使用ScreenManager

這裏是我的代碼:

import kivy 
kivy.require('1.8.0') 

from kivy.app import App 
from kivy.uix.screenmanager import Screen, ScreenManager 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.properties import ObjectProperty 
from kivy.uix.textinput import TextInput 

class ScreenOne(Screen): 

    def __init__ (self,**kwargs): 
     super (ScreenOne, self).__init__(**kwargs) 

     my_box1 = BoxLayout(orientation='vertical') 
     self.my_label1 = TextInput(text="BlaBlaBla on screen 1", font_size='24dp') 
     my_button1 = Button(text="Go to screen 2",size_hint_y=None, size_y=100) 
     my_button1.bind(on_press=self.changer) 
     my_box1.add_widget(self.my_label1) 
     my_box1.add_widget(my_button1) 
     self.add_widget(my_box1) 

    def changer(self,*args): 
     self.manager.current = 'screen2' 

class ScreenTwo(Screen): 

    def __init__(self,**kwargs): 
     super (ScreenTwo,self).__init__(**kwargs) 

     my_box1 = BoxLayout(orientation='vertical') 
     my_label1 = Label(text="BlaBlaBla on screen 2",font_size='24dp') 
     my_button1 = Button(text="Go to screen 1",size_hint_y=None, size_y=100) 
     my_button1.bind(on_press=self.changer) 
     my_box1.add_widget(my_label1) 
     my_box1.add_widget(my_button1) 
     self.add_widget(my_box1) 

    def changer(self,*args): 
     self.manager.current = 'screen1' 

class TestApp(App): 

     def build(self): 
      my_screenmanager = ScreenManager() 
      screen1 = ScreenOne(name='screen1') 
      screen2 = ScreenTwo(name='screen2') 
      my_screenmanager.add_widget(screen1) 
      my_screenmanager.add_widget(screen2) 
      return my_screenmanager 

if __name__ == '__main__': 
    TestApp().run() 

任何幫助apreciated

感謝

回答

1

您可以使用經理get_screen()方法,並設置其屬性,就像這樣:

from kivy.app import App 
from kivy.uix.screenmanager import Screen,ScreenManager 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.textinput import TextInput 
from kivy.uix.button import Button 
from kivy.uix.label import Label 



class ScreenOne(Screen): 

    def __init__(self,**kwargs): 
     super(ScreenOne,self).__init__(**kwargs) 
     self.my_box1 = BoxLayout(orientation='vertical') 
     self.my_label1 = TextInput(text="BlaBlaBla on scr 1", font_size='24dp') 
     self.my_button1 = Button(text="Go to screen 2",size_hint_y=None, size_y=100) 
     self.my_button1.bind(on_press=self.changer) 
     self.my_box1.add_widget(self.my_label1) 
     self.my_box1.add_widget(self.my_button1) 
     self.add_widget(self.my_box1) 

    def changer(self,*args): 
     self.manager.get_screen("screen2").my_label1.text = self.my_label1.text # here you set screen2's my_label1 to your input 
     self.manager.current = 'screen2' 




class ScreenTwo(Screen): 
    def __init__(self,**kwargs): 
     super (ScreenTwo,self).__init__(**kwargs) 

     self.my_box1 = BoxLayout(orientation='vertical') 
     self.my_label1 = Label(text="BlaBlaBla on screen 2",font_size='24dp') 
     self.my_button1 = Button(text="Go to screen 1",size_hint_y=None, size_y=100) 
     self.my_button1.bind(on_press=self.changer) 
     self.my_box1.add_widget(self.my_label1) 
     self.my_box1.add_widget(self.my_button1) 
     self.add_widget(self.my_box1) 

    def changer(self,*args): 
     self.manager.current = 'screen1' 



class MyApp(App): 
    def __init__(self,**kwargs): 
     super(MyApp,self).__init__(**kwargs) 
     self.sm = ScreenManager() 

     self.sm.test = StringProperty("test") 

     self.sm.add_widget(ScreenOne(name = "screen1")) 
     self.sm.add_widget(ScreenTwo(name = "screen2")) 


    def build(self): 
     return self.sm 



if __name__ == "__main__": 
    MyApp().run() 
+0

最後,謝謝帕爾!這就像一個魅力!!!! –

+0

@ Cid-El沒問題 – EL3PHANTEN