【问题标题】:Kivy: how to instantiate a dynamic classes in pythonKivy:如何在 python 中实例化一个动态类
【发布时间】:2014-12-14 03:51:39
【问题描述】:

我很难弄清楚如何在我的 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()

我得到以下错误:raise FactoryException('Unkown class ' % name) kivy.factory.FactoryException: Unkown class

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

【问题讨论】:

    标签: python class instance kivy


    【解决方案1】:

    您对工厂的调用发生在加载 kv 文件之前,因此您想要的类还不存在。

    除非出于某种原因需要类级别属性,否则请改为在 MyGrid 的 __init__ 中设置 self.pop。

    您也可以只包含一个 Python 类声明。我通常更喜欢对我想通过 python 交互的任何东西执行此操作,尽管意见不同。

    【讨论】:

    • 谢谢,它成功了,我能够实例化这个类,现在我可以再次添加我之前为这个类所做的 Python 类声明。
    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多