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
| #!/usr/bin/python
#-*- coding: utf-8 -*-
import gtk
import math
import cairo
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Simple drawing")
self.resize(230, 150)
self.set_position(gtk.WIN_POS_CENTER)
self.connect("destroy", gtk.main_quit)
darea = gtk.DrawingArea()
darea.connect("expose-event", self.expose)
darea.connect("key-press-event", self.toucheEnfoncee)
darea.add_events(gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK |
gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.KEY_PRESS_MASK | gtk.gdk.KEY_RELEASE_MASK)
darea.set_flags(gtk.CAN_FOCUS)
self.add(darea)
self.show_all()
# interface pour entrer un nombre lorsqu'on a appuyé sur un chiffre
self.interfacePourNombres = gtk.Window()
self.interfacePourNombres.set_modal(True)
self.zonePourNombres = gtk.Entry(3)
self.zonePourNombres.set_flags(gtk.CAN_DEFAULT)
self.zonePourNombres.grab_default()
self.zonePourNombres.select_region(0,0)
self.zonePourNombres.set_activates_default(True)
self.zonePourNombres.set_width_chars(5)
self.zonePourNombres.set_position(1)
# self.zonePourNombres.set_override_mode(False)
self.zonePourNombres.size_allocate((0, 0, 100, 20))
self.zonePourNombres.connect("activate", self.obtenirLeNombre)
self.zonePourNombres.show()
self.interfacePourNombres.add(self.zonePourNombres)
# interface pour entrer un texte lorsqu'on a appuyé sur une lettre ou '/'
self.interfacePourTextes = gtk.Window()
self.interfacePourTextes.set_modal(True)
self.zonePourTextes = gtk.Entry(64)
self.zonePourTextes.set_flags(gtk.CAN_DEFAULT)
self.zonePourTextes.grab_default()
self.zonePourTextes.select_region(0,0)
self.zonePourTextes.set_activates_default(True)
self.zonePourTextes.set_width_chars(68)
self.zonePourTextes.set_position(1)
# self.zonePourTextes.set_override_mode(False)
self.zonePourTextes.size_allocate((0, 0, 100, 20))
self.zonePourTextes.connect("activate", self.obtenirLeTexte)
self.zonePourTextes.show()
self.interfacePourTextes.add(self.zonePourTextes)
def toucheEnfoncee(self, widget, event):
print "toucheEnfoncee : "+str(event.keyval)
if event.keyval >= ord('1') and event.keyval <= ord('9'):
self.zonePourNombres.set_text(chr(event.keyval))
self.zonePourNombres.set_position(1)
self.zonePourNombres.select_region(0,0)
self.interfacePourNombres.show_all()
elif event.keyval < 255:
if chr(event.keyval).isalnum() or event.keyval == ord('/'):
self.zonePourTextes.set_text(chr(event.keyval))
self.zonePourTextes.set_position(1)
self.zonePourTextes.select_region(0,0)
self.interfacePourTextes.show_all()
def obtenirLeNombre(self, widget):
self.interfacePourNombres.hide()
print "nombre obtenu : "+str(widget.get_text())
def obtenirLeTexte(self, widget):
self.interfacePourTextes.hide()
print "texte obtenu : "+str(widget.get_text())
def expose(self, widget, event):
cr = widget.window.cairo_create()
cr.set_source_rgb(0, 0, 0)
cr.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
cr.set_font_size(48)
w = self.allocation.width
h = self.allocation.height
cr.move_to(w/2, h/2)
cr.show_text("A")
xbearing, ybearing, width, height, xadvance, yadvance = cr.text_extents("A")
cr.rectangle(w/2, h/2-height, width, height)
cr.stroke()
PyApp()
gtk.main() |
Partager