2017-03-01 95 views
1

我是Kivy的新手,所以我有一個問題,我想在Kivy中開發兩個屏幕,第一個是關於輸入用戶細節和密碼(此時不驗證),然後第二個屏幕顯示用戶名(在前一個屏幕輸入),並顯示用戶名和其他小部件。 其基本思想是獲取用戶表單userlogin屏幕的值並將其顯示到另一個屏幕。 這裏是我的代碼,當我在Kivy的另一個屏幕上按下按鈕時,如何更改屏幕中的標籤文本

從kivy.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

回答

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 
+0

你是偉大的,它的工作原理,謝謝你, – Mahdi

+0

@Mahdi你很歡迎 – EL3PHANTEN

相關問題