在.py和.kv交互中的Kivy类2

时间:2015-04-30 21:54:58

标签: python class kivy

来自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'。

< >

2 个答案:

答案 0 :(得分:0)

回答你的问题:

  1. 你这样做的方式应该有效。您应该能够从kv访问对象属性。但是,如果您的属性将要更改,并且您希望UI在更新时进行更新,则应使用Kivy Properties。如果它是常量,则普通属性可以正常工作。

  2. Kivy Docs开始,<Widget>:类规则,将应用于该类的每个实例Widget:将创建该类的实际实例(在这种情况下,它是您的根小部件)。

  3. 对于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)的回答中,请参阅TestyScreenTwo,因为它们位于<Manager>下的kv文件中。它们没有<>,因为它们是类实例,在另一个类(Manager类)中。只有根小部件在kv文件中具有<>。如果这对你没有任何意义,你需要做一个关于kivy的教程。

查看this tutorial我做了一段时间,它解释了一些关于kv中的根小部件(大约4.30)。