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
然后我们创建一个自定义的QMainWindow类:
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界面。