1 # -*- coding: utf-8 -*-
7 class SemiCirculo(gtk.DrawingArea):
9 gtk.DrawingArea.__init__(self)
10 self.connect("expose-event", self.expose)
12 def expose(self, widget, event):
13 #Creamos un contexto de dibujo cairo
14 self.context = widget.window.cairo_create()
16 #Ajustamos el tamaño del contexto al del widget
17 self.context.rectangle(event.area.x, event.area.y,
18 event.area.width, event.area.height)
21 #Llamamos a la función de dibujado
22 self.draw(self.context)
25 def draw(self, context):
26 #Adquirimos las coordenadas de origen
27 #y el tamaño del rectangulo del widget,
28 #situando en las variable x e y
29 #el centro del rectangulo.
30 rect = self.get_allocation()
31 x = rect.x + rect.width / 2
32 y = rect.y + rect.height / 2
35 radius = min(rect.width / 2, rect.height / 2) - 5
38 mx = cairo.Matrix(-1,0,0,-1,0,0)
39 context.translate(x, y)
41 context.arc(0, 0, radius/2, 0,(1 * math.pi))
42 context.arc(0, 0, radius/10, 0,(2 * math.pi))
44 #Elegimos el color de relleno y lo vertemos
45 context.set_source_rgb(0.7, 0.8, 0.1)
46 context.fill_preserve()
48 #Elegimos el color del borde y lo dibujamos
49 context.set_source_rgb(0, 0, 0)
54 semicirculo = SemiCirculo()
56 # Añadimos nuestro widget a la ventana
57 window.add(semicirculo)
58 # Conectamos el evento destroy con la salida del bucle de eventos
59 window.connect("destroy", gtk.main_quit)
60 # Dibujamos toda la ventana
63 # Comenzamos el bucle de eventos
66 if __name__ == "__main__":