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.
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
(
):
fenetre =
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
(
), fenetre)
bouton.show
(
)
fenetre.show
(
)
gtk.main
(
)
return
0
if
__name__
=
=
"
__main__
"
:
main
(
)