簡體   English   中英

.py和.kv交互中的Kivy類2

[英]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

要回答您的問題:

  1. 您的操作方式應該可以正常工作。 您應該能夠從kv訪問對象屬性。 但是,如果您的屬性將要更改,並且您希望UI在更新時進行更新,則應使用Kivy Properties。 如果為常數,則正常屬性可以正常工作。

  2. 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文件中的TestyScreenTwo 它們沒有<>因為它們是類實例,在另一個類(Manager類)中。 在kv文件中,只有根窗口小部件的周圍帶有<> 如果這對您來說都沒有道理,則需要編寫有關kivy的教程。

查看我前一陣子的本教程 ,它介紹了有關kv中的根窗口小部件的一些知識(大約4.30)。

抱歉,我不清楚我的問題,但是在#Kivy上IRC的幫助下,我得出以下結論:

learningkanji.py

class LayoutFunctioning(BoxLayout):
    keyb_height = NumericProperty(260)

學習kanji.kv

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.

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