- PyGTK 教程
- PyGTK - 首頁
- PyGTK - 簡介
- PyGTK - 環境配置
- PyGTK - Hello World
- PyGTK - 重要類
- PyGTK - Window 類
- PyGTK - Button 類
- PyGTK - Label 類
- PyGTK - Entry 類
- PyGTK - 訊號處理
- PyGTK - 事件處理
- PyGTK - 容器
- PyGTK - Box 類
- PyGTK - ButtonBox 類
- PyGTK - Alignment 類
- PyGTK - EventBox 類
- PyGTK - Layout 類
- PyGTK - ComboBox 類
- PyGTK - ToggleButton 類
- PyGTK - CheckButton 類
- PyGTK - RadioButton 類
- PyGTK - MenuBar、Menu 和 MenuItem
- PyGTK - Toolbar 類
- PyGTK - Adjustment 類
- PyGTK - Range 類
- PyGTK - Scale 類
- PyGTK - Scrollbar 類
- PyGTK - Dialog 類
- PyGTK - MessageDialog 類
- PyGTK - AboutDialog 類
- PyGTK - 字型選擇對話方塊
- PyGTK - 顏色選擇對話方塊
- PyGTK - 檔案選擇對話方塊
- PyGTK - Notebook 類
- PyGTK - Frame 類
- PyGTK - AspectFrame 類
- PyGTK - TreeView 類
- PyGTK - Paned 類
- PyGTK - Statusbar 類
- PyGTK - ProgressBar 類
- PyGTK - Viewport 類
- PyGTK - Scrolledwindow 類
- PyGTK - Arrow 類
- PyGTK - Image 類
- PyGTK - DrawingArea 類
- PyGTK - SpinButton 類
- PyGTK - Calendar 類
- PyGTK - Clipboard 類
- PyGTK - Ruler 類
- PyGTK - 超時機制
- PyGTK - 拖放操作
- PyGTK 有用資源
- PyGTK - 快速指南
- PyGTK - 有用資源
- PyGTK - 討論
PyGTK - DrawingArea 類
DrawingArea 小部件呈現一個空白畫布,其中包含一個 gtk.gdk.Window,可以在其上繪製線條、矩形、弧線等物件。
PyGTK 使用 Cairo 庫進行此類繪圖操作。Cairo 是一個流行的二維向量圖形庫。它是用 C 語言編寫的,儘管它在大多數語言(如 C++、Java、Python、PHP 等)中都有繫結。Cairo 庫可用於在各種作業系統的標準輸出裝置上繪圖。它還可以用於建立 PDF、SVG 和 PostScript 檔案。
為了執行不同的繪圖操作,我們必須獲取目標輸出物件的裝置上下文。在本例中,由於繪圖出現在 gtk.DrawingArea 小部件上,因此獲取其中包含的 gdk.Window 的裝置上下文。此類具有一個 **cairo-create()** 方法,該方法返回裝置上下文。
area = gtk.DrawingArea() dc = area.window.cairo_create()
DrawingArea 小部件可以連線到基於其發出的以下訊號的回撥:
| Realize | 在小部件在特定顯示器上例項化時執行任何必要的動作。 |
| configure_event | 在小部件大小改變時執行任何必要的動作。 |
| expose_event | 當繪圖區域第一次出現在螢幕上,或者當它被另一個視窗覆蓋然後再次顯示(暴露)時,處理重新繪製小部件內容。 |
滑鼠和鍵盤事件也可以透過 **gtk.Widget 類的 add_events() 方法**來呼叫回撥。
尤其值得關注的是 expose-event 訊號,該訊號在 DrawingArea 畫布第一次出現時發出。從連線到 expose-event 訊號的回撥中呼叫在 Cairo 庫中定義的不同二維物件繪圖方法。這些方法在 Cairo 裝置上下文中繪製相應的物件。
以下是可用的繪圖方法:
dc.rectangle(x,y,w,h) - 在指定的左上角座標處繪製一個給定寬度和高度的矩形。
dc.arc(x,y,r,a1,a2) - 繪製一個具有給定半徑和兩個角度的圓弧。
dc.line(x1, y1, x2, y2) - 在兩對座標之間繪製一條線。
dc.line_to(x,y) - 從當前位置繪製一條線到 (x,y)。
dc.show_text(str) - 在當前游標位置繪製字串。
dc.stroke() - 繪製輪廓。
dc.fill() - 用當前顏色填充形狀。
dc.set_color_rgb(r,g,b) - 將輪廓和填充顏色設定為 r、g 和 b 值,範圍在 0.0 到 1.0 之間。
示例
下面的指令碼使用 Cairo 方法繪製不同的形狀和文字。
import gtk
import math
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Basic shapes using Cairo")
self.set_size_request(400, 250)
self.set_position(gtk.WIN_POS_CENTER)
self.connect("destroy", gtk.main_quit)
darea = gtk.DrawingArea()
darea.connect("expose-event", self.expose)
self.add(darea)
self.show_all()
def expose(self, widget, event):
cr = widget.window.cairo_create()
cr.set_line_width(2)
cr.set_source_rgb(0,0,1)
cr.rectangle(10,10,100,100)
cr.stroke()
cr.set_source_rgb(1,0,0)
cr.rectangle(10,125,100,100)
cr.stroke()
cr.set_source_rgb(0,1,0)
cr.rectangle(125,10,100,100)
cr.fill()
cr.set_source_rgb(0.5,0.6,0.7)
cr.rectangle(125,125,100,100)
cr.fill()
cr.arc(300, 50, 50,0, 2*math.pi)
cr.set_source_rgb(0.2,0.2,0.2)
cr.fill()
cr.arc(300, 200, 50, math.pi,0)
cr.set_source_rgb(0.1,0.1,0.1)
cr.stroke()
cr.move_to(50,240)
cr.show_text("Hello PyGTK")
cr.move_to(150,240)
cr.line_to(400,240)
cr.stroke()
PyApp()
gtk.main()
上面的指令碼將生成以下輸出: