- Kivy 教程
- Kivy 首頁
- Kivy 基礎
- Kivy 入門
- Kivy 安裝
- Kivy 架構
- Kivy 檔案語法
- Kivy 應用
- Kivy - Hello World
- Kivy 應用生命週期
- Kivy 事件
- Kivy 屬性
- Kivy 輸入
- Kivy 行為
- Kivy 按鈕
- Kivy 按鈕
- Kivy 按鈕事件
- Kivy 按鈕顏色
- Kivy 按鈕大小
- Kivy 按鈕位置
- Kivy 圓形按鈕
- Kivy 停用按鈕
- Kivy 圖片按鈕
- Kivy 元件
- Kivy 元件
- Kivy 標籤
- Kivy 文字輸入
- Kivy 畫布
- Kivy 線
- Kivy 複選框
- Kivy 下拉列表
- Kivy 視窗
- Kivy 滾動檢視
- Kivy 走馬燈
- Kivy 滑塊
- Kivy 圖片
- Kivy 彈出視窗
- Kivy 開關
- Kivy 微調器
- Kivy 分隔器
- Kivy 進度條
- Kivy 氣泡
- Kivy 標籤頁面板
- Kivy 散點圖
- Kivy 手風琴
- Kivy 檔案選擇器
- Kivy 顏色選擇器
- Kivy 程式碼輸入
- Kivy 模態檢視
- Kivy 切換按鈕
- Kivy 相機
- Kivy 樹檢視
- Kivy reStructuredText
- Kivy 動作欄
- Kivy 播放器
- Kivy 模板檢視
- Kivy 虛擬鍵盤
- Kivy 觸控漣漪
- Kivy 音訊
- Kivy 影片
- Kivy 拼寫檢查
- Kivy 效果
- Kivy 輸入記錄器
- Kivy OpenGL
- Kivy 文字
- Kivy 文字標記
- Kivy 設定
- Kivy 佈局
- Kivy 佈局
- Kivy 浮動佈局
- Kivy 網格佈局
- Kivy 箱式佈局
- Kivy 堆疊佈局
- Kivy 錨點佈局
- Kivy 相對佈局
- Kivy 頁面佈局
- Kivy 迴圈佈局
- Kivy 佈局巢狀
- Kivy 高階概念
- Kivy 配置物件
- Kivy 圖集
- Kivy 資料載入器
- Kivy 快取管理器
- Kivy 控制檯
- Kivy 動畫
- Kivy 多筆劃
- Kivy 時鐘
- Kivy SVG
- Kivy UrlRequest
- Kivy 剪貼簿
- Kivy 工廠
- Kivy 手勢
- Kivy 語言
- Kivy 圖形
- Kivy 繪圖
- Kivy 打包
- Kivy Garden
- Kivy 儲存
- Kivy 向量
- Kivy 工具函式
- Kivy 檢查器
- Kivy 工具
- Kivy 日誌記錄器
- Kivy 幀緩衝區
- Kivy 應用和專案
- Kivy 繪圖應用
- Kivy 計算器應用
- Kivy 計時器應用
- Kivy 相機處理
- Kivy 圖片檢視器
- Kivy 貝塞爾曲線
- Kivy 畫布壓力測試
- Kivy 繪製圓形
- Kivy 元件動畫
- Kivy 其他
- Kivy 有用資源
- Kivy 快速指南
- Kivy 有用資源
- Kivy 討論
Kivy 架構
閱讀本章節以瞭解 Kivy 框架的設計架構。一方面,Kivy 提供各種元件,允許使用者與應用程式互動;另一方面,它與各種硬體裝置互動,例如滑鼠、TUIO、音訊和影片流等。中間層包含用於處理觸控輸入、音訊和影片、圖形指令和文字輸入的驅動程式或提供程式。
這是 Kivy 框架的官方架構圖:
核心提供程式
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(寬度和高度)描述的矩形區域。