2015-11-04 94 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