首页 PyQt5教程 PyQt5窗口事件(closeEvent、resizeEvent、moveEvent、keyPressEvent、focusInEvent等)使用方法
pay pay
教程目录

PyQt5窗口事件(closeEvent、resizeEvent、moveEvent、keyPressEvent、focusInEvent等)使用方法

日期: 四月 24, 2023, 10:11 a.m.
栏目: PyQt5教程
阅读: 407
作者: Python自学网-村长

摘要: PyQt5是一个Python的GUI工具包,它提供了丰富的图形界面控件,同时也支持窗口事件。窗口事件是指在程序运行过程中,窗口的各种操作产生的事件响应。

PyQt5是一个Python的GUI工具包,它提供了丰富的图形界面控件,同时也支持窗口事件。窗口事件是指在程序运行过程中,窗口的各种操作产生的事件响应。

PyQt5中提供了以下几种窗口事件:

  • closeEvent:窗口关闭事件
  • resizeEvent:窗口大小调整事件
  • moveEvent:窗口移动事件
  • keyPressEvent:键盘按下事件
  • keyReleaseEvent:键盘释放事件
  • focusInEvent:窗口获得焦点事件
  • focusOutEvent:窗口失去焦点事件
  • paintEvent:窗口重绘事件

下面我们来演示一下如何在PyQt5中使用窗口事件。首先我们需要导入PyQt5库:

from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton
from PyQt5.QtCore import Qt
import sys

class MyMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Window Event')
        self.setGeometry(200, 200, 400, 300)

        label = QLabel('Hello PyQt5', self)
        label.setAlignment(Qt.AlignCenter)
        label.setGeometry(100, 100, 200, 30)

        button = QPushButton('Close', self)
        button.setGeometry(150, 200, 100, 30)
        button.clicked.connect(self.close)

    def closeEvent(self, event):
        reply = QMessageBox.question(self, 'Message', 'Are you sure to quit?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

    def resizeEvent(self, event):
        print('Window resized to ({}, {})'.format(event.size().width(), event.size().height()))

    def moveEvent(self, event):
        print('Window moved to ({}, {})'.format(event.pos().x(), event.pos().y()))

    def keyPressEvent(self, event):
        print('Key {} pressed'.format(event.text()))

    def keyReleaseEvent(self, event):
        print('Key {} released'.format(event.text()))

    def focusInEvent(self, event):
        print('Window focus in')

    def focusOutEvent(self, event):
        print('Window focus out')

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        brush = QBrush(Qt.SolidPattern)
        painter.setBrush(brush)

        pen = QPen(Qt.NoPen)
        painter.setPen(pen)

        painter.drawRect(100, 100, 200, 100)

这个自定义的QMainWindow类中添加了一个标签和一个按钮,并重写了窗口事件的几个方法,用于打印出窗口的各种事件。

其中,closeEvent方法用于在窗口关闭时询问用户是否确认退出程序,resizeEvent方法和moveEvent方法用于在窗口大小或位置发生变化时打印出相应的信息,keyPressEvent方法和keyReleaseEvent方法用于在键盘按下或释放时打印出相应的信息,focusInEvent方法和focusOutEvent方法用于在窗口获得或失去焦点时打印出相应的信息,paintEvent方法用于在窗口需要重新绘制时绘制一个矩形。

接下来,我们创建一个QApplication实例,并显示自定义的QMainWindow窗口:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyMainWindow()
    window.show()
    sys.exit(app.exec_())

最后,我们运行程序,点击按钮关闭窗口,拖动窗口改变大小和位置,按下键盘,让窗口获得和失去焦点,并观察控制台输出的相应信息。

通过这个演示,我们可以看到,在PyQt5中使用窗口事件可以实现各种窗口操作的响应,从而实现更加灵活的GUI界面。

部分文字内容为【Python自学网】原创作品,转载请注明出处!视频内容已申请版权,切勿转载!
回顶部