【发布时间】:2019-10-10 12:22:41
【问题描述】:
我想实时跟踪鼠标在 matplot 画布上的位置。
现在,我构建了一个 MplWidget,它继承了 Qwidget(就像一个容器),然后在它上面构建了一个画布来显示绘图。但是,问题是我只能在除画布区域之外的填充区域中跟踪鼠标的位置。
由于我的画布继承了不是 QWidget 的 matplotlib.figure,因此它没有 setMouseTracking() 属性。这样,如何解决这个问题?
我发现了一个非常有用的链接How to return mouse coordinates in realtime?。然而,它也面临同样的问题。当鼠标在标签(文本区域)上时,跟踪功能似乎被中断了。
我的这个类的代码如下所示:
from PyQt5.QtWidgets import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class MplWidget(QWidget):
def __init__(self, parent=None):
# QWidget.__init__(self, parent)
super(QWidget, self).__init__(parent)
self.canvas = FigureCanvas(Figure())
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.canvas)
self.canvas.axes = self.canvas.figure.add_subplot(111)
self.setLayout(vertical_layout)
self.setMouseTracking(True)
def mouseMoveEvent(self, e):
text = "x: {0}, y: {1}".format(e.x(), e.y())
print(text)
super(MplWidget, self).mouseMoveEvent(e)
def mousePressEvent(self, e):
print('click!')
【问题讨论】:
标签: python matplotlib pyqt pyqt5