簡體   English   中英

將變量從.py文件傳遞到.kv文件

[英]Pass variable from .py file to .kv file

我是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文件。 該問題在以下鏈接中得到解決:

將變量值從main.py傳遞到.kv文件

根據那里的建議,我使用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時,它將正確運行:“五五”

有人可以善良地解釋出了什么問題嗎?

我找不到任何描述其原因的文檔,但是解析器似乎在解析文件時試圖訪問app.sampletext ,這是在定義App類之前所做的事情,更不用說創建了。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM