Kivy:如何在Python中实例化动态类
我在尝试用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与它互动的时候,不过大家的看法可能不太一样。