Kivy中文編程指南:圖形
原文地址
譯者前言
這一章節比前兩章節簡單很多,翻譯的也比較順了。
簡介Canvas
Kivy中控制項圖形呈現是使用Canvas完成的,可以將其看作一個無限的繪圖板,也是一組繪圖指令。有很多種繪圖指令都可以應用或者添加到你的Canvas傷,不過總體上分為兩類:
- context instructions環境指令
- vertex instructions頂點指令
context instructions環境指令不繪製任何圖形,但會改變vertex instructions頂點指令的繪製結果。
Canvas都包含兩個指令分支。分別是canvas.before和canvas.after 這兩種指令群。這兩組指令分別在Canvas圖形繪製前後執行。 繪製前的會被繪製的圖形覆蓋掉,繪製後的會覆蓋在圖形上層。這些指令都在用戶對它們讀取之後才會被創建。
要對一個控制項添加Canvas繪圖指令,需要使用Canvas環境指令:
class MyWidget(Widget):n def __init__(self, **kwargs):n super(MyWidget, self).__init__(**kwargs)n with self.canvas:n # add your instruction for main canvas heren # 這裡是增加一個座位主繪圖的指令nn with self.canvas.before:n # you can use this to add instructions rendered beforen # 這裡可以在繪圖之前添加指令nn with self.canvas.after:n # you can use this to add instructions rendered aftern # 這裡可以在繪圖之後添加指令n
環境指令
環境指令是用於操作opengl環境。 可以旋轉,翻譯和縮放畫布。還可以附加紋理或更改繪圖顏色。下面這段代碼裡面的是最常用到的更改顏色的指令,其他的環境指令也都很有用處:
with self.canvas.before:n Color(1, 0, .4, mode=rgb)n
繪圖指令
繪圖指令可簡可繁,最簡單的比如畫一個多邊形,更複雜的比如繪製網格或者貝塞爾曲線都可以:
with self.canvas:n # draw a line using the default colorn # 用默認顏色畫一條線n Line(points=(x1, y1, x2, y2, x3, y3))nn # lets draw a semi-transparent red squaren # 接下來畫一個半透明的紅方塊n Color(1, 0, 0, .5, mode=rgba)n Rectangle(pos=self.pos, size=self.size)n
操作指令
有時候可能需要把之前添加到Canvas繪圖上的指令進行更改或者刪除,這可以有很多種辦法,要根據具體需求來選擇:
可以給指令創建一個引用然後對其進行更新:
class MyWidget(Widget):n def __init__(self, **kwargs):n super(MyWidget, self).__init__(**kwargs)n with self.canvas:n self.rect = Rectangle(pos=self.pos, size=self.size)nn self.bind(pos=self.update_rect)n self.bind(size=self.update_rect)nn def update_rect(self, *args):n self.rect.pos = self.posn self.rect.size = self.sizen
或者也可以清空Canvas畫布然後重新畫:
class MyWidget(Widget):n def __init__(self, **kwargs):n super(MyWidget, self).__init__(**kwargs)n self.draw_my_stuff()nn self.bind(pos=self.draw_my_stuff)n self.bind(size=self.draw_my_stuff)nn def draw_my_stuff(self):n self.canvas.clear()nn with self.canvas:n self.rect = Rectangle(pos=self.pos, size=self.size)n
要注意更新指令的方法是更好的選擇,因為這樣減少了開銷,並且避免了創建新指令。
推薦閱讀: