Kivy 简明教程
Kivy - Factory
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()
Example
以下 Kivy 应用程序使用 Factory 注册 MyPopup 类,该类是 Kivy 库中的一个弹出小部件。
Kivy 应用程序类代码如下 −
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() 方法