在Matplotlib画布上正确放置Qmenu

2024-09-25 00:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用QMenu创建一个上下文菜单,当用户通过一个“button_press”事件单击画布时。但是,我在理解如何将button press事件的x/y坐标转换为正确格式以便Qmenu正确放置时遇到了一些困难。在

下面的代码可以工作,但是决定菜单位置的部分看起来有点难看,我想知道是否有更好的方法来放置Qmenu。特别是我必须从画布高度减去Y坐标。这是否可以在某个地方用反转方法代替?在

确定位置:

canvasSize = event.canvas.geometry()
Qpoint_click = event.canvas.mapToGlobal(QtCore.QPoint(event.x,canvasSize.height()-event.y))

完整代码:

^{pr2}$

Tags: 方法代码用户event高度格式画布菜单
1条回答
网友
1楼 · 发布于 2024-09-25 00:23:50

有关转换的说明,请参阅优秀的matplotlib转换教程http://matplotlib.org/users/transforms_tutorial.html。像这样的东西对我很好:

import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas

class menuTest(QtGui.QMainWindow):  

    def __init__(self):
        #....
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        self.canvasMenu = QtGui.QMenu(self)
        ca = QtGui.QAction('Menu item', self)
        ca.triggered.connect(self.menu_item_clicked)
        self.canvasMenu.addAction(ca)
        self.last_point = None

        self.canvas.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.canvas.customContextMenuRequested.connect(self.exec_canvas_menu)

    def exec_canvas_menu(self):
        self.last_point = point
        self.canvasMenu.exec_(self.canvas.mapToGlobal(point))

    def menu_item_clicked(self):
        if self.last_point is None: return
        ax = self.figure.gca()
        print ("Clicked at:", ax.transData.inverted().transform((self.last_point.x(), self.last_point.y())))

相关问题 更多 >