コメントで作られた私のポイントを説明するために、私はカイロ
CORRECTIONを使用して、その中にキャンバスや絵の具を作成するためにGtkDrawingArea
を使用quick'n'dirty私はPyGtkの例を投稿してみましょうPyGObject、それはのGtk + 3であるので、次のように例がある(主な違いは、代わりに、それはdraw
であり、カイロコンテキストが既にパラメータとして渡され、どのexpose
イベントがないことである):
#!/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()
良いと考えウィジェットはGtkDrawingAreaです。今はサンプルがありませんが、 'expose'イベントへの反応として、pycairoを使用して描画する必要があります。 – rodrigo
つまり、GtkDrawingAreaは他のフレームワークで埋め込むことができるコンテナだけですか? GTK +にはキャンバスが含まれていますか? – lhk
@rodrigo 'expose-event'シグナルは、[リファレンスマニュアル](http://developer.gnome.org/gtk3/3.3/ch25s02.html#id1413935)に従ってgtk3の' draw'シグナルに置き換えられました。 – jcollado