#!/usr/bin/env python # example drawingarea.py import gtk import GDK import gtkxpm import operator import time import string class DrawingAreaExample: def __init__(self): window = gtk.GtkWindow(gtk.WINDOW_TOPLEVEL) window.set_title("Drawing Area Example") window.connect("destroy", gtk.mainquit) gtk.push_rgb_visual() self.area = gtk.GtkDrawingArea() gtk.pop_visual() self.area.size(400, 300) window.add(self.area) self.area.connect("expose-event", self.area_expose_cb) self.area.show() window.show() def area_expose_cb(self, area, event): self.style = self.area.get_style() self.gc = self.style.fg_gc[gtk.STATE_NORMAL] self.font = self.style.font self.draw_point(10,10) self.draw_points(110, 10) self.draw_line(210, 10) self.draw_lines(310, 10) self.draw_segments(10, 100) self.draw_rectangles(110, 100) self.draw_arcs(210, 100) self.draw_pixmap(310, 100) self.draw_polygon(10, 200) self.draw_rgb_image(110, 200) return gtk.TRUE def draw_point(self, x, y): self.area.draw_point(self.gc, x+300, y+300) self.area.draw_string(self.font, self.gc, x+5, y+60, "Point") return def draw_points(self, x, y): points = [(x+10,y+10), (x+10,y), (x+40,y+30), (x+30,y+10), (x+50,y+10)] self.area.draw_points(self.gc, points) self.area.draw_string(self.font, self.gc, x+5, y+60, "Points") return def draw_line(self, x, y): self.area.draw_line(self.gc, x+10, y+10, x+20, y+30) self.area.draw_string(self.font, self.gc, x+5, y+60, "Line") return def draw_lines(self, x, y): points = [(x+10,y+10), (x+10,y), (x+40,y+30), (x+30,y+10), (x+50,y+10)] self.area.draw_lines(self.gc, points) self.area.draw_string(self.font, self.gc, x+5, y+60, "Lines") return def draw_segments(self, x, y): segments = ((x+20,y+10, x+20,y+70), (x+60,y+10, x+60,y+70), (x+10,y+30 , x+70,y+30), (x+10, y+50 , x+70, y+50)) self.area.draw_segments(self.gc, segments) self.area.draw_string(self.font, self.gc, x+5, y+90, "Segments") return def draw_rectangles(self, x, y): self.area.draw_rectangle(self.gc, gtk.FALSE, x, y, 80, 70) self.area.draw_rectangle(self.gc, gtk.TRUE, x+10, y+10, 20, 20) self.area.draw_rectangle(self.gc, gtk.TRUE, x+50, y+10, 20, 20) self.area.draw_rectangle(self.gc, gtk.TRUE, x+20, y+50, 40, 10) self.area.draw_string(self.font, self.gc, x+5, y+90, "Rectangles") return def draw_arcs(self, x, y): self.area.draw_arc(self.gc, gtk.FALSE, x+10, y, 70, 70, 0, 360*64) self.area.draw_arc(self.gc, gtk.TRUE, x+30, y+20, 10, 10, 0, 360*64) self.area.draw_arc(self.gc, gtk.TRUE, x+50, y+20, 10, 10, 0, 360*64) self.area.draw_arc(self.gc, gtk.TRUE, x+30, y+10, 30, 50, 210*64, 120*64) self.area.draw_string(self.font, self.gc, x+5, y+90, "Arcs") return def draw_pixmap(self, x, y): pixmap, mask = gtk.create_pixmap_from_xpm_d( self.area, self.style.bg[gtk.STATE_NORMAL], gtkxpm.gtk_xpm) self.area.draw_pixmap(self.gc, pixmap, 0, 0, x+15, y+25, pixmap.width, pixmap.height) self.area.draw_string(self.font, self.gc, x+5, y+90, "Pixmap") return def draw_polygon(self, x, y): points = [(x+10,y+60), (x+10,y+20), (x+40,y+70), (x+30,y+30), (x+50,y+40)] self.area.draw_polygon(self.gc, gtk.TRUE, points) self.area.draw_string(self.font, self.gc, x+5, y+90, "Polygon") return def draw_rgb_image(self, x, y): b = 80*3*80*['\0'] for i in range(80): for j in range(80): b[3*80*i+3*j] = chr(255-i%80) b[3*80*i+3*j+1] = chr(255-abs(i-j)%80) b[3*80*i+3*j+2] = chr(255-j%80) buff = string.join(b, '') self.area.draw_rgb_image(self.gc, x, y, 80, 80, GDK.RGB_DITHER_NONE, buff, -1) self.area.draw_text(self.font, self.gc, x+5, y+90, "RGB Image") return def main(): gtk.mainloop() return 0 if __name__ == "__main__": DrawingAreaExample() main()