[英]Kivy class in .py and .kv interaction 2
在.py和.kv交互中跟進Kivy類 ,但更復雜。
這是我正在寫的完整代碼:
data / screens / learnkanji_want.kv具有我想要的代碼形式,但是我不完全理解KanjiOriginScreen()
類如何在屏幕管理中發揮作用。
data / screens / learnkanji.kv可以按我的方式工作,但是要使它工作,我必須將keyb_height
放在類KanjiOriginScreen()
( main.py )中。 但是,我希望該代碼在LayoutFunction()
類中( learningkanji.py )。
如何將keyb_height
放在函數LayoutFunction()
並在<LayoutFunction>
中的.kv
文件中訪問它?
您能否解釋一下為什么KanjiOriginScreen:
可以不帶< >
放置在learningkanji.kv中 ,並且程序仍然識別它應該使用它嗎?
如果不清楚,請詢問:)
我發現我沒有將Learnkanji.py導入learnkanji.kv文件中,這導致它找不到類“ LayoutFunction”。
#:import learnkanji data.screens.learnkanji
要回答您的問題:
您的操作方式應該可以正常工作。 您應該能夠從kv訪問對象屬性。 但是,如果您的屬性將要更改,並且您希望UI在更新時進行更新,則應使用Kivy Properties。 如果為常數,則正常屬性可以正常工作。
在Kivy Docs中 , <Widget>:
是一個類規則 ,將應用於該類的每個實例 。 Widget:
將創建該類的實際實例 (在這種情況下,它是您的根小部件)。
至於ScreenManager和Screens,您可以這樣想。 每個屏幕都是它自己的獨立UI(它是自己的根窗口小部件)。 屏幕管理器是保存屏幕的容器,可以在不同的屏幕之間交換。 這使您可以創建可以在其間切換的單獨的UI。 每個UI都是一個單獨的窗口小部件樹,其根是屏幕。 這些文檔實際上非常擅長描述ScreenManager。
如何將keyb_height放入函數LayoutFunction()中,並在.kv文件中訪問它?
您無法使用函數執行此操作。 您需要使LayoutFunction成為一個class
才能執行此操作。 像這樣:
main.py
class LayoutClass(BoxLayout): # I made it a boxlayout, you could make it anything you want
keyb_height = NumericProperty(260) # from kivy.properties import NumericProperty
kv文件:
<LayoutClass>: # can only access it this way if it's a class in main.py
something: root.keyb_height
您能否解釋一下為什么KanjiOriginScreen:可以不帶<>放置在learningkanji.kv中,並且程序仍然認識到應該使用它嗎?
聽起來您在問如何實現此目標。.但我不知道為什么? 除非您希望它由ScreenManager
管理? 但是,在kv文件中不包含<>
情況下,可以將KanjiOriginScreen
包含在另一個根窗口小部件中的唯一方法。 例如,在我對其他問題的回答( 此處 )中,請參見<Manager>
下kv文件中的Testy
和ScreenTwo
。 它們沒有<>
因為它們是類實例,在另一個類(Manager類)中。 在kv文件中,只有根窗口小部件的周圍帶有<>
。 如果這對您來說都沒有道理,則需要編寫有關kivy的教程。
查看我前一陣子的本教程 ,它介紹了有關kv中的根窗口小部件的一些知識(大約4.30)。
抱歉,我不清楚我的問題,但是在#Kivy上IRC的幫助下,我得出以下結論:
class LayoutFunctioning(BoxLayout):
keyb_height = NumericProperty(260)
KanjiOriginScreen:
name: 'LearnKanji'
fullscreen: True
LayoutFunction:
id: lfunc
#...code...
height: lfunc.keyb_height #Instead of root.keyb_height
現在,我了解了如何使用id,可以使用lfunc在LayoutFunction()中調用代碼了:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.