IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Apprendre à utiliser le module Python PyGTK 2.0


précédentsommairesuivant

Annexe B - Code Examples

scribblesimple.py

 
Sélectionnez
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.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# exemple scribblesimple.py

 # GTK - The GIMP Toolkit
 # Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
 # Copyright (C) 2001-2004 John Finlay
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Library General Public
 # License as published by the Free Software Foundation; either
 # version 2 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 # Library General Public License for more details.
 #
 # You should have received a copy of the GNU Library General Public
 # License along with this library; if not, write to the
 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.


import pygtk
pygtk.require('2.0')
import gtk

# Pixmap d'arrière-plan pour la zone de dessin
pixmap = None

# Création d'un nouveau pixmap d'arrière-plan de la taille voulue
def configure_event(widget, event):
    global pixmap

    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

# Redessine l'écran à partir du pixmap d'arrière-plan
def expose_event(widget, event):
    x , y, largeur, hauteur = event.area
    widget.window.draw_drawable(widget.get_style().fg_gc[gtk.STATE_NORMAL],
                                pixmap, x, y, x, y, largeur, hauteur)
    return False

# Dessine un rectangle sur l'écran
def brosse_dessin(widget, x, y):
    rect = (int(x-5), int(y-5), 10, 10)
    pixmap.draw_rectangle(widget.get_style().black_gc, True,
                          rect[0], rect[1], rect[2], rect[3])
    widget.queue_draw_area(rect[0], rect[1], rect[2], rect[3])

def bouton_press_event(widget, event):
    if event.button == 1 and pixmap != None:
        brosse_dessin(widget, event.x, event.y)
    return True

def motion_notify_event(widget, event):
    if event.is_hint:
        x, y, etat = event.window.get_pointer()
    else:
        x = event.x
        y = event.y
        etat = event.state
    
    if etat & gtk.gdk.BUTTON1_MASK and pixmap != None:
        brosse_dessin(widget, x, y)
  
    return True

def main():
    fenêtre = gtk.Window(gtk.WINDOW_TOPLEVEL)
    fenetre.set_name ("Test Input")

    boitev = gtk.VBox(False, 0)
    fenetre.add(boitev)
    boitev.show()

    fenetre.connect("destroy", lambda w: gtk.main_quit())

    # Création de la zone de dessin
    zone_dessin = gtk.DrawingArea()
    zone_dessin.set_size_request(200, 200)
    boitev.pack_start(zone_dessin, True, True, 0)

    zone_dessin.show()

    # Signaux utilisés pour gérer le pixmap hors écran
    zone_dessin.connect("expose_event", expose_event)
    zone_dessin.connect("configure_event", configure_event)

    # Signaux d'événements
    zone_dessin.connect("motion_notify_event", motion_notify_event)
    zone_dessin.connect("button_press_event", bouton_press_event)

    zone_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)

    #. Et un bouton quitter
    bouton = gtk.Button("Quit")
    boitev.pack_start(bouton, False, False, 0)

    bouton.connect_object("clicked", lambda w: w.destroy(), fenêtre)
    bouton.show()

    fenetre.show()

    gtk.main()

    return 0

if __name__ == "__main__":
    main()

précédentsommairesuivant

Copyright © 2005 John Finlay. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.