gpt4 book ai didi

python - 如何更改 PyQt 或 PySide 中的最小化事件行为?

转载 作者:太空狗 更新时间:2023-10-29 23:59:41 25 4
gpt4 key购买 nike

我正在开发一个 Qt 应用程序并使用 closeEvent virtual function 更改了关闭行为这样:

class MainWindow(QMainWindow):
def closeEvent(self, event):
event.ignore()
self.hide()
self.trayicon.showMessage('Running', 'Running in the background.')

这按预期工作。如果我删除 event.ignore() 应用程序按预期退出,一切都很好。

我也想控制最小化事件,所以当用户点击标题栏上的最小化按钮时,我想移动窗口而不是最小化。我不能使用 hideEvent虚函数,因为无论如何事件都会被发送到窗口,所以这段代码:

def hideEvent(self, event):
event.ignore()
self.move(0,0)

将窗口移动到左上角,然后将其最小化。 event.ignore() 在这里没有效果,所以我尝试使用 QtCore.QObject.event这样:

def event(self, event):
if event.type() == QEvent.WindowStateChange:
if self.isMinimized():
event.ignore()
self.move(0,0)
return True
return False

窗口移动但再次最小化。这有什么问题?我怎样才能完全覆盖最小化事件?

最佳答案

试试 changeEvent并过滤 WindowMinimized事件,像这样:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtGui, QtCore

class MyWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)

self.systemTrayIcon = QtGui.QSystemTrayIcon(self)
self.systemTrayIcon.setIcon(QtGui.QIcon.fromTheme("face-smile"))
self.systemTrayIcon.setVisible(True)
self.systemTrayIcon.activated.connect(self.on_systemTrayIcon_activated)

self.label = QtGui.QLabel(self)
self.label.setText("Minimize me!")

self.layoutVertical = QtGui.QVBoxLayout(self)
self.layoutVertical.addWidget(self.label)

@QtCore.pyqtSlot(QtGui.QSystemTrayIcon.ActivationReason)
def on_systemTrayIcon_activated(self, reason):
if reason == QtGui.QSystemTrayIcon.DoubleClick:
if self.isHidden():
self.show()

else:
self.hide()

def changeEvent(self, event):
if event.type() == QtCore.QEvent.WindowStateChange:
if self.windowState() & QtCore.Qt.WindowMinimized:
event.ignore()
self.close()
return

super(MyWindow, self).changeEvent(event)

def closeEvent(self, event):
event.ignore()
self.hide()
self.systemTrayIcon.showMessage('Running', 'Running in the background.')

if __name__ == "__main__":
import sys

app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')

main = MyWindow()
main.show()

sys.exit(app.exec_())

关于python - 如何更改 PyQt 或 PySide 中的最小化事件行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16036336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com