- 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 - 花園
- Kivy - 儲存
- Kivy - 向量
- Kivy - 工具
- Kivy - 檢查器
- Kivy - 工具
- Kivy - 日誌記錄器
- Kivy - 幀緩衝區
- Kivy 應用程式和專案
- Kivy - 繪圖應用程式
- Kivy - 計算器應用程式
- Kivy - 計時器應用程式
- Kivy - 相機處理
- Kivy - 圖片檢視器
- Kivy - 貝塞爾曲線
- Kivy - 畫布壓力測試
- Kivy - 圓形繪製
- Kivy - 元件動畫
- Kivy - 雜項
- Kivy 有用資源
- Kivy - 快速指南
- Kivy - 有用資源
- Kivy - 討論
Kivy - 繪圖
Kivy 庫中的所有 GUI 元件都具有一個 Canvas 屬性。Canvas 是一個用於繪製各種物件(如矩形、橢圓等)的空間。需要注意的是,Kivy 沒有單獨的 Canvas 元件用於繪製形狀。所有元件的畫布共享一個公共座標空間。
在 Kivy 中,繪圖是在與任何元件相關的 Canvas 上完成的,使用頂點指令和上下文指令。
頂點指令 - 用於繪製基本幾何形狀(如線、矩形、橢圓等)的指令稱為頂點指令。
上下文指令 - 這些指令不會繪製任何內容,但會操作整個座標空間,例如向其新增顏色、旋轉、平移和縮放。
頂點指令
這些指令以不同頂點物件的形式新增到 Canvas 中。頂點類在 kivy.graphics.vertex_instructions 模組中定義。如上所述,繪圖指令新增到 Canvas 的上下文中。
with self.canvas: vertex(**args)
vertex_instructions 模組包含以下類 -
Bezier
BorderImage
Ellipse
Line
Mesh
Point
Quad
Rectangle
RoundedRectangle
SmoothLine
Triangle
Bezier
貝塞爾曲線由一些控制點加權,我們將其包含在指令中。在 Kivy 中,Bezier 是一個頂點畫布指令,它根據作為引數傳遞給 Beizer 建構函式的一組點繪製此曲線。
from kivy.graphics import Beizer with self.canvas: Beizer(**args)
引數
Bezier 類中定義了以下引數 -
points - 點列表,格式為 (x1, y1, x2, y2…)
loop - 布林值,預設為 False,將貝塞爾曲線設定為連線最後一個點到第一個點。
segments - 整數,預設為 180。定義繪製曲線所需的線段數。線段數越多,繪製越平滑。
dash_length - 線段長度(如果為虛線),預設為 1。
dash_offset - 線段末端與下一線段起始之間的距離,預設為 0。更改此值使其成為虛線。
示例
self.w=Widget()
with self.w.canvas:
Color(0,1,1,1)
Bezier(
points=[700,400,450,300,300,350,350, 200,200,100,150,10],
segments=20
)
Color(1,1,0,1)
Point(
points =[700,400,450,300,300,350,350, 200,200,100,150,10],
pointsize= 3
)
輸出
它將生成以下輸出視窗 -
此處顯示的點僅供參考。
Ellipse
在 Kivy 框架中,Ellipse 是一個頂點指令。根據所需的線段,它可以顯示多邊形、矩形或弧線。如果寬度和高度引數相等,則結果為圓形。
from kivy.graphics import Ellipse with self.canvas: Ellipse(**args)
引數
Ellipse 類中定義了以下引數 -
pos - 包含橢圓中心 X 和 Y 座標值的兩個元素元組。
size - 定義橢圓寬度和高度(以畫素為單位)的兩個元素元組。
angle_start - 浮點數,預設為 0.0,指定起始角度(以度為單位)。
angle_end - 浮點數,預設為 360.0,指定結束角度(以度為單位)。
segments - 橢圓的線段數。如果您有許多線段,則橢圓繪製將更平滑。使用此屬性建立具有 3 條或更多邊的多邊形。小於 3 的值將不會顯示。
示例
self.w=Widget() with self.w.canvas: Color(0.5, .2, 0.4, 1) d = 250 Ellipse(pos=(360,200), size=(d+75, d))
輸出
它將生成以下輸出視窗 -
Rectangle
此頂點指令根據作為引數給定的位置和尺寸在畫布上繪製一個矩形。
from kivy.graphics import Rectangle with self.canvas: Rectangle(**args)
引數
Rectangle 類中定義了以下引數 -
pos - 整數列表,指定矩形的位置,格式為 (x, y)。
size - 整數列表,指定矩形的大小,格式為 (width, height)。
繪製填充某種顏色的矩形是為標籤提供背景的推薦方法。
示例
def build(self):
widget = Widget()
with widget.canvas:
Color(0, 0, 1, 1)
Rectangle(
pos=(50, 300), size_hint=(None, None),
size=(300, 200)
)
lbl = Label(
text='Hello World', font_size=24,
pos=(Window.width / 2, 300), size=(200, 200),
color=(0, 0, 1, 1)
)
with lbl.canvas.before:
Color(1, 1, 0)
Rectangle(pos=lbl.pos, size=lbl.size)
widget.add_widget(lbl)
return widget
輸出
它將生成以下輸出視窗 -
需要注意的是,Quad 是一個四邊形,一個具有四個頂點的多邊形,不一定是矩形。同樣,圓角矩形是一個具有圓角頂點的矩形。
Line
在 Kivy 圖形中,Line 是一個基本的頂點指令。Line 物件建構函式的 points 屬性具有連續點的 x 和 y 座標。Kivy 繪製一條依次連線這些點的線。
from kivy.graphics import Line with self.canvas: Line(**args)
引數
Line 類中定義了以下引數 -
points - 點列表,格式為 (x1, y1, x2, y2…)
dash_length - 整數,線段長度(如果為虛線),預設為 1。
dash_offset - 線段末端與下一線段起始之間的偏移量,預設為 0。更改此值使其成為虛線。
dashes - 格式為 [ON 長度,偏移量,ON 長度,偏移量,…] 的整數列表。例如 [2,4,1,6,8,2] 將建立一個線,第一個虛線長度為 2,然後偏移量為 4,然後虛線長度為 1,然後偏移量為 6,依此類推。
width - 浮點數 - 定義線的寬度,預設為 1.0。
示例
def build(self):
box = BoxLayout(orientation='vertical')
self.w = Widget()
with self.w.canvas:
Color(1, 0, 0, 1)
Line(
points=[700, 400, 450, 300, 300, 350, 350, 200, 200, 100, 150, 10],
width=4
)
box.add_widget(self.w)
return box
輸出
它將生成以下輸出視窗 -
Line 類還具有 bezier、ellipse、circle、rectangle 屬性,其中線的點用於繪製相應的形狀。
Triangle
使用此頂點指令,Kivy 使用 points 列表繪製一個三角形。
from kivy.graphics import Triangle with self.canvas: Triangle(**args)
points 屬性是三角形三個頂點的 x 和 y 座標列表,格式為 (x1, y1, x2, y2, x3, y3)。
示例
self.w=Widget() with self.w.canvas: Color(1,1,1,1) self.triangle = Triangle(points=[100,100, 300,300, 500,100])
輸出
它將生成以下輸出視窗 -
更新繪圖
需要注意的是,所有圖形指令類的列表屬性(例如 Triangle.points、Mesh.indices 等)不是 Kivy 屬性,而是 Python 屬性。因此,修改此列表不會更新繪圖。只有當列表物件本身發生更改時,才會更新繪圖,而不是當列表值被修改時。
讓我們透過將點 (300,300) 更改為 (400,300) 來更改上述矩形的頂點。我們在上述佈局中新增一個按鈕,並將其繫結到 update 方法。
示例
以下是完整的程式碼 -
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import *
from kivy.properties import ObjectProperty
from kivy.core.window import Window
Window.size = (720, 400)
class mytriangleapp(App):
triangle = ObjectProperty(None)
title = "Drawing app"
def updating(self, *args):
self.triangle.points[3] = 400
self.triangle.points = self.triangle.points
def build(self):
box = BoxLayout(orientation='vertical')
self.w = Widget()
with self.w.canvas:
Color(1, 1, 1, 1)
self.triangle = Triangle(points=[100, 100, 300, 300, 500, 100])
self.b1 = Button(
text='update', on_press=self.updating,
size_hint=(None, .1)
)
box.add_widget(self.w)
box.add_widget(self.b1)
return box
mytriangleapp().run()
輸出
執行上述程式時,我們會看到一個三角形和一個按鈕。當單擊按鈕時,“triangle.points”列表也會更新,從而更新三角形繪製。