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

1 投票
1 回答
1752 浏览
提问于 2025-04-28 07:43

我在尝试用Python代码创建一个动态类时遇到了困难,这个类是用kv语言写的。看看下面的代码:

我的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()

结果我遇到了一个错误:raise FactoryException('未知类 <%s>' % name) kivy.factory.FactoryException: 未知类

有人能告诉我应该怎么做吗?我缺少了什么?如果你需要更多信息,请告诉我。谢谢。

暂无标签

1 个回答

1

你调用工厂的代码是在kv文件加载之前执行的,所以你想要的那个类还不存在。

除非你有特别的理由需要一个类级别的属性,否则可以在MyGrid的__init__方法里设置self.pop。

你也可以直接写一个Python类的声明。我一般喜欢这样做,特别是当我想用Python与它互动的时候,不过大家的看法可能不太一样。

撰写回答