来自Kivy class in .py and .kv interaction,但更复杂。
Here是我正在编写的完整代码:
data / screens / learnkanji_want.kv 我希望代码如何,但我不完全理解类KanjiOriginScreen()
如何播放它在屏幕管理中的作用。
data / screens / learnkanji.kv 按照我的意愿行事,但要实现这一点,我必须将keyb_height
放入课程KanjiOriginScreen()
( main.py )。但是,我希望该代码位于课程LayoutFunction()
( learnkanji.py )。
如何将keyb_height
放入函数LayoutFunction()
并在.kv
的{{1}}文件中进行访问?
您是否也可以解释为什么<LayoutFunction>
可以放入 learnkanji.kv 而没有KanjiOriginScreen:
,并且程序仍然认识到它应该使用它?
如果不清楚,请询问:)
我发现我没有在learnkanji.kv文件中导入learnkanji.py,导致它找不到类'LayoutFunction'。
< >
答案 0 :(得分:0)
回答你的问题:
你这样做的方式应该有效。您应该能够从kv访问对象属性。但是,如果您的属性将要更改,并且您希望UI在更新时进行更新,则应使用Kivy Properties。如果它是常量,则普通属性可以正常工作。
从Kivy Docs开始,<Widget>:
是类规则,将应用于该类的每个实例。 Widget:
将创建该类的实际实例(在这种情况下,它是您的根小部件)。
对于ScreenManager和Screens,你可以这样想。每个屏幕都是它自己的个人UI(它自己的根小部件)。屏幕管理器是一个容纳屏幕的容器,可以在不同的屏幕之间切换。这使您可以创建可以在其间切换的单独UI。每个UI都是一个单独的窗口小部件树,其根部有一个Screen。 docs实际上非常擅长描述ScreenManager。
答案 1 :(得分:0)
如何将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:可以放入learnkanji.kv而不用&lt; &GT;程序仍然认识到应该使用它吗?
听起来你问你怎么能做到这一点......但我想不出为什么?
除非您希望它由ScreenManager
管理?但是,在没有KanjiOriginScreen
的kv文件中,只有<>
的唯一方法是它在另一个根小部件中。例如,在我对您的其他问题(here)的回答中,请参阅Testy
和ScreenTwo
,因为它们位于<Manager>
下的kv文件中。它们没有<>
,因为它们是类实例,在另一个类(Manager类)中。只有根小部件在kv文件中具有<>
。如果这对你没有任何意义,你需要做一个关于kivy的教程。
查看this tutorial我做了一段时间,它解释了一些关于kv中的根小部件(大约4.30)。