爲了說明在意見中提出我的觀點,讓我張貼的使用GtkDrawingArea
創建一個畫布,畫成其使用開羅
修正一個quick'n'dirty PyGTK的例子:你說PyGObject,即GTK + 3,所以示例如下(主要的區別是,沒有expose
事件,相反,它是draw
和開羅上下文作爲參數已經通過):
#!/usr/bin/python
from gi.repository import Gtk
import cairo
import math
def OnDraw(w, cr):
cr.set_source_rgb(1, 1, 0)
cr.arc(320,240,100, 0, 2*math.pi)
cr.fill_preserve()
cr.set_source_rgb(0, 0, 0)
cr.stroke()
cr.arc(280,210,20, 0, 2*math.pi)
cr.arc(360,210,20, 0, 2*math.pi)
cr.fill()
cr.set_line_width(10)
cr.set_line_cap(cairo.LINE_CAP_ROUND)
cr.arc(320, 240, 60, math.pi/4, math.pi*3/4)
cr.stroke()
w = Gtk.Window()
w.set_default_size(640, 480)
a = Gtk.DrawingArea()
w.add(a)
w.connect('destroy', Gtk.main_quit)
a.connect('draw', OnDraw)
w.show_all()
Gtk.main()
的apropriate小部件是GtkDrawingArea。我現在沒有任何樣本,但是您應該使用pycairo來繪製它,作爲對「揭露」事件的反應。 – rodrigo 2011-12-22 19:19:36
這意味着GtkDrawingArea只是一個可以被其他框架填充的容器嗎? GTK +中是否包含任何畫布? – lhk 2011-12-22 19:33:13
@rodrigo根據[參考手冊](http://developer.gnome.org/gtk3/3.3/ch25s02.html#id1413935),'expose-event'信號已被gtk3中的'draw'信號取代。 – jcollado 2011-12-22 20:00:42