[英]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文件。 該問題在以下鏈接中得到解決:
根據那里的建議,我使用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.