2016-12-13 1 views
1

Ich muss auf eine Drag-and-Drop-Neuordnung von Elementen in QListWidget reagieren. Ich kann kein QEvent finden. Jede Hilfe wäre willkommen!Python: Capture-Umordnungsereignis in einem QListWidget?

ich eine event Routine bin mit Ereignissen in meinem GUI zu erfassen:

from PyQt4 import QtGui 
from PyQt4 import QtCore 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

def eventFilter(self, sourceObj, event): 
    if event.type()== QtCore.QEvent.Drop: 
     print("got to drop event") 
     (processing code here) 

Vielleicht ist dieses Ereignis nicht Nachbestellung von Positionen auf einer Drag-and-Drop auslöst, weil die Drag & drop ist innerhalb des Widgets (z. B. wird nichts von außerhalb des Widgets darauf fallengelassen)?

Ich habe versucht QtCore.QEvent.Drop und QtCore.QEvent.MouseButtonRelease ohne Erfolg. Welches Ereignis sollte ich verwenden?

(Ich verwende Python3, PyQt4, auf Ubuntu 16.10. Mein eventRoutineArbeiten für andere Aktionen in der GUI wie Klicks, Lost-Focus-usw.)

+0

Versuchen Sie, den Ereignisfilter im QListWidget-Ansichtsfenster zu installieren – Schollii

+0

@Schollii Vielen Dank. Durch die Installation des Ereignisfilters im Ansichtsfenster() wurde das Ereignis ausgelöst. Das Problem wurde dann, dass QT die Neuordnung von QItems im QListWidget erst nach dem Ereignis verarbeitet. Ich habe jedoch eine Lösung gefunden: Verwenden Sie das ChildRemoved-Ereignis. Anscheinend sendet QT dieses Ereignis per Drag-and-Drop-Umordnung. – trinkner

Antwort

3

Hier ist die Lösung, die ich zur Arbeit gefunden. Die Lösung bestand darin, mithilfe des Ereignisfilters auf ChildRemoved QEvent zu warten. Offensichtlich löst QT dieses Ereignis aus, wenn Elemente in einem QListWidget per Drag-and-Drop neu geordnet werden.

Schritt 1. Installieren Sie in der Init (self) für Ihre Klasse, die das QListWidget enthält, den Ereignisfilter für das Widget, dessen Ereignis Sie erfassen möchten.

def __init__(self): 
    self.lstYourWidgetNameHere.installEventFilter(self) 

Schritt 2. In der Routine event in der gleichen Klasse, überprüfen Sie die ChildRemoved QEvent.

Verwandte Themen