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

wxPython Discussion :

TxtCtrl, saisie de chifres et couleur successives [Python 2.X]


Sujet :

wxPython

  1. #1
    Membre averti
    Homme Profil pro
    retraité, actif ??
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : retraité, actif ??
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Par défaut TxtCtrl, saisie de chifres et couleur successives
    bonjour,

    Mon environnement:
    Debian Wheezy , wxPython 2.8 et python 2.7 .

    Je cherche à réaliser une saisie de chiffres et seulement des chiffres (ça c'est bon) et aussi qu'ils aient, chacun une couler différente lors de cet saisie (là c'est en friche)

    Je vous joins ce 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
    105
    106
    107
     
    # !/usr/bin/python
    # coding: utf-8
     
    import wx
     
    class Nbres(wx.Frame):
     
        def __init__(self, parent, titre):
            super(Nbres, self).__init__(parent, title=titre, size=(400, 100))
     
            self.dys_color=['RED','GREEN','BLUE']
            self.InitUi()
            self.Centre()
            self.Show()
     
     
        def InitUi(self):
     
            self.panel = wx.Panel(self, -1) 
            self.font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
            self.font.SetPointSize(21)
            self.nbre = 0
            #
            #-- le sizer final
            self.vbox = wx.BoxSizer(wx.VERTICAL)
     
            #
            #-- le premier.
            self.hbox_1 = wx.BoxSizer(wx.HORIZONTAL)
            #
            self.stat_texte = wx.StaticText(self.panel, label = "Premier nombre  ")
            self.stat_texte.SetFont(self.font)
            #
            self.hbox_1.Add(self.stat_texte, 0,flag = wx.LEFT, border = 8)
            self.le_nombre = wx.TextCtrl(self.panel,-1, "" ,style= wx.TE_RICH)
            self.le_nombre.SetFont(self.font)
            self.le_nombre.Bind(wx.EVT_CHAR, self.onCharEvent)
            self.hbox_1.Add(self.le_nombre, 1)
     
            # -- dans la boite
            #
            self.vbox.Add(self.hbox_1)
            #
            # boutons pour accord ou modifications
            #
            #  boite horizontale , puis les trois boutons    
            #
            self.hbox_3 = wx.BoxSizer(wx.HORIZONTAL)
            #
            self.sizer_btn = wx.GridSizer(1, 3)
            #
            self.btn1 = wx.Button(self.panel, label="A l'operation")
            self.btn2 = wx.Button(self.panel, label='Corriger')
            self.btn3 = wx.Button(self.panel, label='Quitter')
            #
            self.btn1.Bind(wx.EVT_BUTTON, self.Operation)
            self.btn2.Bind(wx.EVT_BUTTON, self.Corriger)
            self.btn3.Bind(wx.EVT_BUTTON, self.Je_quitte)
            #
            # emboiter
            self.sizer_btn.AddMany([self.btn1, self.btn2, self.btn3])
            self.hbox_3.Add(self.sizer_btn, 0, wx.ALL, 10)
            #
            self.vbox.Add(self.hbox_3)
     
     
            self.panel.SetSizer(self.vbox)
     
     
        def onCharEvent(self, event):       # voir wx.KeyEvent
     
            keycode = event.GetKeyCode()
            if keycode in range(48, 58):
                self.nbre = self.nbre + 1
                # car trois couleurs
                if self.nbre == 3:
                    #
                    #pour repartir à la première
                    #
                    self.nbre = 0
                self.le_nombre.SetForegroundColour(self.dys_color[self.nbre-1])  
                # tous les chiffres de la même couleur
                #
                # en remplaçant la ligne  précédente par celle-ci
                #self.le_nombre.SetStyle(self.nbre - 1, self.nbre, wx.TextAttr(self.dys_color[self.nbre -1]))
                # les chiffres ne changnet pas de couleur..
                #
                print self.nbre 
                event.Skip()
     
        def Operation(self , event):
    		print self.le_nombre.GetValue()
     
        def Je_quitte(self, event):
    		print('Bye')
    		self.Destroy()
     
        def Corriger(self, event):
    		self.le_nombre.SetValue('')
     
     
     
    if __name__ == '__main__':
        app = wx.PySimpleApp()
        Nbres(None, "nombre")
        app.MainLoop()
    La ligne 82 fait que tous les chiffres prennent la même couleur.
    Après recherches j'ai testé (ligne 86) SetStyle, attente déçue, tout reste noir..

    Je met cette bouée à l'eau et attends vos commentaires, suggestions et /ou propositions.

    NB: la taille et la succession des couleurs permettent une meilleure lecture pour un enfant "dyslexique,dypraxique ..."
    Pancrace

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 688
    Par défaut
    Salut,

    J'utiliserai plutôt .SetDefaultStyle.
    Votre code est tellement touffu que je ne suis pas sûr d'avoir compris ce que vous vouliez faire.
    Mon interprétation est qu'a l'entrée d'un nombre on change la couleur du texte "à venir".

    note: quand je dit "touffu", c'est qu'on pourrait regarder simplement ce détail là en se contentant d'écrire
    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
    import wx
     
    color_ix = 0
    COLORS = [ wx.RED, wx.GREEN, wx.BLUE ]
     
    def onCharEvent(event):
        global color_ix
        if 48 <= event.GetKeyCode() < 58:
               color_ix = (color_ix + 1) % len(COLORS)
               text.SetDefaultStyle(wx.TextAttr(COLORS[color_ix]))
        event.Skip()  
     
    app = wx.App(False)
    frame = wx.Frame(None)
    panel = wx.Panel(frame)
    text = wx.TextCtrl(panel,-1, "" ,size=(500,50), style= wx.TE_RICH)
    text.Bind(wx.EVT_CHAR, onCharEvent)
    frame.Show()
    app.MainLoop()
    Avec 5 fois moins de lignes, on y voit déjà plus clair non?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    retraité, actif ??
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : retraité, actif ??
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Par défaut 03/02/2015
    Merci pour la réponse, Wiztricks;

    Je n'avais pas pensé à la fonction modulo ..
    Je viens de teste votre code, hélas, je n'ai aucune couleur , les chiffres du nombre restent de couleur noir;

    Je vais poursuivre .

    Pancrace

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 688
    Par défaut
    Salut,

    wx est un peu galère.
    Essayez cette mouture, elle fonctionne sous Windows et Linux.
    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
    import wx
     
    color_ix = 0
    COLORS = [ wx.RED, wx.GREEN, wx.BLUE ]
     
    def onCharEvent(event):
        global color_ix
        code = event.GetKeyCode()
        if 48 <= code < 58:
            color_ix = (color_ix + 1) % len(COLORS)
            text.SetDefaultStyle(wx.TextAttr(COLORS[color_ix]))
        text.AppendText(chr(code))
     
    app = wx.App(False)
    frame = wx.Frame(None)
    panel = wx.Panel(frame)
    text = wx.TextCtrl(panel,-1, "" ,size=(500,50), style= wx.TE_MULTILINE|wx.TE_RICH2)
    text.Bind(wx.EVT_CHAR, onCharEvent)
    frame.Show()
    app.MainLoop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    retraité, actif ??
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : retraité, actif ??
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Par défaut ce jour 15:20 utc !!
    Je souscris wx est un peu galère,

    voici ma solution :
    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
    import wx
     
    color_ix = 0
    i = 0
    COLORS = [ wx.RED, wx.GREEN, wx.BLUE ]
     
    def onCharEvent(event):
        global color_ix
        if 48 <= event.GetKeyCode() < 58:
            color_ix = (color_ix + 1) % len(COLORS) 
            attr = wx.TextAttr(COLORS[color_ix])
            i = text.GetLastPosition()
            text.SetStyle(i-1,i,attr)
        event.Skip() 
     
     
    app = wx.App(False)
    frame = wx.Frame(None)
    panel = wx.Panel(frame)
    text = wx.TextCtrl(panel,-1,size=(100,40), style= wx.TE_MULTILINE)
    text.Bind(wx.EVT_CHAR, onCharEvent)
    frame.Show()
    app.MainLoop()
    Il y a ainsi deux possibilités, au choix.

    C'est d'avoir mis TE_MULTILINE et décalé de -1 la position du caractère. qui m'a sorti de la misère.

    Merci

    Pancrace

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/03/2009, 22h08
  2. [XSLT?][XForms?] Changer la couleur de fond selon la saisie
    Par Leauh dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 04/03/2009, 11h21
  3. Réponses: 3
    Dernier message: 03/10/2008, 01h13
  4. Mettre une couleur de fond à une zone de saisie.
    Par supertoms dans le forum IHM
    Réponses: 1
    Dernier message: 19/04/2008, 18h40
  5. Couleur d'un champ de saisie.
    Par jlb59 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/09/2007, 18h57

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