2017-07-23 60 views
0

我正在處理一個項目,這裏是kivy python模塊的流程。視頻 - >登錄 - > HomeScreen - >視頻(重複)。 第一次,事情完美即工作無法編輯兩次加載kivy模塊的文本輸入

  1. 視頻播放和自來水出現登錄屏幕
  2. 用戶輸入憑據,併成功登錄帶他到主屏幕
  3. 一旦用戶點擊按鈕中的一個主屏幕重複步驟1

此後,登錄屏幕上的密碼文本框是可以使用的,不能繼續進行。在控制檯它給了我一個消息:

[警告] [郎鹹平]文件../login.kv加載倍數 時候,你可能有不必要的行爲。

我正在使用kv文件加載登錄屏幕中的控件。我遵循blogs建議之一將on_parent:self.focus = True分配給控制,但我有兩個。將這個屬性分配給兩個控件(Login和passwd)在第三步之後只能編輯一個。

以下是我的登錄畫面代碼。讓我知道如果我錯過了任何基本的東西。

​​

以下是登錄千伏文件

<Login>: 
    BoxLayout 
     id: login_layout 
     orientation: 'vertical' 
     padding: [10,50,10,50] 
     spacing: 25 

     Label: 
      text: 'Welcome' 
      font_size: 28 

     BoxLayout: 
      orientation: 'vertical' 

      Label: 
       text: 'Login' 
       font_size: 14 
       halign: 'left' 
       text_size: root.width-20, 20 

      TextInput: 
       id: login 
       multiline:False 
       font_size: 14 
       height: 14 
       hint_text: 'Enter your ID' 
       on_parent:self.focus = True 
     BoxLayout: 
      orientation: 'vertical' 

      Label: 
       text: 'Password' 
       halign: 'left' 
       font_size: 14 
       text_size: root.width-20, 20 

      TextInput: 
       id: password 
       multiline: False 
       password: True 
       font_size: 14 
       height: 14 
       hint_text: 'Enter your pass' 
     Button: 
      text: 'OK' 
      font_size: 14 

      on_press: root.do_login(login.text, password.text) 

     Button: 
      text: 'Reset' 
      font_size: 14 

      on_press: root.resetForm() 

     Label: 
      id: status 
      multiline:False 
      font_size: 14 

另一個問題是我加載/卸載KV文件多次進行相應的屏幕。它會產生問題嗎?

回答

0

您需要將您的所有屏幕配置添加到一個.kv文件中並加載它。

爲什麼?

在kivy應用Screens不像在其他應用widows這裏打開一個新的window基本上是創建一個新的實例,在kivy只有一個window是被加載的所有screens,一旦你想改變一個特定的screenScreenManager只是隱藏當前的並顯示您請求的那個。

我也注意到您正在爲每個screen運行一個新應用程序,而應該將所有屏幕添加到同一應用程序中的相同python模塊。

if do_validation: 
    LoginApp.get_running_app().stop() 
    try: 
     Builder.unload_file("login.kv") 
    except Exception as e: 
    logging.error('failed to unload kv file') 

    from app.HomeScreen import HomeScreen 
    HomeScreen.HSApp().run() #run another kivy python module 

此代碼有,如果你沒有使用ScreenManager看看this documentation改變。

編輯:

下面是如何ScreenScreenManager工作的一個小例子:

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import Screen, ScreenManager 


class LoginScreen(Screen): 
    pass 

class HomeScreen(Screen): 
    pass 

class SM(ScreenManager): 
    pass 

app_string = Builder.load_string(""" 
SM: 
    LoginScreen: 
    HomeScreen: 

<LoginScreen>: 
    name: 'login' 
    BoxLayout: 
     Button: 
      text: 'Next screen' 
      on_release: 
       root.manager.current = 'home' 

<HomeScreen>: 
    name: 'home' 
    BoxLayout: 
     Button: 
      text: 'Back to login' 
      on_release: 
       root.manager.current = 'login' 
""") 

class MyApp(App): 

    def build(self): 
     return app_string 

if __name__ == '__main__': 
    MyApp().run() 

如果運行這個程序,你會點擊該按鈕時發現的屏幕變化的行爲。

+0

感謝您的建議。但是,是否可以將該視頻畫面作爲ScreenManager中的屏幕添加,即將其添加爲小部件?因爲文檔說我們只能添加屏幕。 – w1n5rx

+0

您可以添加一個「屏幕」,然後在該屏幕中添加您的視頻「小部件」。 –

+0

@ w1n5rx我剛剛添加了一個例子,試試看,你會看到屏幕是如何工作的 –