当我在Kivy中按下另一个屏幕中的按钮时,如何在屏幕上更改标签文本

时间:2017-03-01 21:14:24

标签: python-3.x login label kivy

我是Kivy的新手,所以我有一个问题,我想在Kivy开发两个屏幕,第一个是关于输入用户详细信息和密码(此时没有身份验证),然后第二个屏幕显示用户名(在上一个屏幕中输入)并显示用户名和其他小部件。 基本思想是获取用户表单userlogin屏幕的值并将其显示到另一个屏幕。 这是我的代码,

来自kivy.app import App

from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty # @UnresolvedImport


class LoginScreen(Screen):
    text = StringProperty()
    def change_text(self): 
        self.text = ''
        self.manager.current = 'StocksGUIScreen'

class StocksGUIScreen(Screen):
    label_text = StringProperty('')
    #pass


class PortfolioUIApp(App):
    #user_name = StringProperty()
    pass

PortfolioUIApp().run()

这是我的.kv文件:

ScreenManager:
    id: screen_manager
    LoginScreen:
        id: login_screen
        name: 'LoginScreen'
        manager: screen_manager
    StocksGUIScreen:
        id: stocks_gui
        name: 'StocksGUIScreen'
        manager: screen_manager
        label_text: login_screen.text


<LoginScreen>:
    BoxLayout:
        orientation: 'vertical'
        BoxLayout:
            Label:
                text: "User Name"
                size_hint: 0.3,0.2
                #pos: root.x, root.top-self.height
                color: 0,1,0,1

            TextInput:
                id: user_name
                size_hint: 0.3,0.2
                #on_text: root.user_name

        BoxLayout:
            Label:
                text: "Password"
                size_hint: 0.3,0.2
            TextInput:
                id: pass_word
                password: True
                size_hint: 0.3,0.2
        BoxLayout:
            Button:
                text: 'Log In'
                size_hint: 0.3,0.2
                on_press: 
                    #root.manager.current = 'StocksGUIScreen'
                    root.label_text: user_name
                    root.change_text()
            Button:
                text: 'Cancel'
                size_hint: 0.3,0.2
                on_release: app.stop()

<StocksGUIScreen>:
    BoxLayout:
        orientation: 'vertical'
        BoxLayout:
            orientation: 'horizontal'
            TextInput:
                size_hint_x: 50
                id: ticker_search
            Button: 
                text: "Go"
                size_hint_x: 25
                on_press: root.search_stock()
                id: search_box
            Label:
                text: root.label_text
                size_hint_x: 25

        BoxLayout:
            height: "10dp"
            size_hint_y: 5
            Label:
                size_hint_x: .2
                size_hint_y: .1
                text: "Advice"
                color: [1,0,0,1]
                text_size: self.size
                halign: 'left'
                valign: 'top'
            ScrollView:
                size: self.size
                GridLayout:
                    id: layout_content
                    size_hint_y: None
                    cols: 1
                    row_default_height: '20dp'
                    row_force_default: True
                    spacing: 0, 0
                    padding: 0, 0
                    color: [1,0,0,1]
                    Label:
                        text: "Lorem ipsum dolor sit amet"*10
                        id: advice_message
                        text_size: self.size
                        halign: 'left'
                        valign: 'top'
        BoxLayout:
            height: "10dp"
            size_hint_y: 10 
            Label:
                size_hint_x: .2
                size_hint_y: .1
                text: "Graphical Stuff"
                id: graphical_stuff
                text_size: self.size
                halign: 'left'
                valign: 'top'
            AsyncImage:
                source: "abc.png"
                id: graphical_stuff
                allow_stretch: True
                keep_ratio: False
                pos: 200,300
                size: root.width*0.5,root.height*0.2
        BoxLayout:
            orientation: 'horizontal'
            Button:
                text: 'My settings button'
            Button:
                text: 'Back to Log in screen'
                on_press: root.manager.current = 'LoginScreen'                

此代码有什么问题,任何帮助/指导都会受到高度赞赏PLZ

1 个答案:

答案 0 :(得分:0)

如果您想要此设置,可以在第一个屏幕上设置属性。在第二个屏幕中通过ID访问它。

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder
from kivy.properties import StringProperty

class Screen1(Screen):
    username = StringProperty("")

class Screen2(Screen):
    username = StringProperty("")


root = Builder.load_string('''

<Screen1>:
    BoxLayout:
        orientation: "vertical"
        TextInput:
            id: username
        Button:
            text: "Login"
            on_release: root.username = username.text; root.manager.current = "screen2"


<Screen2>:
    name: "screen2"
    Label:
        text: root.username


ScreenManager:
    Screen1:
        id: loginscreen
    Screen2:
        username: loginscreen.username

''')



class MyApp(App):
    def build(self):
        return root