您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在QWidget中的matplot画布上跟踪鼠标?

如何在QWidget中的matplot画布上跟踪鼠标?

如您所见,画布不是由Qt处理,而是由matplotlib处理,因此解决方案是使用该库提供的事件,如果您查看文档,会发现存在以下事件:

'button_press_event'  MouseEvent - mouse button is pressed
'button_release_event'    MouseEvent - mouse button is released
'draw_event'  DrawEvent - canvas draw (but before screen update)
'key_press_event' KeyEvent - key is pressed
'key_release_event'   KeyEvent - key is released
'motion_notify_event' MouseEvent - mouse motion
'pick_event'  PickEvent - an object in the canvas is selected
'resize_event'    ResizeEvent - figure canvas is resized
'scroll_event'    MouseEvent - mouse scroll wheel is rolled
'figure_enter_event'  LocationEvent - mouse enters a new figure
'figure_leave_event'  LocationEvent - mouse leaves a figure
'axes_enter_event'    LocationEvent - mouse enters a new axes
'axes_leave_event'    LocationEvent - mouse leaves an axes

在您的情况下,您应该使用以下事件:

例:

from PyQt5 import QtWidgets

from matplotlib.backends.backend_qt5agg import figureCanvasQTAgg as figureCanvas
from matplotlib.figure import figure


class MplWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(MplWidget, self).__init__(parent)
        self.canvas = figureCanvas(figure())

        vertical_layout = QtWidgets.QV@R_11_2419@Layout(self)
        vertical_layout.addWidget(self.canvas)

        self.canvas.axes = self.canvas.figure.add_subplot(111)

        self.canvas.mpl_connect("button_press_event", self.on_press)
        self.canvas.mpl_connect("button_release_event", self.on_release)
        self.canvas.mpl_connect("motion_notify_event", self.on_move)

    def on_press(self, event):
        print("press")
        print("event.xdata", event.xdata)
        print("event.ydata", event.ydata)
        print("event.inaxes", event.inaxes)
        print("x", event.x)
        print("y", event.y)

    def on_release(self, event):
        print("release:")
        print("event.xdata", event.xdata)
        print("event.ydata", event.ydata)
        print("event.inaxes", event.inaxes)
        print("x", event.x)
        print("y", event.y)

    def on_move(self, event):
        print("move")
        print("event.xdata", event.xdata)
        print("event.ydata", event.ydata)
        print("event.inaxes", event.inaxes)
        print("x", event.x)
        print("y", event.y)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MplWidget()
    w.show()
    sys.exit(app.exec_())
其他 2022/1/1 18:36:28 有560人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶