[wxPython ]Problème de Validator pour TxtCtrl déclenché par un bouton
9 réponses
loic.mahe
J'essaye d'utilser un Validator pour un TxtCtrl place dand un Panel
avec un bouton
Je souhaite que ce bouton déclenche la validation des données
contenues dans le TxtCtrl
Mais je n'y parviens pas, même après avoir regardé la documentatio
wxPython, la demo wxPython et fait quelques recherches sur Google.
Mon problème est que je ne parviens pas a appeler la méthode
Validate() à partir de mon gestionnaire de bouton.
Quand j'essaye de lancer le programme, j'ai toujours une erreur du
type :
AttributeError: 'Frame' object has no attribute 'Validate'
J'ai essayer d'appeler la méthode Validate() à partir, du bouton, du
panel et à partir d'autres objets, mais sans success pour l'instant.
Si quelqu'un à une idée à propos de mon problème, un morceau de code
qui fonctionne
Avec un panel et un bouton customisé (différent du bouton OK) je suis
preneur !!!
Merci d'avance pour votre aide !!!
Loïc
Voici le code:
#!/usr/bin/env python
import wx
class TextObjectValidator(wx.PyValidator):
def __init__(self):
print "init"
wx.PyValidator.__init__(self)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Michel Claveau, résurectionné d'outre-bombe informatique
Bonsoir !
Je tout débute en wxPython ; je ne comprends rien à la doc, qui n'est pas en français, ni en occitan. Alors, petit à petit, je tente de me faire des exemples de codes, à réutiliser. C'est long, et galère, mais, j'ai réussi à faire deux ou trois trucs (mini-mini).
Je ne sais pas, non plus, ce que tu entend par "validator".
Cependant, j'ai fait un essai, de saisie d'un champ, avec récupération du contenu ; peut-être cet exemple t'aidera-t'il ? Alors le voilà :
def visu(self, event): val = self.fieldmem.GetString(0, 255) wx.MessageBox(str(val), "La valeur saisie est : ")
def quitter(self, event): self.Destroy()
class MyApp(wx.App): def OnInit(self): frame = MyFrame(None, -1, 'Ma fenetre avec wxPython', (20,200), (300,130)) frame.Show(True) self.SetTopWindow(frame) return True
app = MyApp(wx.App) app.MainLoop()
Bonsoir !
Je tout débute en wxPython ; je ne comprends rien à la doc, qui n'est pas en
français, ni en occitan.
Alors, petit à petit, je tente de me faire des exemples de codes, à
réutiliser.
C'est long, et galère, mais, j'ai réussi à faire deux ou trois trucs
(mini-mini).
Je ne sais pas, non plus, ce que tu entend par "validator".
Cependant, j'ai fait un essai, de saisie d'un champ, avec récupération du
contenu ; peut-être cet exemple t'aidera-t'il ? Alors le voilà :
Je tout débute en wxPython ; je ne comprends rien à la doc, qui n'est pas en français, ni en occitan. Alors, petit à petit, je tente de me faire des exemples de codes, à réutiliser. C'est long, et galère, mais, j'ai réussi à faire deux ou trois trucs (mini-mini).
Je ne sais pas, non plus, ce que tu entend par "validator".
Cependant, j'ai fait un essai, de saisie d'un champ, avec récupération du contenu ; peut-être cet exemple t'aidera-t'il ? Alors le voilà :
def visu(self, event): val = self.fieldmem.GetString(0, 255) wx.MessageBox(str(val), "La valeur saisie est : ")
def quitter(self, event): self.Destroy()
class MyApp(wx.App): def OnInit(self): frame = MyFrame(None, -1, 'Ma fenetre avec wxPython', (20,200), (300,130)) frame.Show(True) self.SetTopWindow(frame) return True
app = MyApp(wx.App) app.MainLoop()
ardechou
Salut voici une réponse pour que ton programme marche , enfin saches que c'est ma méthode , il doit y en avoir d'autres .....
#***************************************************************** # tu utilises import wx , pas moi donc je l'ai remplacé # ça me permet de ne pas utiliser wx. donc d'appeler directement les wxFrame, # wxPanel, wxButton ainsi de suite from wxPython.wx import * import time
Voilà , je pense que ça marche , chez moi avec python 2.2 pas de problème
Salut
voici une réponse pour que ton programme marche , enfin saches que
c'est ma méthode , il doit y en avoir d'autres .....
#*****************************************************************
# tu utilises import wx , pas moi donc je l'ai remplacé
# ça me permet de ne pas utiliser wx. donc d'appeler directement les
wxFrame,
# wxPanel, wxButton ainsi de suite
from wxPython.wx import *
import time
Salut voici une réponse pour que ton programme marche , enfin saches que c'est ma méthode , il doit y en avoir d'autres .....
#***************************************************************** # tu utilises import wx , pas moi donc je l'ai remplacé # ça me permet de ne pas utiliser wx. donc d'appeler directement les wxFrame, # wxPanel, wxButton ainsi de suite from wxPython.wx import * import time
Michel Claveau, résurectionné d'outre-bombe informatique
Bonjour !
J'utilise wx, simplement parce que c'est comme ça dans la dernière version de wxPython. Et, perso, je déteste le "from XXX import *" car je suis déjà tombé sur des conflits de noms de fonctions.
Sinon, mon exemple fonctionnait chez moi (P2.3 & wxPython 2.5.1.5) ; reste à savoir cela (ta version et/ou la mienne) servira à Lo?c Mah?
J'utilise wx, simplement parce que c'est comme ça dans la dernière version
de wxPython. Et, perso, je déteste le "from XXX import *" car je suis déjà
tombé sur des conflits de noms de fonctions.
Sinon, mon exemple fonctionnait chez moi (P2.3 & wxPython 2.5.1.5) ; reste
à savoir cela (ta version et/ou la mienne) servira à Lo?c Mah?
J'utilise wx, simplement parce que c'est comme ça dans la dernière version de wxPython. Et, perso, je déteste le "from XXX import *" car je suis déjà tombé sur des conflits de noms de fonctions.
Sinon, mon exemple fonctionnait chez moi (P2.3 & wxPython 2.5.1.5) ; reste à savoir cela (ta version et/ou la mienne) servira à Lo?c Mah?
Michel Claveau, résurectionné d'outre-bombe informatique
Bonjour !
Je vois, avec effarement, qu'il me reste énormément de choses à comprendre, avec wxPython. et, sans doc utilisable (française), ça va pas être triste !
Aussi, je me permet quelques questions : - Pourquoi intercepter les caractères inférieurs à l'espace ? Si l'utilisateur se trompe, en saisie, pourra-t'il utiliser le backspace (chr(8)) ? - A quoi servent TransferToWindow(self), TransferFromWindow(self) et Clone(self) (et autres) ? - Pourquoi utiliser chr(70), plutôt que 'F' ? - Que se passera-t'il, si l'utilisateur tente de taper (par mégarde) des espaces, au milieu des chiffres ? il risque d'être bloqué. - A quoi sert le chr(128) lors de la mise en place du validator=FloatValidator ?
Bref, je ne comprend pas grand chose...
Merci quand même, car j'ai réussi (par miracle ?) à adapter ton code à mon exemple, mais cela ne fonctionne qu'à peu près (suffisamment pour que j'essaie de comprendre) (rappel : wxPython 2.5.1.5 & P2.3) :
def visu(self, event): val = float(self.fieldmem.GetString(0, 255)) wx.MessageBox(str(val), "La valeur saisie est : ")
def quitter(self, event): self.Destroy()
class MyApp(wx.App): def OnInit(self): frame = MyFrame(None, -1, 'Ma fenetre avec wxPython', (20,200), (300,130)) frame.Show(True) self.SetTopWindow(frame) return True
app = MyApp(wx.App) app.MainLoop()
Bonjour !
Je vois, avec effarement, qu'il me reste énormément de choses à comprendre,
avec wxPython. et, sans doc utilisable (française), ça va pas être triste !
Aussi, je me permet quelques questions :
- Pourquoi intercepter les caractères inférieurs à l'espace ? Si
l'utilisateur se trompe, en saisie, pourra-t'il utiliser le backspace
(chr(8)) ?
- A quoi servent TransferToWindow(self), TransferFromWindow(self) et
Clone(self) (et autres) ?
- Pourquoi utiliser chr(70), plutôt que 'F' ?
- Que se passera-t'il, si l'utilisateur tente de taper (par mégarde) des
espaces, au milieu des chiffres ? il risque d'être bloqué.
- A quoi sert le chr(128) lors de la mise en place du
validator=FloatValidator ?
Bref, je ne comprend pas grand chose...
Merci quand même, car j'ai réussi (par miracle ?) à adapter ton code à mon
exemple, mais cela ne fonctionne qu'à peu près (suffisamment pour que
j'essaie de comprendre) (rappel : wxPython 2.5.1.5 & P2.3) :
Je vois, avec effarement, qu'il me reste énormément de choses à comprendre, avec wxPython. et, sans doc utilisable (française), ça va pas être triste !
Aussi, je me permet quelques questions : - Pourquoi intercepter les caractères inférieurs à l'espace ? Si l'utilisateur se trompe, en saisie, pourra-t'il utiliser le backspace (chr(8)) ? - A quoi servent TransferToWindow(self), TransferFromWindow(self) et Clone(self) (et autres) ? - Pourquoi utiliser chr(70), plutôt que 'F' ? - Que se passera-t'il, si l'utilisateur tente de taper (par mégarde) des espaces, au milieu des chiffres ? il risque d'être bloqué. - A quoi sert le chr(128) lors de la mise en place du validator=FloatValidator ?
Bref, je ne comprend pas grand chose...
Merci quand même, car j'ai réussi (par miracle ?) à adapter ton code à mon exemple, mais cela ne fonctionne qu'à peu près (suffisamment pour que j'essaie de comprendre) (rappel : wxPython 2.5.1.5 & P2.3) :
def visu(self, event): val = float(self.fieldmem.GetString(0, 255)) wx.MessageBox(str(val), "La valeur saisie est : ")
def quitter(self, event): self.Destroy()
class MyApp(wx.App): def OnInit(self): frame = MyFrame(None, -1, 'Ma fenetre avec wxPython', (20,200), (300,130)) frame.Show(True) self.SetTopWindow(frame) return True
app = MyApp(wx.App) app.MainLoop()
Rostok
Je vais certainement te décevoir
Michel Claveau, résurectionné d'outre-bombe informatique wrote:
Bonjour !
Je vois, avec effarement, qu'il me reste énormément de choses à comprendre, avec wxPython. et, sans doc utilisable (française), ça va pas être triste !
Aussi, je me permet quelques questions : - Pourquoi intercepter les caractères inférieurs à l'espace ? Si l'utilisateur se trompe, en saisie, pourra-t'il utiliser le backspace (chr(8)) ? oui
pkoi chai plus !
- A quoi servent TransferToWindow(self), TransferFromWindow(self) et Clone(self) (et autres) ? Je ne sais plus. Mais si je me souviens bien j'ai pompé tout ca sur le
site wiki python fait une recherche sur google tu devrais trouvé. Cerise : c'est en francais !!!
- Pourquoi utiliser chr(70), plutôt que 'F' ? chais plus
- Que se passera-t'il, si l'utilisateur tente de taper (par mégarde) des espaces, au milieu des chiffres ? il risque d'être bloqué. non ca marche, mais c'est vrai qu'il y a quelques bugs. Je viens de
m'appercevoir que d et e passe entre les chiffres
Je suis allé tres (trop)vite en programmant, pour une petite appli simple
- A quoi sert le chr(128) lors de la mise en place du validator=FloatValidator ? c'est pour mon appli c'est le caractère "Euro" et j'ai surtout un bug
dans ce cas la car il faut absolument effacer le symbole euro pour modifier
A+
Je vais certainement te décevoir
Michel Claveau, résurectionné d'outre-bombe informatique wrote:
Bonjour !
Je vois, avec effarement, qu'il me reste énormément de choses à comprendre,
avec wxPython. et, sans doc utilisable (française), ça va pas être triste !
Aussi, je me permet quelques questions :
- Pourquoi intercepter les caractères inférieurs à l'espace ? Si
l'utilisateur se trompe, en saisie, pourra-t'il utiliser le backspace
(chr(8)) ?
oui
pkoi chai plus !
- A quoi servent TransferToWindow(self), TransferFromWindow(self) et
Clone(self) (et autres) ?
Je ne sais plus. Mais si je me souviens bien j'ai pompé tout ca sur le
site wiki python fait une recherche sur google tu devrais trouvé. Cerise
: c'est en francais !!!
- Pourquoi utiliser chr(70), plutôt que 'F' ?
chais plus
- Que se passera-t'il, si l'utilisateur tente de taper (par mégarde) des
espaces, au milieu des chiffres ? il risque d'être bloqué.
non ca marche, mais c'est vrai qu'il y a quelques bugs. Je viens de
m'appercevoir que d et e passe entre les chiffres
Je suis allé tres (trop)vite en programmant, pour une petite appli simple
- A quoi sert le chr(128) lors de la mise en place du
validator=FloatValidator ?
c'est pour mon appli c'est le caractère "Euro" et j'ai surtout un bug
dans ce cas la car il faut absolument effacer le symbole euro pour modifier
Michel Claveau, résurectionné d'outre-bombe informatique wrote:
Bonjour !
Je vois, avec effarement, qu'il me reste énormément de choses à comprendre, avec wxPython. et, sans doc utilisable (française), ça va pas être triste !
Aussi, je me permet quelques questions : - Pourquoi intercepter les caractères inférieurs à l'espace ? Si l'utilisateur se trompe, en saisie, pourra-t'il utiliser le backspace (chr(8)) ? oui
pkoi chai plus !
- A quoi servent TransferToWindow(self), TransferFromWindow(self) et Clone(self) (et autres) ? Je ne sais plus. Mais si je me souviens bien j'ai pompé tout ca sur le
site wiki python fait une recherche sur google tu devrais trouvé. Cerise : c'est en francais !!!
- Pourquoi utiliser chr(70), plutôt que 'F' ? chais plus
- Que se passera-t'il, si l'utilisateur tente de taper (par mégarde) des espaces, au milieu des chiffres ? il risque d'être bloqué. non ca marche, mais c'est vrai qu'il y a quelques bugs. Je viens de
m'appercevoir que d et e passe entre les chiffres
Je suis allé tres (trop)vite en programmant, pour une petite appli simple
- A quoi sert le chr(128) lors de la mise en place du validator=FloatValidator ? c'est pour mon appli c'est le caractère "Euro" et j'ai surtout un bug
dans ce cas la car il faut absolument effacer le symbole euro pour modifier
A+
Michel Claveau, résurectionné d'outre-bombe informatique
Bonsoir !
Ton message m'aura au moins permis de réviser ma conjugaison du verbe savoir :-)))
Bonsoir !
Ton message m'aura au moins permis de réviser ma conjugaison du verbe savoir
:-)))
Michel Claveau, résurectionné d'outre-bombe informatique wrote:
Bonsoir !
Chalut
Ton message m'aura au moins permis de réviser ma conjugaison du verbe savoir :-)))
Chavoir
-- Loïc
loic.mahe
Merci à tous pour toutes vos réponses ! Mais mon problème exact était plutôt de savoir comment appeler la méthode Validate() définie dans le Validator, à partir de la fonction gérant les événements liés au bouton ?
Je viens de trouver la solution à mon problème, et je vous la poste ci dessous :
La ligne de code pour appeler Validate est la suivante : self.tc.GetValidator().Validate(self.tc) C'est assez tordu et pas très beau Si vous avez une meilleure solution je suis preneur
Le code complet est à la fin de ce post !
Juste quelques explications avant :
* TransferToWindow(self) sert à transférer les données contenues dans la fenêtre ou contrôle vers une structure de donnée * TransferFromWindow(self) sert à transférer les données contenues dans une structure de donnée vers la fenêtre ou contrôle * Clone(self) est nécessaire au fonctionnement interne des Validators est est normalement obligatoire
Voici le code complet qui fonctionne :
Pour voir le fonctionnement du validator, Il faut effacer les caractères contenus dans le TxtCtrl puis appuyer sur le bouton .
Et voilà !!!
A+
Loïc
#!/usr/bin/env python
import wx
class TextObjectValidator(wx.PyValidator): def __init__(self): print "init" wx.PyValidator.__init__(self)
Merci à tous pour toutes vos réponses !
Mais mon problème exact était plutôt de savoir
comment appeler la méthode Validate() définie
dans le Validator, à partir de la fonction gérant les événements liés
au bouton ?
Je viens de trouver la solution à mon problème,
et je vous la poste ci dessous :
La ligne de code pour appeler Validate est la suivante :
self.tc.GetValidator().Validate(self.tc)
C'est assez tordu et pas très beau
Si vous avez une meilleure solution je suis preneur
Le code complet est à la fin de ce post !
Juste quelques explications avant :
* TransferToWindow(self) sert à transférer les données contenues dans
la fenêtre ou contrôle vers une structure de donnée
* TransferFromWindow(self) sert à transférer les données contenues
dans une structure de donnée vers la fenêtre ou contrôle
* Clone(self) est nécessaire au fonctionnement interne des Validators
est est normalement obligatoire
Voici le code complet qui fonctionne :
Pour voir le fonctionnement du validator,
Il faut effacer les caractères contenus dans le TxtCtrl puis appuyer
sur le bouton .
Et voilà !!!
A+
Loïc
#!/usr/bin/env python
import wx
class TextObjectValidator(wx.PyValidator):
def __init__(self):
print "init"
wx.PyValidator.__init__(self)
Merci à tous pour toutes vos réponses ! Mais mon problème exact était plutôt de savoir comment appeler la méthode Validate() définie dans le Validator, à partir de la fonction gérant les événements liés au bouton ?
Je viens de trouver la solution à mon problème, et je vous la poste ci dessous :
La ligne de code pour appeler Validate est la suivante : self.tc.GetValidator().Validate(self.tc) C'est assez tordu et pas très beau Si vous avez une meilleure solution je suis preneur
Le code complet est à la fin de ce post !
Juste quelques explications avant :
* TransferToWindow(self) sert à transférer les données contenues dans la fenêtre ou contrôle vers une structure de donnée * TransferFromWindow(self) sert à transférer les données contenues dans une structure de donnée vers la fenêtre ou contrôle * Clone(self) est nécessaire au fonctionnement interne des Validators est est normalement obligatoire
Voici le code complet qui fonctionne :
Pour voir le fonctionnement du validator, Il faut effacer les caractères contenus dans le TxtCtrl puis appuyer sur le bouton .
Et voilà !!!
A+
Loïc
#!/usr/bin/env python
import wx
class TextObjectValidator(wx.PyValidator): def __init__(self): print "init" wx.PyValidator.__init__(self)