2017-03-01 50 views
1

私はKivyを初めて使用しているので、私はKivyの2つの画面を開発したいという質問があります。 (現在の認証なし)、2番目の画面にはユーザー名(前の画面で入力したもの)が表示され、他のウィジェットと共にユーザー名が表示されます。 基本的な考え方は、ユーザーフォームuserlogin画面の値を取得し、それを別の画面に表示することです。ここで は、私のコードです。ここkivy.appインポートのAppKivyの別の画面でボタンを押したときの画面のラベルテキストの変更方法

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

この設定が必要な場合は、最初の画面で属性を設定できます。 2番目の画面で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

関連する問題