ich habe folgendes Problem. Ich habe eine PyQt-Anwendung, die in bestimmten Situationen einen Thread benutzt, um eine Operation einer externen Applikation zu kommunizieren. Für die Dauer dieser Operation soll die aufrufende Applikation blockiert werden. Das ganze soll deshalb in einem Thread laufen, damit das GUI der aufrufenden Applikation sichtbar bleibt (unter XP wird sonst etwa der Fensterinhalt weiss), d.h. Paint-Events sollen weiterhin verarbeitet werden, Usereingaben dagegen in der Regel nicht. Ich habe also folgenden Code geschrieben
Code: Alles auswählen
wt = WorkerThread(func, *args, **kwArgs)
wt.start()
timeOutTime = time.time() + self._timeOut if self._timeOut else 0
while not wt._finished:
QtGui.qApp.processEvents(QtCore.QEventLoop.ExcludeUserInputEvents)
time.sleep(self._sleepInterval)
if timeOutTime:
if time.time() > timeOutTime:
break
if wt._finished:
ret = wt._ret
else:
ret = ThreadExecutionError
Der Aufruf von
Code: Alles auswählen
QtGui.qApp.processEvents(QtCore.QEventLoop.ExcludeUserInputEvents)
Do not process user input events, such as ButtonPress and KeyPress. Note that the events are not discarded; they will be delivered the next time processEvents() is called without the ExcludeUserInputEvents flag.
Ich möchte aber, dass die Benutzereingaben, die der Anwender macht, während der Thread läuft, einfach gelöscht werden. Was ist der richtige Weg dafür? Muss ich auf der QEventLoop für die Dauer des Threads einen Eventfilter installieren, den ich danach wieder entferne?
Gruss
Wolfgang