Kivy - SVG



Kivy 框架支援顯示 SVG 檔案,儘管目前仍處於高度實驗階段。在計算機圖形學中,SVG 代表可縮放向量圖形 (Scalable Vector Graphics),是由 W3C 制定的用於編碼影像資料的標準。

諸如 PNG 和 JPG 等影像格式基於光柵圖形,其中影像資料以點陣圖的形式儲存,點陣圖是畫素顏色和位置的網格。這種格式的缺點是,如果放大影像,影像在達到一定程度後會開始模糊。

另一方面,向量圖形影像以一系列 XML 指令的形式以數學方式儲存,這些指令告訴檢視程式如何在螢幕上“繪製”影像。繪製可以在任何尺寸下進行,因為 SVG 檔案與解析度無關。它們可以放大或縮小而不會降低質量或清晰度。

Kivy 庫在 "kivy.graphics.svg" 模組中定義了 Svg 類。為了在任何小部件的畫布上繪製 SVG 影像,我們可以使用以下語法:

from kivy.graphics.svg import Svg
with widget.canvas:
   svg = Svg("test.svg")

Svg 類具有以下屬性:

  • anchor_x - 水平錨點位置,用於縮放和旋轉。預設為 0。值 0、1 和 2 分別對應於“左”、“中”和“右”。

  • anchor_y - 垂直錨點位置,用於縮放和旋轉。預設為 0。值 0、1 和 2 分別對應於“左”、“中”和“右”。

  • color - 用於指定“currentColor”的 SvgElements 的預設顏色。

  • height - 'double'

  • source - 要載入的 SVG 檔名/源。

  • width - 'double'

示例

以下程式使用“kv”指令碼載入 Scatter 小部件。“svg”物件放置在 GridLayout 中。將檔名作為其 source 屬性。這是 “kv” 檔案:

<SvgWidget>:
   do_rotation: True
<FloatLayout>:
   canvas.before:
      Color:
         rgb: (1, 1, 1)
      Rectangle:
         pos: self.pos
         size: self.size

Kivy App 類的 Python 程式碼:

from kivy.uix.scatter import Scatter
from kivy.app import App
from kivy.graphics.svg import Svg
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
from kivy.core.window import Window

Window.size = (720,400)

class SvgWidget(Scatter):
   def __init__(self, filename):
      super(SvgWidget, self).__init__()
      with self.canvas:
         svg = Svg(source=filename)
      self.size = Window.width, Window.height
      
class SvgDemoApp(App):
   def build(self):
      self.root = GridLayout(cols=1)
      
      filename = "ship.svg"
      svg = SvgWidget(filename)

      self.root.add_widget(svg)
      svg.scale = 4

SvgDemoApp().run()

輸出

執行此程式後,將生成以下輸出視窗:

Kivy Svgs
廣告
© . All rights reserved.