一,每个事件都被封装成相应的类:
pyqt中,每个事件类型都被封装成相应的事件类,如鼠标事件为QMouseEvent,键盘事件为QKeyEvent等。而它们的基类是QEvent。
二,基类QEvent的几个重要方法:
accept() 表示事件已处理,不需要向父窗口传播
ignore()表示事件未处理,继续向父窗口传播f
type()返回事件类型,如QtCore.QEvent.MouseButtonPress,一般由基事件调用。因为其它事件已经知道自己的事件类型了。
还有一个自定义事件的注册方法。
三,QMouseEvent鼠标事件:
buttons()返回哪个鼠标按键被按住了。如Qt.LeftButton
globalPos()返回鼠标相对屏幕的位置QPoint
pos()返回鼠标相对处理事件的窗口的位置
四、处理鼠标事件的响应函数(在QWidget及其继承类中):
mousePressEvent(QMouseEvent)
mouseReleaseEvent(event)
mouseMoveEvent(event)
# 事件。
"""重写鼠标事件,实现窗口拖动。"""
def mousePressEvent(self, event):
if event.buttons() == Qt.LeftButton:
self.setCursor(Qt.OpenHandCursor)
self.parent.m_drag = True
self.parent.m_DragPosition = event.globalPos()-self.parent.pos()
event.accept() def mouseMoveEvent(self, event):
try:
if event.buttons() and Qt.LeftButton:
self.parent.move(event.globalPos()-self.parent.m_DragPosition)#move将窗口移动到指定位置
event.accept()
except AttributeError:
pass def mouseReleaseEvent(self, event): if event.button()==Qt.LeftButton:
self.m_drag = False
self.unsetCursor()