PyQt中提供了两种针对事件处理的机制:一种是事件,另一种则是信号和槽。
一、事件
事件处理在PyQt中是比较底层的,常用的事件有键盘事件、鼠标事件、拖放事件、滚轮事件、定时事件、焦点事件、进入和离开事件(光标移入控件或者移出),移动事件(窗口位置变化),显示和隐藏事件,窗口事件(窗口是否为当前窗口)、以及常见的Qt事件:Socket事件、剪贴板事件、文字改变事件,布局改变事件等。
针对这些事件,PyQt提供了多种事件处理和过滤方法,其中最常用的有两种:
(1)重写事件具体的函数(例如:mousePressEvent()/keyPressEvent()....)
(2)重新实现QObject.event()一般用在PyQt没有提供该事件的处理函数的情况下,即添加一个新的事件;
1.1 重写事件
1 importsys,os2 from PyQt5.QtCore importQt3 from PyQt5.QtWidgets importQWidget, QApplication,QMessageBox4 from PyQt5.QtGui importQIcon5
6 path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))7
8 classMyWindow(QWidget):9
10 def __init__(self):11 super(MyWindow, self).__init__()12 self.initUI()13
14 definitUI(self):15 self.setGeometry(300, 300, 300, 250)16 self.setWindowTitle('重写事件示例')17 self.setWindowIcon(QIcon(r'%s\4.图标素材\chuan.ico' %path))18
19 defcloseEvent(self, QCloseEvent):20 '''
21 重写closeEvent方法,关闭窗口时触发22 '''
23 reply = QMessageBox.question(self,'本程序',"是否要退出程序?",24 QMessageBox.Yes |QMessageBox.No,25 QMessageBox.No)26 if reply ==QMessageBox.Yes:27 QCloseEven