Kivy:如何在python中实例化动态类

时间:2014-10-18 20:07:29

标签: python class instance kivy

我很难弄清楚如何实例化我在python代码上使用kv lang创建的动态类,请考虑以下代码:

我的test.kv文件如下所示:

<MyPopup@Popup>:
    title:'hello'
    size_hint:(1, .6)
    GridLayout:
        id:root_grid
        cols:2
        padding:['8dp', '4dp','8dp','4dp']
        spacing:'8dp'
        Label:
            text:'some text here'
        Button:
            text:'Ok'
            on_press:do_something()
<MyGrid>:
    rows:1
    Button:
        text:'Show Popup'
        on_press:root.pop.show()

然后在我的test.py中:

from kivy.app               import App
from kivy.uix.gridlayout    import GridLayout
from kivy.uix.floatlayout   import FloatLayout
from kivy.uix.popup         import Popup
from kivy.factory           import Factory

class MyGrid(GridLayout):
    pop = Factory.MyPopup()
    pass

class Test(App):
    def build(self):
        return MyGrid()

if __name__=='__main__':
    Test().run()

我收到以下错误:引发FactoryException(&#39; Unkown class&lt;%s&gt;&#39;%name)kivy.factory.FactoryException:Unkown class

有人可以解释我如何正确地做到这一点,我错过了什么?如果您需要更多信息,请告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

您对工厂的调用是在加载kv文件之前进行的,因此您所需的类尚不存在。

除非有某些理由需要类级属性,否则请在MyGrid的__init__中设置self.pop。

您也可以只包含一个Python类声明。我通常更愿意为我想要与python进行交互的任何事情做这件事,尽管意见各不相同。