Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python GTK+ Canvas

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.

like image 296
lhk Avatar asked Dec 22 '11 19:12

lhk


1 Answers

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 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()
like image 152
rodrigo Avatar answered Nov 06 '22 05:11

rodrigo