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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec Python Discussion :

Déselectionner le texte d'une Entry avant qu'il n'apparaisse


Sujet :

GTK+ avec Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut Déselectionner le texte d'une Entry avant qu'il n'apparaisse
    Bonsoir.

    Je voudrais avoir le comportement suivant : dans une DrawingArea, lorsque j'appuie sur le clavier (0-9 ou lettre), une Entry apparaît, reprenant le premier caractère que j'ai tapé, puis me permettant de continuer un texte ou un nombre.

    J'ai réussi à le faire mais la première fois que l'Entry apparaît, le premier caractère est sélectionné, donc il est effacé lorsque je tape la suite.

    Cela ne se reproduit pas les fois suivantes que je tape un nouveau texte.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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()
    Merci pour toute aide.

    --
    F. Delente

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Par défaut
    Bonjour et désolé du retard,

    Je sais que le message date un petit peu (1 mois) mais si jamais quelqu'un a le même problème, sachez qu'il va bientôt disparaître...

    Je n'ai modifier qu'une fonction et j'en est ajouté une autre, voila le code qui fonctionne et qui affiche le texte déselectionné prêt à accueillir de nouveaux caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        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.interfacePourTextes.show_all()
              gobject.idle_add(self.suite, chr(event.keyval))
     
        def suite(self, char):
            self.zonePourTextes.set_text(char)
            self.zonePourTextes.select_region(len(char),len(char))
    Ne pas oublier d'ajouter en amorce du code :

    J'espère que cette solution vous conviendra et n'hésitez pas à revenir

    Mickael

Discussions similaires

  1. [RegEx] Limiter à une balise avant le texte ciblé
    Par marcmarc dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2014, 19h28
  2. Réponses: 1
    Dernier message: 12/06/2012, 09h45
  3. creer scrollbar qui affiche le texte d'une entry
    Par hulkyoann dans le forum Tkinter
    Réponses: 11
    Dernier message: 19/12/2009, 19h07
  4. [XL-2007] texte dans une cellule si la cellule avant est colorié
    Par freko dans le forum Excel
    Réponses: 7
    Dernier message: 11/09/2009, 11h14
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo