J'ai =E9crit un petit programme dans lequel d=E9filent automatiquement des
pages, et toutes les deux pages, l'utilisateur diit r=E9pondre =E0 une
question en tapant un chiffre de 1 =E0 9...
j'utilise donc :
self.Bind(wx.EVT_KEY_DOWN,self.touche)
pour saisir et v=E9rifier l'entr=E9e utilisateur.
Mon probl=E8me est que si l'utilisateur appuie sur le clavier avant
l'affichage de la question, chaque touche appuy=E9e est gard=E9e en
m=E9moire et est donc prise en compte =E0 l''affichage de la question.
Comment faire en sorte que la saisie ne soit possible qu'au moment
opportun.
(Annulation de Bind? je n'y arrive pas).
Je pense n'avoir pas saisi les subtilit=E9s de la m=E9thode Bind...
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
Amaury Forgeot d'Arc
Bonjour,
J'ai écrit un petit programme dans lequel défilent automatiquement des pages, et toutes les deux pages, l'utilisateur diit répondre à une question en tapant un chiffre de 1 à 9...
j'utilise donc : self.Bind(wx.EVT_KEY_DOWN,self.touche)
pour saisir et vérifier l'entrée utilisateur.
Mon problème est que si l'utilisateur appuie sur le clavier avant l'affichage de la question, chaque touche appuyée est gardée en mémoire et est donc prise en compte à l''affichage de la question.
Comment faire en sorte que la saisie ne soit possible qu'au moment opportun. (Annulation de Bind? je n'y arrive pas). Je pense n'avoir pas saisi les subtilités de la méthode Bind...
Je tenterais de mettre un appel à wx.Yield() juste avant le Bind. Ainsi on donne une chance au système d'épuiser le tampon clavier.
-- Amaury
Bonjour,
J'ai écrit un petit programme dans lequel défilent automatiquement des
pages, et toutes les deux pages, l'utilisateur diit répondre à une
question en tapant un chiffre de 1 à 9...
j'utilise donc :
self.Bind(wx.EVT_KEY_DOWN,self.touche)
pour saisir et vérifier l'entrée utilisateur.
Mon problème est que si l'utilisateur appuie sur le clavier avant
l'affichage de la question, chaque touche appuyée est gardée en
mémoire et est donc prise en compte à l''affichage de la question.
Comment faire en sorte que la saisie ne soit possible qu'au moment
opportun.
(Annulation de Bind? je n'y arrive pas).
Je pense n'avoir pas saisi les subtilités de la méthode Bind...
Je tenterais de mettre un appel à wx.Yield() juste avant le Bind.
Ainsi on donne une chance au système d'épuiser le tampon clavier.
J'ai écrit un petit programme dans lequel défilent automatiquement des pages, et toutes les deux pages, l'utilisateur diit répondre à une question en tapant un chiffre de 1 à 9...
j'utilise donc : self.Bind(wx.EVT_KEY_DOWN,self.touche)
pour saisir et vérifier l'entrée utilisateur.
Mon problème est que si l'utilisateur appuie sur le clavier avant l'affichage de la question, chaque touche appuyée est gardée en mémoire et est donc prise en compte à l''affichage de la question.
Comment faire en sorte que la saisie ne soit possible qu'au moment opportun. (Annulation de Bind? je n'y arrive pas). Je pense n'avoir pas saisi les subtilités de la méthode Bind...
Je tenterais de mettre un appel à wx.Yield() juste avant le Bind. Ainsi on donne une chance au système d'épuiser le tampon clavier.
-- Amaury
jean-michel bain-cornu
Bonjour,
Comment faire en sorte que la saisie ne soit possible qu'au moment opportun. S'il est correct de penser que ton programme n'a plus rien à faire au
moment de la saisie, peut-être peux-tu utiliser OnIdle (exemple : monObjet.Bind(wx.EVT_IDLE,maMethode) ) pour positionner un indicateur que tu vas tester dans self.touche.
Exemple non testé (désolé, pas assez de batterie): self.Bind(wx.EVT_IDLE,self.OnIdle) ... def OnIdle(self,event): self.indic= True # la prochaine touche sera la bonne, les touches bufferisées ont déjà été traitées à ce stade def touche(self,event): if self.indic == True: *** traitement, après vidage du buffer clavier *** self.indic= False Ainsi, le traitement ne peut se déclencher que lorsque tous les événements bufferisés ont été traités, par déclenchement de self.touche dans ton cas. Ceci devrait provoquer un vidage du buffer clavier, sur lequel je ne crois pas que tu aies la main avec wx, sauf erreur bien entendu.
Je pense n'avoir pas saisi les subtilités de la méthode Bind... Je ne crois pas que ce soit bin bin fin : tu fais correspondre une
méthode à un événement, dont l'activation provoquera l'éxécution de cette méthode.
Bonjour,
Comment faire en sorte que la saisie ne soit possible qu'au moment
opportun.
S'il est correct de penser que ton programme n'a plus rien à faire au
moment de la saisie, peut-être peux-tu utiliser OnIdle (exemple :
monObjet.Bind(wx.EVT_IDLE,maMethode) ) pour positionner un indicateur
que tu vas tester dans self.touche.
Exemple non testé (désolé, pas assez de batterie):
self.Bind(wx.EVT_IDLE,self.OnIdle)
...
def OnIdle(self,event):
self.indic= True # la prochaine touche sera la bonne, les touches
bufferisées ont déjà été traitées à ce stade
def touche(self,event):
if self.indic == True:
*** traitement, après vidage du buffer clavier ***
self.indic= False
Ainsi, le traitement ne peut se déclencher que lorsque tous les
événements bufferisés ont été traités, par déclenchement de self.touche
dans ton cas. Ceci devrait provoquer un vidage du buffer clavier, sur
lequel je ne crois pas que tu aies la main avec wx, sauf erreur bien
entendu.
Je pense n'avoir pas saisi les subtilités de la méthode Bind...
Je ne crois pas que ce soit bin bin fin : tu fais correspondre une
méthode à un événement, dont l'activation provoquera l'éxécution de
cette méthode.
Comment faire en sorte que la saisie ne soit possible qu'au moment opportun. S'il est correct de penser que ton programme n'a plus rien à faire au
moment de la saisie, peut-être peux-tu utiliser OnIdle (exemple : monObjet.Bind(wx.EVT_IDLE,maMethode) ) pour positionner un indicateur que tu vas tester dans self.touche.
Exemple non testé (désolé, pas assez de batterie): self.Bind(wx.EVT_IDLE,self.OnIdle) ... def OnIdle(self,event): self.indic= True # la prochaine touche sera la bonne, les touches bufferisées ont déjà été traitées à ce stade def touche(self,event): if self.indic == True: *** traitement, après vidage du buffer clavier *** self.indic= False Ainsi, le traitement ne peut se déclencher que lorsque tous les événements bufferisés ont été traités, par déclenchement de self.touche dans ton cas. Ceci devrait provoquer un vidage du buffer clavier, sur lequel je ne crois pas que tu aies la main avec wx, sauf erreur bien entendu.
Je pense n'avoir pas saisi les subtilités de la méthode Bind... Je ne crois pas que ce soit bin bin fin : tu fais correspondre une
méthode à un événement, dont l'activation provoquera l'éxécution de cette méthode.
Jerome
wrote:
Bonjour,
J'ai écrit un petit programme dans lequel défilent automatiquement des pages, et toutes les deux pages, l'utilisateur diit répondre à une question en tapant un chiffre de 1 à 9...
j'utilise donc : self.Bind(wx.EVT_KEY_DOWN,self.touche)
pour saisir et vérifier l'entrée utilisateur.
Mon problème est que si l'utilisateur appuie sur le clavier avant l'affichage de la question, chaque touche appuyée est gardée en mémoire et est donc prise en compte à l''affichage de la question.
Comment faire en sorte que la saisie ne soit possible qu'au moment opportun. (Annulation de Bind? je n'y arrive pas). Je pense n'avoir pas saisi les subtilités de la méthode Bind...
Merci de votre aide
JC
Bonjour, Quel est l'intérêt de capturer les événements clavier de cette façon ? J'ai l'impression que ton problème vient justement du fait que tu n'as pas à l'utiliser de cette façon.
En lisant tes besoins, je pencherai plus pour un pseudo-code comme ceci :
tantque pas findeprogramme faire faire défiler page si page affichée demande question alors poser question attendre réponse traiter réponse finsi fintantque
Ca me semble un traitement purement séquentiel avec une partie "modale" pour l'interaction avec l'utilisateur, ce n'est pas un traitement événementiel. A la limite tu peux lancer un événement lorsque la page qui demande un choix de l'utilisateur est affichée et récupérer cet événement à ce moment là.
Jérôme
j.cormouls@neuf.fr wrote:
Bonjour,
J'ai écrit un petit programme dans lequel défilent automatiquement des
pages, et toutes les deux pages, l'utilisateur diit répondre à une
question en tapant un chiffre de 1 à 9...
j'utilise donc :
self.Bind(wx.EVT_KEY_DOWN,self.touche)
pour saisir et vérifier l'entrée utilisateur.
Mon problème est que si l'utilisateur appuie sur le clavier avant
l'affichage de la question, chaque touche appuyée est gardée en
mémoire et est donc prise en compte à l''affichage de la question.
Comment faire en sorte que la saisie ne soit possible qu'au moment
opportun.
(Annulation de Bind? je n'y arrive pas).
Je pense n'avoir pas saisi les subtilités de la méthode Bind...
Merci de votre aide
JC
Bonjour,
Quel est l'intérêt de capturer les événements clavier de cette façon
? J'ai l'impression que ton problème vient justement du fait que tu n'as
pas à l'utiliser de cette façon.
En lisant tes besoins, je pencherai plus pour un pseudo-code comme ceci :
tantque pas findeprogramme faire
faire défiler page
si page affichée demande question alors
poser question
attendre réponse
traiter réponse
finsi
fintantque
Ca me semble un traitement purement séquentiel avec une partie "modale"
pour l'interaction avec l'utilisateur, ce n'est pas un traitement
événementiel. A la limite tu peux lancer un événement lorsque la page
qui demande un choix de l'utilisateur est affichée et récupérer cet
événement à ce moment là.
J'ai écrit un petit programme dans lequel défilent automatiquement des pages, et toutes les deux pages, l'utilisateur diit répondre à une question en tapant un chiffre de 1 à 9...
j'utilise donc : self.Bind(wx.EVT_KEY_DOWN,self.touche)
pour saisir et vérifier l'entrée utilisateur.
Mon problème est que si l'utilisateur appuie sur le clavier avant l'affichage de la question, chaque touche appuyée est gardée en mémoire et est donc prise en compte à l''affichage de la question.
Comment faire en sorte que la saisie ne soit possible qu'au moment opportun. (Annulation de Bind? je n'y arrive pas). Je pense n'avoir pas saisi les subtilités de la méthode Bind...
Merci de votre aide
JC
Bonjour, Quel est l'intérêt de capturer les événements clavier de cette façon ? J'ai l'impression que ton problème vient justement du fait que tu n'as pas à l'utiliser de cette façon.
En lisant tes besoins, je pencherai plus pour un pseudo-code comme ceci :
tantque pas findeprogramme faire faire défiler page si page affichée demande question alors poser question attendre réponse traiter réponse finsi fintantque
Ca me semble un traitement purement séquentiel avec une partie "modale" pour l'interaction avec l'utilisateur, ce n'est pas un traitement événementiel. A la limite tu peux lancer un événement lorsque la page qui demande un choix de l'utilisateur est affichée et récupérer cet événement à ce moment là.
Jérôme
jean-michel bain-cornu
En lisant tes besoins, je pencherai plus pour un pseudo-code comme ceci :
tantque pas findeprogramme faire faire défiler page si page affichée demande question alors poser question attendre réponse traiter réponse finsi fintantque
Ca me semble un traitement purement séquentiel avec une partie "modale" pour l'interaction avec l'utilisateur, ce n'est pas un traitement événementiel. A la limite tu peux lancer un événement lorsque la page qui demande un choix de l'utilisateur est affichée et récupérer cet événement à ce moment là.
Sauf que si tu fais ça et que l'opérateur envoie des évènements claviers pendant l'affichage, les touches seront mise en tampon avant traitement, et c'est ce que ne veux pas notre ami. Dans la phase "attendre réponse", tu vas récupérer tous les caractères frappés pendant la phase "faire défiler". C'est ce qui impose un vidage du buffer avant traitement, sinon c'est la pagaille.
En lisant tes besoins, je pencherai plus pour un pseudo-code comme ceci :
tantque pas findeprogramme faire
faire défiler page
si page affichée demande question alors
poser question
attendre réponse
traiter réponse
finsi
fintantque
Ca me semble un traitement purement séquentiel avec une partie "modale"
pour l'interaction avec l'utilisateur, ce n'est pas un traitement
événementiel. A la limite tu peux lancer un événement lorsque la page
qui demande un choix de l'utilisateur est affichée et récupérer cet
événement à ce moment là.
Sauf que si tu fais ça et que l'opérateur envoie des évènements claviers
pendant l'affichage, les touches seront mise en tampon avant traitement,
et c'est ce que ne veux pas notre ami. Dans la phase "attendre réponse",
tu vas récupérer tous les caractères frappés pendant la phase "faire
défiler".
C'est ce qui impose un vidage du buffer avant traitement, sinon c'est la
pagaille.
En lisant tes besoins, je pencherai plus pour un pseudo-code comme ceci :
tantque pas findeprogramme faire faire défiler page si page affichée demande question alors poser question attendre réponse traiter réponse finsi fintantque
Ca me semble un traitement purement séquentiel avec une partie "modale" pour l'interaction avec l'utilisateur, ce n'est pas un traitement événementiel. A la limite tu peux lancer un événement lorsque la page qui demande un choix de l'utilisateur est affichée et récupérer cet événement à ce moment là.
Sauf que si tu fais ça et que l'opérateur envoie des évènements claviers pendant l'affichage, les touches seront mise en tampon avant traitement, et c'est ce que ne veux pas notre ami. Dans la phase "attendre réponse", tu vas récupérer tous les caractères frappés pendant la phase "faire défiler". C'est ce qui impose un vidage du buffer avant traitement, sinon c'est la pagaille.