Ich bin eine Qt-Anwendung zu entwickeln und das Schließverhalten der closeEvent
virtual function auf diese Weise geändert:Wie kann man das Ereignisverhalten in PyQt oder PySide minimieren?
class MainWindow(QMainWindow):
def closeEvent(self, event):
event.ignore()
self.hide()
self.trayicon.showMessage('Running', 'Running in the background.')
Dies funktioniert wie erwartet. Wenn ich event.ignore()
entferne die Anwendung wie erwartet beendet, ist alles in Ordnung.
Ich möchte auch das minimize-Ereignis steuern, also wenn der Benutzer auf die Minimieren-Schaltfläche in der Titelleiste klickt, möchte ich das Fenster verschieben, anstatt zu minimieren. Ich kann die hideEvent
virtuelle Funktion, verwenden, da das Ereignis an das Fenster trotzdem gesendet werden, so dass dieser Code:
def hideEvent(self, event):
event.ignore()
self.move(0,0)
bewegt sich das Fenster nach oben links und dann minimieren. event.ignore()
hat keinen Einfluss hier, also habe ich versucht QtCore.QObject.event
auf diese Weise mit:
def event(self, event):
if event.type() == QEvent.WindowStateChange:
if self.isMinimized():
event.ignore()
self.move(0,0)
return True
return False
Das Fenster bewegt sich aber minimiert wieder. Was ist daran falsch? Wie kann ich das minimize-Ereignis vollständig überschreiben?
Wenn ich dies ausführen, wird der Fenstertitel in der Taskleiste bleibt. Wenn ich darauf klicke, wird das MyWindow grau und leer sein. seltsam. Wenn ich 'self.hide()' in self.move() ändere, findet die Minimierung nach dem Verschieben immer noch statt. :( – kissgyorgy
@Walkman Checkout meine [aktualisierte Antwort] (http://Stackoverflow.com/a/16048802/1006989), habe ich es aktualisiert, um das Verhalten auf das Ereignis minimize –
gleichen Effekt, seltsames Verhalten zu ändern. Titelleiste bleibt auf Windows Taskleiste, und wenn ich versuche, "self.move (0,0)" es bewegt sich UND minimiert wieder. Ich aktualisierte meine Frage, vielleicht ist es klarer, was ich will. – kissgyorgy