Event object is a Python object that contains a number of attributes describing the event. Event object is specific to the generated event type.
事件对象其实就是一个python对象,它包含了一些用来描述事件的属性,事件对象就是产生的事件类型的一个具体化。
和前面的按键事件处理一样,重写QWidget的对应方法就行了。
处理鼠标移动事件时注意:self.setMouseTracking(True)
Mouse tracking is disabled by default, so the widget only receives mouse move events when at least one mouse button is pressed while the mouse is being moved. If mouse tracking is enabled, the widget receives mouse move events even if no buttons are pressed.
代码:
# coding='utf-8'
from PyQt5.QtWidgets import QApplication, QWidget,\
QLabel, QGridLayout
from PyQt5.QtCore import Qt
import sys
class Gui(QWidget):
def __init__(self):
super(Gui, self).__init__()
self.start()
def start(self):
# 创建表格布局控件
grid = QGridLayout()
x, y = 0, 0
# 创建一个类属性:text,作用是在类的不同方法之间通信
self.text = 'x: {}, y: {}'.format(x, y)
# construct function: QLabel(str, parent, flags)
# 把label设置成类属性的目的是为了在类的不同方法之间通信
self.label = QLabel(self.text, self)
# 给表格组件添加一个组件:label,同时将它放置在(0, 0)的位置
# 构造函数: addWidget(a0, row, column, alignment)
# a0是待添加的组件,row,column是行和列,\
# alignment是成直线的意思,大概是设置对齐的方式,这里设置成top,上方
grid.addWidget(self.label, 0, 0, Qt.AlignTop)
# 让鼠标每次移动都会触发mouseMoveEvent事件,\
# 默认是False(只能先捕捉到鼠标点击事件,变成True后可以捕捉鼠标移动事件)
self.setMouseTracking(True)
# 把QWidget的默认布局改变成前面创建的表格布局
self.setLayout(grid)
self.setGeometry(300, 300, 350, 200)
self.setWindowTitle('鼠标移动事件处理')
self.show()
def mouseMoveEvent(self, e) -> None:
# 如果想在这里查看所有e的属性,可以print(dir(e))
x, y = e.x(), e.y()
self.text = 'x: {}, y: {}'.format(x, y)
self.label.setText(self.text)
win = QApplication(sys.argv)
gui = Gui()
sys.exit(win.exec_())
运行结果:
image.png
网友评论