Kivy - 工厂
Kivy 中的工厂类用于自动注册任何类或模块,并在项目中的任何位置从中实例化类。工厂类在"kivy.factory"模块中定义。
工厂模式是面向对象编程中的软件架构模式。工厂是用于创建其他对象的对象。它是一个函数或方法,从某些方法调用返回对象或类,返回"新"对象可能被称为"工厂",如工厂方法或工厂函数。
"kivy.factory.Factory"类创建类的实例并将它们添加到小部件树中。小部件树控制用户界面上的元素。
以下是创建使用 Factory 注册的自定义按钮类的示例。
from kivy.factory import Factory from kivy.uix.button import Button Factory.register('MyCustomButton', cls=Button) btn = MyCustomButton( text: "Click me")
同样,你可以用 Factory 创建一个类 −
from kivy.factory import Factory from kivy.uix.label import Label class MyLabel(Label): pass Factory.register('MyLabel', cls=MyLabel) lbl = MyLabel(text: "Hello world")
默认情况下,您通过工厂注册的第一个类名是永久的。如果您希望更改已注册的类,则需要在重新分配之前取消注册该类名。
from kivy.factory import Factory Factory.register('NewWidget', cls=NewWidget) widget = Factory.NewWidget() Factory.unregister('NewWidget') Factory.register('NewWidget', cls=CustomWidget) customWidget = Factory.NewWidget()
示例
以下 Kivy 应用程序使用 Factory 注册 MyPopup 类,它是 Kivy 库中的 Popup 小部件。
Kivy App 类代码如下 −
from kivy.app import App from kivy.uix.widget import Widget from kivy.lang import Builder from kivy.core.window import Window Window.size = (720,400) Builder.load_file('popup.kv') class MyLayout(Widget): pass class FactorydemoApp(App): def build(self): return MyLayout() FactorydemoApp().run()
为了填充应用程序窗口,请使用以下"kv"脚本(popup.kv)
#:import Factory kivy.factory.Factory <MyPopup@Popup> auto_dismiss: False size_hint: 0.6, 0.4 pos_hint: {"x":0.2, "top": 0.9} title: "Popup Box" BoxLayout: orientation: "vertical" size: root.width, root.height Label: text: "Hello Kivy" font_size: 24 Button: text: "Close" font_size: 24 on_release: root.dismiss() <MyLayout> BoxLayout: orientation: "vertical" size: root.width, root.height Label: text: "Factory Example" font_size: 32 Button: text: "Click here" font_size: 32 on_release: Factory.MyPopup().open()
如您所见,MyPopup 类已在 Factory 中注册,单击按钮时将调用其 open() 方法
输出
运行程序以显示带有"单击此处"按钮的窗口。单击该按钮后,弹出窗口将出现在应用程序窗口中。