I'm currently learning GTK+ via PyGobject and need something like a canvas. I already searched the docs and found two widgets that seem likely to do the job: GtkDrawingArea and GtkLayout. I need a few basic functions like fillrect or drawline ... In fact these functions are available from c but I couldn't find directions how to use them from python. Can you recommend a tutorial or manpage that deals with their python equivalents ?
If you have a better idea how to get something similar to a canvas every tip would be appreciated. I'm still learning and as long as it can be embedded within my Gtk application I'd be content with any solution.
In order to illustrate my points made in the comments, let me post a quick'n'dirty PyGtk example that uses a GtkDrawingArea
to create a canvas and paints into it using cairo
CORRECTION: you said PyGObject, that is Gtk+3, so the example is as follows (the main difference is that there is no expose
event, instead it is draw
and a cairo context is already passed as a parameter):
#!/usr/bin/python
from gi.repository import Gtk
import cairo
import mathdef 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()