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

PyQt Python Discussion :

Glisser-déposer avec un filtre d'événements


Sujet :

PyQt Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut Glisser-déposer avec un filtre d'événements
    Bonsoir,

    j'ai 2 QTableWidget avec des event Filtrer, je souhaiterai ajouter le drag and drop entre les 2.

    je voudrais le faire en passant par l'eventfiltrer.

    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
    self.ui.web_table.installEventFilter(self)
    self.ui.local_table.installEventFilter(self)
     
    ...
     
     
    def eventFilter(self, watched, event):
        if watched.objectName() in ["local_table", "web_table"]:
            if event.type() == QEvent.DragLeave:
                print("DragLeave", watched.objectName())
     
            elif event.type() == QEvent.DragEnter:
                print("DragEnter", watched.objectName())
     
            elif event.type() == QEvent.DragMove:
                print("DragMove", watched.objectName())
     
            elif event.type() == QEvent.Drop:
                print("Drop", watched.objectName())
    Mais je n'ai que "DragEnter" qui s'active que je rentre ou sorte d'un des 2 widgets...

    Je ne comprends pas pourquoi...

    Lorsque je rentre dans "local_table" et ressorts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DragEnter local_table
    DragEnter local_table
    pourquoi n'est-ce pas Enter puis Leave ?!

    Je veux bien quelques conseils.

    Si je passe par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class LocalTable(QTableWidget):
        def dragEnterEvent(self, event):
            print("dragEnterEvent")
            event.accept()
     
        def dropEvent(self, event):
            print("dropEvent")
            event.accept()
     
     
    self.ui.local_table.__class__ = LocalTable
    cela fonctionne mais j'aimerai vraiment passer par l'eventfiltrer car je surveille déjà les resizes et les touches de clavier...

    Merci à vous.
    Sous Kubuntu 20.04

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Testé et je n'obtiens que des DragEnter dans les deux tables mais jamais les DragMove, DragLeave ou Drop.

    J'ai rajouté un print dans le filtre, le reste est identique au tien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        def eventFilter(self, watched, event):
            print('eventFilter: %s object: %s' % (event.type(), watched.objectName()))
            if watched.objectName() in ["local_table", "web_table"]:
                ...
    et ça me sort:
    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
     
    eventFilter: 8 object: web_table    # QEvent.FocusIn
    TypeError: invalid result type from Ui_MainWindow.eventFilter()
    eventFilter: 12 object: web_table   # QEvent.Paint
    TypeError: invalid result type from Ui_MainWindow.eventFilter()
    eventFilter: 1 object: web_table    # QEvent.Timer
    TypeError: invalid result type from Ui_MainWindow.eventFilter()
    eventFilter: 110 object: web_table  # QEvent.ToolTip
    TypeError: invalid result type from Ui_MainWindow.eventFilter()
    eventFilter: 68 object: web_table   # QEvent.ChildAdded
    TypeError: invalid result type from Ui_MainWindow.eventFilter()
    eventFilter: 1 object: web_table    # QEvent.Timer
    TypeError: invalid result type from Ui_MainWindow.eventFilter()
    eventFilter: 60 object: web_table   
    ('DragEnter', PyQt4.QtCore.QString(u'web_table'))
    TypeError: invalid result type from Ui_MainWindow.eventFilter()
    eventFilter: 60 object: local_table
    ('DragEnter', PyQt4.QtCore.QString(u'local_table'))
    TypeError: invalid result type from Ui_MainWindow.eventFilter()
    ....
    À l'exception des événements clavier, j'ai toujours eu à m'arracher les cheveux avec cet evenFilter et je l'ai abandonné au profit de la surcharge des event individuels.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Merci VinsS, ça confirme ce que mes tests m'ont démontrés...

    Je suis donc parti la-dessus.

    Quelqu'un sait il à quoi cela est il du ?
    Sous Kubuntu 20.04

Discussions similaires

  1. Glisser-déposer avec QLabel sur une image
    Par morinxav1 dans le forum Débuter
    Réponses: 6
    Dernier message: 22/01/2013, 12h55
  2. Glisser-déposer avec un QListView
    Par Natrio dans le forum Débuter
    Réponses: 3
    Dernier message: 19/10/2010, 09h22
  3. Réponses: 2
    Dernier message: 23/05/2010, 03h30
  4. Glisser-déposer avec Tkinter? (Tkdnd?)
    Par tyrtamos dans le forum Tkinter
    Réponses: 2
    Dernier message: 17/07/2008, 09h53
  5. Glisser-Déposer avec access
    Par mooh91 dans le forum IHM
    Réponses: 3
    Dernier message: 20/06/2007, 13h43

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