Kivy 架構



閱讀本章節以瞭解 Kivy 框架的設計架構。一方面,Kivy 提供各種元件,允許使用者與應用程式互動;另一方面,它與各種硬體裝置互動,例如滑鼠、TUIO、音訊和影片流等。中間層包含用於處理觸控輸入、音訊和影片、圖形指令和文字輸入的驅動程式或提供程式。

這是 Kivy 框架的官方架構圖:

Kivy Architecture

核心提供程式

Kivy 架構的一個重要特性是“模組化”和“抽象”。例如開啟視窗、讀取音訊和影片流、載入影像等操作是任何圖形應用程式的核心任務。Kivy 透過為控制硬體的驅動程式提供易於實現的 API 來抽象這些核心任務。

Kivy 使用特定於執行應用程式的作業系統的提供程式。每個作業系統(Windows、Linux、MacOS 等)都有其自身針對不同核心任務的原生 API。它們充當作業系統與 Kivy 之間的中間通訊層。因此,Kivy 充分利用了作業系統公開的功能來提高效率。

使用特定於平臺的庫可以減小 Kivy 發行版的大小,並簡化打包過程。這也使得 Kivy 更容易移植到其他平臺。Android 移植從中受益匪淺。

輸入提供程式

輸入提供程式是一段程式碼,它增加了對特定輸入裝置的支援。Kivy 內建支援的不同輸入裝置包括:

  • Android 操縱桿輸入提供程式
  • 蘋果觸控板
  • TUIO(有形使用者介面物件)
  • 滑鼠模擬器
  • HIDInput

要新增對新輸入裝置的支援,請提供一個新類,該類從您的裝置讀取輸入資料並將它們轉換為 Kivy 基本事件。

圖形

OpenGL 是 Kivy 框架整個圖形 API 的基礎。Kivy 使用 OpenGL 指令發出硬體加速的繪圖命令。Kivy 透過定義易於使用的功能來消除編寫 OpenGL 命令的困難部分。

Kivy 使用 OpenGL 2.0 ES(GLES 或嵌入式系統的 OpenGL),您可以使用它進行跨平臺開發。

核心庫

Kivy 框架的以下組成部分提供了高階抽象:

  • 時鐘 - 時鐘 API 幫助您排程計時器事件。支援一次性計時器和週期性計時器。

  • 手勢檢測 - 多點觸控介面的重要要求。手勢識別器檢測各種筆劃,例如圓形或矩形。您甚至可以訓練它來檢測您自己的筆劃。

  • Kivy 語言 - Kivy 語言用於輕鬆高效地描述使用者介面。這使得應用程式設計與開發應用程式邏輯分離。

  • 屬性 - Kivy 獨有的屬性類概念(它們與 Python 類中的屬性不同)是將您的元件程式碼與使用者介面描述連結的類。

UIX

Kivy 的使用者介面是用元件和佈局構建的。

  • 元件是您新增到應用程式中以提供某種功能的 UI 元素。元件示例包括按鈕、滑塊、列表等等。元件接收 MotionEvents。

  • 多個元件排列在合適的佈局中。Kivy 提供滿足各種用途的元件放置要求的佈局類。例如網格佈局或箱式佈局。您還可以巢狀佈局。

事件分發

術語“元件”幾乎在所有圖形工具包中都用於 UI 元素。任何接收輸入事件的物件都是一個元件。一個或多個元件排列成樹狀結構。

Kivy 應用程式視窗只能容納一個根元件,但根元件可以在樹狀結構中包含其他元件。因此,元件之間存在“父子兄弟”關係。

每當發生新的輸入事件時,元件樹的根元件首先接收該事件。根據觸控狀態,事件會向下傳播到元件樹。

樹中的每個元件都可以處理事件或將其傳遞給層次結構中的下一個元件。如果元件吸收並處理事件,則應返回 True,以便停止其在樹中的傳播,並且不會對該事件進行進一步處理。

def on_touch_down(self, touch):
   for child in self.children[:]:
      if child.dispatch('on_touch_down', touch):
         return True

由於事件透過元件樹傳播,因此通常需要驗證事件是否發生在預期處理該事件的某個元件的區域中。collide_point() 方法可以幫助確定此事實。此方法檢查觸控位置是否落在某個元件的“監視區域”內,並返回 True 或 False。預設情況下,這檢查螢幕上由元件的pos(位置;x 和 y)和size(寬度和高度)描述的矩形區域。

廣告
© . All rights reserved.