python - PyDesigner PyQt5 MouseEvent 不工作 setMouseTracking(True)
问题描述
如何让 MouseEvent 工作?
我尝试打印鼠标跟踪以标记 x,y 坐标,但总是失败。我已经在使用setMouseTracking(True)
,从 QtDesigner ui 生成到 py。
下面的代码:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(640, 480)
Form.setMouseTracking(True)
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(270, 190, 58, 15))
self.label.setObjectName("label")
self.label.setMouseTracking(True)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label.setText(_translate("Form", "TextLabel"))
def mouseMoveEvent(self, e):
x = e.x()
y = e.y()
text = "x: {0}, y: {1}".format(x, y)
self.label.setText(text)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
解决方案
Ui_Form 不是小部件,因此它不会具有 mouseMoveEvent 方法,正如PyQt 文档指出的那样,您必须创建一个继承适当小部件的类,在本例中为 QWidget,并使用 Qt Designer 提供的接口:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(640, 480)
Form.setMouseTracking(True)
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(270, 190, 58, 15))
self.label.setObjectName("label")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label.setText(_translate("Form", "TextLabel"))
class Form(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.setupUi(self)
self.setMouseTracking(True)
def mouseMoveEvent(self, e):
text = "x: {0}, y: {1}".format(e.x(), e.y())
self.label.setText(text)
self.label.adjustSize()
super(Form, self).mouseMoveEvent(e)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Form()
w.show()
sys.exit(app.exec_())
推荐阅读
- canvas - Fabricjs 画布对象在 Safari 浏览器中返回空白图像
- python - 如何在 Numpy 中获取大于阈值的最大 N 值的索引?
- python - 用于提取字典特定部分的 for 循环方法
- audio - Gstreamer 合并实时音频(麦克风输入)和视频(网络摄像头输入)管道以通过 UDP 发送
- django-models - 方法 __str__ 输出所有作为回报的字段
- ios - 在 MacBook Air M1 上构建 iOS Flutter App 时出错
- c# - ids4如何根据用户id从数据库中获取用户生成access_token
- spring-boot - 如何使用从一对一或一对多关系获得的行执行 JPQL?
- python - suds-py3 中的日期时间格式
- visual-c++ - C26434 函数 xxx 隐藏了一个非虚拟函数