2016-07-26 40 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