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
廣告