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

Python Discussion :

assignations d'évènement de facon dynamique


Sujet :

Python

  1. #1
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut assignations d'évènement de facon dynamique
    bonsoir,

    j'essai de créer une appli qui est gérer par des raccourci clavier.

    Je stocke dans un fichier de config les séquences des raccourcis.
    puis dans mon code je reconstitue les séquences en lisant les paramètres dans ce fichier.

    l'assignation du raccourci ne focntionne pas.
    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
        def attribEvent(self,widget,alt=0,ctrl=0,maj=0,key='None'):
            cmd=''
            if alt==1:
                cmd=cmd + 'alt+'
            if ctrl==1:
                cmd=cmd+ 'ctrl+'
            if maj==1:
                cmd=cmd+ 'Shift+'
     
            cmd="'<"+cmd+str(key)+">'"
            print cmd
            widget.bind_all(cmd,self.msg)
    voici le message d'erreur :
    ''
    Traceback (most recent call last):
    File "C:\Documents and Settings\Benoit\Mes documents\Programmation\PoliFileCopy\gui.py", line 287, in ?
    app=PoliFileCopy()
    File "C:\Documents and Settings\Benoit\Mes documents\Programmation\PoliFileCopy\gui.py", line 124, in __init__
    self.attribEvent(self.gui,alt=eval(self.cfgRaccourci[i]['alt']),ctrl=eval(self.cfgRaccourci[i]['ctrl']),maj=eval(self.cfgRaccourci[i]['maj']),key=self.cfgRaccourci[i]['key'])
    File "C:\Documents and Settings\Benoit\Mes documents\Programmation\PoliFileCopy\gui.py", line 139, in attribEvent
    widget.bind_all(cmd,self.msg)
    File "C:\Python24\Lib\lib-tk\Tkinter.py", line 945, in bind_all
    return self._bind(('bind', 'all'), sequence, func, add, 0)
    File "C:\Python24\Lib\lib-tk\Tkinter.py", line 888, in _bind
    self.tk.call(what + (sequence, cmd))
    _tkinter.TclError: bad event type or keysym "Shift+c"
    Script terminated.
    est ce que quelqu'un peut m'aider. j'aimerai arriver a configurer mes raccourcis clavier dynamiquement.

    merci d'avance

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    bon ca évolue mais c'est pas encore ca.
    j'ai modifier mon code de déclaration de raccoucis comme suit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        def attribEvent(self,widget,alt=0,ctrl=0,maj=0,key='None'):
            '''déclaration des raccourcis clavier'''
            cmd=""
            if alt==1:
                cmd=cmd+"Alt-"
            if ctrl==1:
                cmd=cmd+"Control-"
            if maj==1:
                cmd=cmd+"Shift-"
            cmd=cmd+key
     
            widget.bind_all("<%s>"%cmd,lambda event,appli=self.gui : self.quitAppli(event,appli))
    je n'ai plus d'erreur mais ca ne marche toujours pas, sauf pour les appuis franc. (cad appui sur une touche: ex: a, b, ...)

    S'il vous plait, un petit conseil serait le bien venu.
    merci

  3. #3
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    Ca devrait marcher ...
    Qu'est-ce-que te donne un "print cmd" dans "attribEvent" ?
    Plutot que d'utiliser une lambda, j'aurais fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        def attribEvent(self,widget=None,alt=0,ctrl=0,maj=0,key="",fonction=""):
            '''déclaration des raccourcis clavier'''
            cmd=""
            if alt==1:
                cmd=cmd+"Alt-"
            if ctrl==1:
                cmd=cmd+"Control-"
            if maj==1:
                cmd=cmd+"Shift-"
            cmd=cmd+key
            widget.bind_all("<%s>"%cmd,getattr(self,fonction))
    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        def quitAppli(self,event=None):
            self.destroy()
    et tu l'appelles comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.attribEvent(widget=myWidget,alt=1,key='a',fonction=quitAppli)

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    salut, le retour me donne ca

    Alt-Control-Shift-a
    Shift-c
    Alt-Shift-b
    Alt-Control-e
    Control-Shift-d
    f
    tout parait être correcte mais rien ne fonctionne a part la touche "f" directement.
    J'ai essayé d'envoyer dans bind_all quelques chose du type string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmd="'<Control-a>'"
    print cmd
    mais dans ce cas, le retour est bizar. J'ai :
    ''
    je n'arrive pas afficher les carractères >< dans une chaine.
    Pourquoi? quelqu'un peut m'éclairer?!

    je voudrais envoyer a bind_all quelques chose du style :
    cmd="'<Control-a>'"
    widget.bind_all(cmd,mafonction)
    merci d'avance.

  5. #5
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    Bon ca y est j'ai réussi.

    en fait je me compliquais la vie.

    je parse mon fichier de config qui me retourne un dico de dico.
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_dico={A:{cmd:'Control-a'},B:{cmd:'Alt-b'}}
    puis c'est simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in mon_dico:
                print i, mon_dico[i]['cmd']
                self.gui.bind_all('<%s>'%eval(mon_dico[i]['cmd']),lambda event,appli=self.gui : self.quitAppli(event,appli))
    et ca marche tout seul

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

Discussions similaires

  1. événement sur composants dynamiques
    Par kirua2150 dans le forum Delphi
    Réponses: 5
    Dernier message: 02/05/2007, 03h33
  2. récupérer un tableau de facon dynamique
    Par amel95140 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 21/12/2006, 09h57
  3. événement onLoad ajouté dynamiquement
    Par Michel_57 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/09/2006, 13h33
  4. Generer une table d'une facon dynamique avec hibernate
    Par oughlad dans le forum Hibernate
    Réponses: 6
    Dernier message: 12/07/2006, 15h57
  5. Compilation de code de facon dynamique
    Par Kiwi dans le forum Général Java
    Réponses: 5
    Dernier message: 04/05/2006, 13h49

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