2015-11-04 93 views
0

我是Kivy的新手,在工作中有點學習。我對如何利用各種小部件和嵌套佈局有基本的瞭解。代碼如下(保存爲GUI.py): -將變量從.py文件傳遞到.kv文件

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition 
from kivy.properties import ListProperty, NumericProperty, StringProperty 

class TestScreen(Screen): 
    pass 

class VariableScreen(Screen): 
    pass 

class SummaryScreen(Screen): 
    pass 

class ProgressScreen(Screen): 
    pass 

class CompletedResultsScreen(Screen): 
    pass 

class SavedResultsScreen(Screen): 
    pass 

class ScreenManagement(ScreenManager): 
    pass 

GUI_code = Builder.load_file("GUI.kv") 

class GUIWindow(App):  #App class is inherited 
    sampletext = StringProperty("Five times Five") 

    def build(self): 
     return GUI_code 

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

的GUI.kv文件包含以下內容:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition 

ScreenManagement: 
    transition: FadeTransition() 
    TestScreen: 
    VariableScreen: 
    SummaryScreen: 
    ProgressScreen: 
    CompletedResultsScreen: 
    SavedResultsScreen: 

<TestScreen>: 
    name: "Test_Screen" 
    FloatLayout: 
     Label: 
      text: "Test" 
      size_hint: 0.1,0.1 
      pos_hint: {"right":0.5,"top":1} 
     Label: 
      text: app.sampletext 
      size_hint: 0.1,0.1 
      pos_hint: {"right":0.1,"top":1} 
     Button: 
      on_release: app.root.current = "Saved_Results_Screen" 
      text: "Saved Results" 
      size_hint: 0.1,0.1 
      pos_hint: {"left":1,"bottom":1} 
      font_size: 15 
     Button: 
      on_release: app.root.current = "Variable_Screen" 
      text: "Variable" 
      size_hint: 0.1,0.1 
      pos_hint: {"right":1,"bottom":1} 
      font_size: 15 

只有.kv文件的相關部分公佈。一些字符串必須從.py文件傳遞到.kv文件。這個問題在下面的鏈接是寫給:

Pass variable value from main.py to .kv file

基礎上的建議有,我用StringProperty類放在sampletext在GUIWindow類。 (也嘗試了一個簡單的字符串sampletext =「Five times Five」。給出相同的錯誤)

當第二個標籤下的文本屬性設置爲文本時,代碼不會運行:app.sampletext白空間打開它是非響應蟒蛇內核需要重新加載關閉它)

顯示以下錯誤消息

18: pos_hint: {"right":0.5,"top":1} 
19: Label: 
>> 20: text: app.sampletext 
21: size_hint: 0.1,0.1 
22: pos_hint: {"right":0.1,"top":1} 
... 
AttributeError: 'NoneType' object has no attribute 'bind' 

它當文本屬性設置爲文本正常運行。「五次五次「

有人可以善意解釋發生了什麼問題嗎?

回答

1

我找不到爲什麼描述的任何文檔,但似乎解析器正試圖訪問app.sampletext當你分析文件,甚至定義了App上課之前,你在做什麼,更別說創造。

Builder.parse行移入您的build(self):函數,它會正常工作。

+0

謝謝:)完全解決了這個問題 – Aditya

+0

你能標記答案嗎?謝謝! – bj0

+0

完成:)對不起,很長的延遲。 – Aditya