Kivy - 工厂



Kivy 中的工厂类用于自动注册任何类或模块,并在项目中的任何位置实例化这些类。Factory 类定义在“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() 方法。

输出

运行程序以显示带有“点击此处”按钮的窗口。单击它后,弹出窗口将出现在应用程序窗口上。

Kivy Factory
广告