1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| #! /usr/bin/env python
# -*- coding:Latin-1 -*-
# Animer un objet avec PyGTK avec rémanence
import gtk
import gobject
pixmap = None
def configure_event(widget, event):
global pixmap
# Creation d'un nouveau pixmap d'arriere-plan de la taille voulue
x, y, largeur, hauteur = widget.get_allocation()
pixmap = gtk.gdk.Pixmap(widget.window, largeur, hauteur)
pixmap.draw_rectangle(widget.get_style().white_gc,
True, 0, 0, largeur, hauteur)
return True
def motion_event(widget, event):
"Detection des mouvements"
xy = widget.get_pointer()
gc = widget.get_style().fg_gc[gtk.STATE_NORMAL]
pixmap.draw_point(gc, xy[0], xy[1])
return True
def expose_event(widget, event):
"Expose"
xy = widget.get_pointer()
x, y, largeur, hauteur = event.area
gc = widget.get_style().fg_gc[gtk.STATE_NORMAL]
widget.window.draw_drawable(gc, pixmap, x, y, x, y, largeur, hauteur)
# On colorie la balle en rouge en passant le contexte en rouge
gc.set_rgb_fg_color(gtk.gdk.color_parse("red"))
dessin.window.draw_arc(gc, True, xy[0] - 25, xy[1] - 25,
50, 50, 0, 360 * 64)
# On redessine en noir (autre methode en donnant les valeurs RGB)
gc.set_rgb_fg_color(gtk.gdk.Color(0, 0, 0))
widget.queue_draw_area(xy[0] - 25, xy[1] - 25, 50, 50)
return False
window = gtk.Window()
window.set_title("Animation PyGTK")
window.connect("destroy", gtk.main_quit)
dessin = gtk.DrawingArea()
dessin.set_size_request(400, 400)
dessin.connect("motion_notify_event", motion_event)
dessin.connect("configure_event", configure_event)
dessin.connect("expose_event", expose_event)
dessin.set_events(gtk.gdk.EXPOSURE_MASK
| gtk.gdk.LEAVE_NOTIFY_MASK
| gtk.gdk.BUTTON_PRESS_MASK
| gtk.gdk.POINTER_MOTION_MASK
| gtk.gdk.POINTER_MOTION_HINT_MASK)
bouton1 = gtk.Button("Quitter")
bouton1.connect("clicked", gtk.main_quit)
vbox1 = gtk.VBox(False, 3)
vbox1.pack_start(dessin)
vbox1.pack_end(bouton1)
window.add(vbox1)
window.show_all()
gtk.main() |
Partager