【问题标题】:Pass variable from .py file to .kv file将变量从 .py 文件传递​​到 .kv 文件
【发布时间】:2015-11-04 14:27:13
【问题描述】:

我是 Kivy 的新手,正在工作中学习。我对如何使用各种小部件和嵌套布局有基本的了解。代码如下(另存为GUI.py):-

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 =“五乘以五”。给出相同的错误)

当第二个标签下的text属性设置为text时代码不运行:app.sampletext(打开一个有空白的应用程序窗口,没有响应,需要重新加载python内核才能关闭)

显示如下错误信息

 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'

当text属性设置为text:“五乘五”时运行正常

有人能解释一下出了什么问题吗?

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    我找不到任何描述原因的文档,但是当您解析文件时,解析器似乎正在尝试访问 app.sampletext,而您甚至在定义 App 类之前就正在这样做,更不用说创建了。

    Builder.parse 行移动到您的build(self): 函数中,它将正常工作。

    【讨论】:

    • 完成 :) 很抱歉耽搁了这么久。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多