<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # PyCairo 形狀和填充 > 原文: [https://zetcode.com/gfx/pycairo/shapesfills/](https://zetcode.com/gfx/pycairo/shapesfills/) 在 PyCairo 教程的這一部分中,我們創建一些基本的和更高級的形狀。 我們用純色,圖案和漸變填充這些形狀。 漸變將在單獨的章節中介紹。 ## 基本形狀 PyCairo 有一些創建簡單形狀的基本方法。 ```py def on_draw(self, wid, cr): cr.set_source_rgb(0.6, 0.6, 0.6) cr.rectangle(20, 20, 120, 80) cr.rectangle(180, 20, 80, 80) cr.fill() cr.arc(330, 60, 40, 0, 2*math.pi) cr.fill() cr.arc(90, 160, 40, math.pi/4, math.pi) cr.fill() cr.translate(220, 180) cr.scale(1, 0.7) cr.arc(0, 0, 50, 0, 2*math.pi) cr.fill() ``` 在此示例中,我們創建一個矩形,一個正方形,一個圓形,一個弧形和一個橢圓形。 ```py cr.rectangle(20, 20, 120, 80) cr.rectangle(180, 20, 80, 80) ``` `rectangle()`方法用于創建正方形和矩形。 正方形只是矩形的一種特定類型。 參數是窗口左上角的 x 和 y 坐標以及矩形的寬度和高度。 ```py cr.arc(330, 60, 40, 0, 2*math.pi) ``` `arc()`方法創建一個圓。 參數是弧度中心的 x 和 y 坐標,半徑以及弧度的開始和結束角度。 ```py cr.arc(90, 160, 40, math.pi/4, math.pi) ``` 在這里,我們畫一條弧,是圓的一部分。 ```py cr.scale(1, 0.7) cr.arc(0, 0, 50, 0, 2*math.pi) ``` 我們使用`scale()`和`arc()`方法創建一個橢圓。 ![Basic Shapes](https://img.kancloud.cn/e6/89/e68973ea6f0b641f8cd9a458a8792d35_392x266.jpg) 圖:基本形狀 可以使用基本圖元的組合來創建其他形狀。 `complex_shapes.py` ```py #!/usr/bin/python ''' ZetCode PyCairo tutorial This code example draws another three shapes in PyCairo. Author: Jan Bodnar Website: zetcode.com Last edited: April 2016 ''' from gi.repository import Gtk import cairo class cv(object): points = ( ( 0, 85 ), ( 75, 75 ), ( 100, 10 ), ( 125, 75 ), ( 200, 85 ), ( 150, 125 ), ( 160, 190 ), ( 100, 150 ), ( 40, 190 ), ( 50, 125 ), ( 0, 85 ) ) class Example(Gtk.Window): def __init__(self): super(Example, self).__init__() self.init_ui() def init_ui(self): darea = Gtk.DrawingArea() darea.connect("draw", self.on_draw) self.add(darea) self.set_title("Complex shapes") self.resize(460, 240) self.set_position(Gtk.WindowPosition.CENTER) self.connect("delete-event", Gtk.main_quit) self.show_all() def on_draw(self, wid, cr): cr.set_source_rgb(0.6, 0.6, 0.6) cr.set_line_width(1) for i in range(10): cr.line_to(cv.points[i][0], cv.points[i][1]) cr.fill() cr.move_to(240, 40) cr.line_to(240, 160) cr.line_to(350, 160) cr.fill() cr.move_to(380, 40) cr.line_to(380, 160) cr.line_to(450, 160) cr.curve_to(440, 155, 380, 145, 380, 40) cr.fill() def main(): app = Example() Gtk.main() if __name__ == "__main__": main() ``` 在此示例中,我們創建一個星形對象,一個三角形和一個修改后的三角形。 這些對象是使用直線和一條曲線創建的。 ```py for i in range(10): cr.line_to(cv.points[i][0], cv.points[i][1]) cr.fill() ``` 通過連接點元組中的所有點來繪制星形。 `fill()`方法用當前顏色填充星形對象。 ```py cr.move_to(240, 40) cr.line_to(240, 160) cr.line_to(350, 160) cr.fill() ``` 這些線創建一個三角形。 最后兩點將自動合并。 ```py cr.move_to(380, 40) cr.line_to(380, 160) cr.line_to(450, 160) cr.curve_to(440, 155, 380, 145, 380, 40) cr.fill() ``` 修改后的三角形是兩條直線和一條曲線的簡單組合。 ![Comlex shapes](https://img.kancloud.cn/39/ef/39ef3e38aaa844d5ebd413de763141ef_462x266.jpg) 圖:復雜形狀 ## 填充 填充填充形狀的內部。 填充可以是純色,圖案或漸變。 ### 純色 顏色是代表紅色,綠色和藍色(RGB)強度值的組合的對象。 PyCairo 的有效 RGB 值在 0 到 1 的范圍內。 ```py def on_draw(self, wid, cr): cr.set_source_rgb(0.2, 0.23, 0.9) cr.rectangle(10, 15, 90, 60) cr.fill() cr.set_source_rgb(0.9, 0.1, 0.1) cr.rectangle(130, 15, 90, 60) cr.fill() cr.set_source_rgb(0.4, 0.9, 0.4) cr.rectangle(250, 15, 90, 60) cr.fill() ``` 在示例中,我們繪制了四個彩色矩形。 ```py cr.set_source_rgb(0.2, 0.23, 0.9) cr.rectangle(10, 15, 90, 60) cr.fill() ``` `set_source_rgb()`方法將源設置為不透明的顏色。 參數是紅色,綠色,藍色強度值。 通過調用`fill()`方法,該源用于填充矩形的內部。 ![Solid colors](https://img.kancloud.cn/48/98/489825c1658f1de4ca945d33a1ebd23a_362x126.jpg) 圖:純色 ### 圖案 圖案是可以用于填充形狀的復雜圖形對象。 `patterns.py` ```py #!/usr/bin/python ''' ZetCode PyCairo tutorial This program shows how to work with patterns in PyCairo. Author: Jan Bodnar Website: zetcode.com Last edited: April 2016 ''' from gi.repository import Gtk import cairo class Example(Gtk.Window): def __init__(self): super(Example, self).__init__() self.init_ui() self.create_surpat() def init_ui(self): darea = Gtk.DrawingArea() darea.connect("draw", self.on_draw) self.add(darea) self.set_title("Patterns") self.resize(300, 290) self.set_position(Gtk.WindowPosition.CENTER) self.connect("delete-event", Gtk.main_quit) self.show_all() def create_surpat(self): sr1 = cairo.ImageSurface.create_from_png("blueweb.png") sr2 = cairo.ImageSurface.create_from_png("maple.png") sr3 = cairo.ImageSurface.create_from_png("crack.png") sr4 = cairo.ImageSurface.create_from_png("chocolate.png") self.pt1 = cairo.SurfacePattern(sr1) self.pt1.set_extend(cairo.EXTEND_REPEAT) self.pt2 = cairo.SurfacePattern(sr2) self.pt2.set_extend(cairo.EXTEND_REPEAT) self.pt3 = cairo.SurfacePattern(sr3) self.pt3.set_extend(cairo.EXTEND_REPEAT) self.pt4 = cairo.SurfacePattern(sr4) self.pt4.set_extend(cairo.EXTEND_REPEAT) def on_draw(self, wid, cr): cr.set_source(self.pt1) cr.rectangle(20, 20, 100, 100) cr.fill() cr.set_source(self.pt2) cr.rectangle(150, 20, 100, 100) cr.fill() cr.set_source(self.pt3) cr.rectangle(20, 140, 100, 100) cr.fill() cr.set_source(self.pt4) cr.rectangle(150, 140, 100, 100) cr.fill() def main(): app = Example() Gtk.main() if __name__ == "__main__": main() ``` 在此示例中,我們繪制了四個矩形。 這次我們用一些模式填充它們。 我們使用來自 Gimp 圖像處理器的四個圖案圖像。 我們必須保留這些圖案的原始大小,因為我們將它們平鋪。 我們在`draw()`方法之外創建圖像表面。 每次需要重新繪制窗口時,從硬盤讀取數據都不會很有效。 ```py sr1 = cairo.ImageSurface.create_from_png("blueweb.png") ``` 從 PNG 圖像創建圖像表面。 ```py self.pt1 = cairo.SurfacePattern(sr1) self.pt1.set_extend(cairo.EXTEND_REPEAT) ``` 從表面創建圖案。 我們將模式設置為`cairo.EXTEND_REPEAT`,這將導致圖案通過重復平鋪。 ```py cr.set_source(self.pt1) cr.rectangle(20, 20, 100, 100) cr.fill() ``` 在這里,我們繪制第一個矩形。 `set_source()`方法告訴 Cairo 上下文使用圖案作為繪圖源。 圖像圖案可能不完全適合形狀。 `rectangle()`創建一個矩形路徑。 最后,`fill()`方法用源填充路徑。 本章介紹了 PyCairo 的形狀和填充。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看