#!/usr/bin/env python # -*- coding: iso-8859-1 -*- # # written by Mark Muzenhardt <mark.muzenhardt@googlemail.com> # published under BSD-License import pygtk pygtk . require ( '2.0' ) import gtk class DrawingAreaExample : def __init__ ( self ): window = gtk . Window ( gtk . WINDOW_TOPLEVEL ) window . set_title ( "Drawing Area Example" ) window . connect ( "destroy" , lambda w : gtk . main_quit ()) self . area = gtk . DrawingArea () self . area . set_size_request ( 400 , 300 ) window . add ( self . area ) self . area . connect ( "expose-event" , self . area_expose_cb ) self . area . show () window . show () self . do_print () def area_expose_cb ( self , area , event ): self . style = self . area . get_style () self . gc = self . style . fg_gc [ gtk . STATE_NORMAL ] self . draw_text () return True def do_print ( self ): print_op = gtk . PrintOperation () print_op . set_n_pages ( 1 ) print_op . connect ( "draw_page" , self . print_text ) res = print_op . run ( gtk . PRINT_OPERATION_ACTION_PRINT_DIALOG , None ) def draw_text ( self ): self . pangolayout = self . area . create_pango_layout ( "" ) self . format_text () self . area . window . draw_layout ( self . gc , 10 , 10 , self . pangolayout ) return def print_text ( self , operation = None , context = None , page_nr = None ): self . pangolayout = context . create_pango_layout () self . format_text () cairo_context = context . get_cairo_context () cairo_context . show_layout ( self . pangolayout ) return def format_text ( self ): self . pangolayout . set_text ( unicode ( """ Dies ist ein Text-Test. Er funktioniert gut und zeigt, dass auch PyGTK das drucken kann, was man auf eine DrawingArea geschrieben hat. Anwendungen dafür gibt es genug! """ , "latin-1" )) def main (): gtk . main () return 0 if __name__ == "__main__" : DrawingAreaExample () main ()