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

Tkinter Python Discussion :

bind Click sur Listbox


Sujet :

Tkinter Python

  1. #1
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut bind Click sur Listbox
    Bonjour,

    Je n'arrive pas à bind les events Button-1 ou Double-Button-1 sur une liste box. Le callback a l'air de ne pas être appelé. C'est réellement le double click qui m'intéresse, pas le <<ListboxSelect>>.

    Voyez vous l'erreur ou le probléme ?
    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        from Tkinter import *
        R= Tk()
        l= Listbox(R)
        l.pack()
        for item in ["one", "two", "three", "four"]:
            l.insert(END, item)    
        def _print(*a): print a
        l.bind("<<Button-1>>",lambda *a:_print("Button 1"))
        l.bind("<<Double-Button-1>>",lambda *a:_print("Double Button 1"))
        R.mainloop()

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 306
    Par défaut
    Salut,

    Tu veux dire que l'event click empêche l'event double-click ?

    Ce problème existe avec d'autre framework graphiques et peut être résolu avec un timer.

    Je ne connais pas assez Tkinter mais je te montre un exemple avec Qt
    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
     
        def mousePressEvent(self, event):
            if event.button() == 1:
                timer = QtCore.QTimer()
                timer.singleShot(300, self.on_item_clicked)
                timer.start()
     
        def mouseDoubleClickEvent(self, event):
            self.is_double_clicked = True
     
            if self.new != -1:
                do something
     
        def on_item_clicked(self):
            if not self.is_double_clicked:
                do something
     
            self.is_double_clicked = False
    Ça devrait pouvoir s'adapter a Tkinter, je suppose.

  3. #3
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    En fait les délimiteurs sont simples. Ça marche en faisant <Double-Button-1> à la place de << >> ... Désolé.
    En tous cas, pas d'interférence entre les events (les 3 event button, double et Select sont traités)

    peut être résolu avec un timer
    Je ne connais pas Qt, mais je ne comprends pas dans ton exemple comment ca peut régler un problème, sachant que le timer est lancé dans le callback (qui est censé ne pas etre appelé, si j'ai bien compris).

    Merci VinsS

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 306
    Par défaut
    Ben le premier click lance le timer et si le deuxième click intervient avant les 300 millisecondes l'action double-click s'exécutera et empêchera l'action simple click.

    Par contre j'ignorais le principe des délimiteurs de Tkinter.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,
    Avec Tk, "<Double-Button-1>" est un raccourci de "<Button-1><Button-1>", i.e. le bind opère sur des séquences d'events même si on lui colle souvent un seul event.
    Et ça intègre la logique attendre un peu pour voir ce qui arrive après et des tas de "caveats" lorsque plusieurs séquences se recouvrent.

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

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

Discussions similaires

  1. [AC-2007] Après double click sur listbox
    Par SamSamas dans le forum IHM
    Réponses: 6
    Dernier message: 22/08/2011, 14h43
  2. binding click sur une select multiple perso
    Par Setsuna_00 dans le forum jQuery
    Réponses: 3
    Dernier message: 29/07/2011, 14h31
  3. Bind click sur checkbox
    Par scfi1 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/04/2011, 09h51
  4. recharger listbox apres click sur bouton
    Par tehes dans le forum ASP.NET
    Réponses: 4
    Dernier message: 22/01/2008, 15h27
  5. Click sur une ListBox
    Par yedid dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2007, 12h43

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