2016-02-05 31 views
0

我試圖從介紹屏幕獲取暱稱,然後在標籤中使用此暱稱構建聊天屏幕。但是,我無法讓我的功能正確地使用ID。在另一個Kivy屏幕上編輯小部件

.kv:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition 

Screens: 
    transition: FadeTransition() 
    Intro 
    Chat 

<Intro>: 
    id: intro 
    TextInput: 
     id: intro_text 
     ... 
    Button: 
     ... 
     on_press: root.intro_bt_press() 

<Chat>: 
    name: "main" 
    Label: 
     id: lb_name 

的.py:

from kivy import require 
require("1.9.1") 
from kivy.app import App 
from kivy.uix.screenmanager import Screen, ScreenManager, FadeTransition 
from kivy.lang import Builder 

nick = "" 

class Chat(Screen): 
    lb_name.text = "Chat with {}".format(nick) 

class Intro(Screen): 
    global nick 
    def intro_bt_press(self): 
     nick = intro_text.text 
     App.get_running_app().root.current = "main" 

class Screens(ScreenManager): 
    pass 

Screens = Builder.load_file("chat.kv") 

class Chat(App): 
    def build(self): 
     return Screens 

if __name__ == "__main__": 
    Chat().run() 

所以按下按鈕時,我想從的TextInput文本,切換到主屏幕和格式化標籤與文字的屏幕。我無法將文本分配給變量「nick」,因爲它表示它沒有被定義。 lb_name也是如此,但我甚至無法通過第一個錯誤。我在id之前丟失了什麼,告訴Python,在kv文件中看什麼?

回答

1

kv中分配的id可用於ids 屬性。如果您想訪問Python文件中的小部件,請在intro_bt_press中使用類似self.ids['intro_text'].text的內容。

這是chat.kv

但是,可以只使用kv語言來實現所期望的行爲

#: import FadeTransition kivy.uix.screenmanager.FadeTransition 

<[email protected]>: 

Screens: 
    transition: FadeTransition() 
    Intro 
    Chat 

<[email protected]>: 
    BoxLayout: 
     TextInput: 
      id: intro_text 
     Button: 
      on_press: 
       root.manager.get_screen('main').ids.lb_name.text = root.ids.intro_text.text 
       root.manager.current = "main" 

<[email protected]>: 
    name: "main" 
    Label: 
     id: lb_name 

這是chat.py

from kivy.app import App 

class ChatApp(App): 
    pass 

if __name__ == "__main__": 
    ChatApp().run() 
相關問題