pyqt5 窗口 事件监听回调

时间:2024-04-08 18:18:52

1、简介

在窗口状态发生改变时实现这些事件的捕捉
继承 MainWindow 类实现的窗体

pyqt5 窗口 事件监听回调

继承 QWidget 实现的窗体
类似

2、功能实现

1)、继承 MainWindow 类
import sys

from PyQt5 import QtCore
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIcon


class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        exitAction = QAction(QIcon('exit.png'), '&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)
        self.statusBar()
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Menubar')
        self.show()
      
         # 添加 复写 窗口状态改变 函数
    def changeEvent(self, e):
        if e.type() == QtCore.QEvent.WindowStateChange:
            if self.isMinimized():
                print("窗口最小化")
            elif self.isMaximized():
                print("窗口最大化")
            elif self.isFullScreen():
                print("全屏显示")
            elif self.isActiveWindow():
                print("活动窗口")
 
    # 添加 复写 显示窗口函数
    def showEvent(self, e):
        print("窗口显示")

    def hideEvent(self, e):
        print("窗口隐藏")

    def closeEvent(self,e):
       print ("窗口关闭")

    def moveEvent(self,e):
       print ("窗口移动")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
2、继承 QWidget 类
from PyQt5 import QtCore, QtWidgets

class MyWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.resize(300, 100)
    def changeEvent(self, e):
        if e.type() == QtCore.QEvent.WindowStateChange:
            if self.isMinimized():
                print("窗口最小化")
            elif self.isMaximized():
                print("窗口最大化")
            elif self.isFullScreen():
                print("全屏显示")
            elif self.isActiveWindow():
                print("活动窗口")

    def showEvent(self, e):
        print("窗口显示")

    def hideEvent(self, e):
        print("窗口隐藏")

    def closeEvent(self,e):
       print ("窗口关闭")


    def moveEvent(self,e):
       print ("窗口移动")
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

对于窗口更多的事件介绍 比如重绘 paintEvent(self,event) 、尺寸重置 paintEvent(self,event) 用法类似。