【问题标题】:Kivy: Label with text from previous screen, using ScreenManagerKivy:使用 ScreenManager 为上一个屏幕中的文本添加标签
【发布时间】:2016-07-26 15:54:46
【问题描述】:

我有一个程序,它使用 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()

感谢任何帮助

谢谢

【问题讨论】:

    标签: python-2.7 kivy


    【解决方案1】:

    您可以使用 manager 的 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()
    

    【讨论】:

    • @Cid-El 没问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多