python 如何禁用pyqtgraph的默认上下文菜单?

5cg8jx4n  于 2023-05-05  发布在  Python
关注(0)|答案(4)|浏览(196)

谁能帮我禁用pyqtgraph的上下文菜单或删除其中的一些选项?

mspsb9vt

mspsb9vt1#

我自己一直在做这件事,这是我发现的(截至2021年5月)。作为参考,下图是PyQtGraph PlotWidget出现的右键单击菜单,但并非所有项目(QActions)都是由PlotWidget本身添加的。

  • 分隔符上方的菜单项由ViewBox菜单(源代码here)创建,可以通过PlotItem.vbPlotItem.getViewBox()访问(如果您有PlotWidget,则可以通过PlotWidget.getPlotItem()获得PlotItem)。菜单项(QAction s)可以通过PlotItem.vb.menu.actions()(Qt参考here)访问,也可以通过检查QAction.text()找到您想要更改或删除的QAction来删除。
  • PlotItem(源代码在这里)创建一个名为ctrlMenu的菜单,其中包含绘图选项(例如变换、下采样)。这是上图中的“绘图选项”子菜单,不出现在PlotItem.vb.menu.actions()中,但可以通过PlotItem.ctrlMenu.menuAction()StackOverflow reference)访问。
  • “Export...”选项来自底层的GraphicsScene(源代码在这里),可以通过ViewBox.scene().contextMenu[0]访问,它提供了“Export...”QAction。
  • 任何QAction都可以通过QAction.setVisible()Qt reference)隐藏/显示
7lrncoxx

7lrncoxx2#

使用PlotItem.setMenuEnabled方法。类似于:

self.plot = pg.PlotItem()
    self.plot.setMenuEnabled(False)

我还没有找到一种方法来删除它的选项,但也许这是可能的。我也会对这个感兴趣。

kadbb459

kadbb4593#

找到了一种编辑和删除选项的方法,看看这个:ViewBoxMenu
删除导出...选项在这里找到:导出...(contextMenu)
我刚刚清理了列表:

export = self.gui.Display.ui.graphicsView.sceneObj.contextMenu
del export[:]
zqdjd7g9

zqdjd7g94#

在实践中,为了实现Elliot的答案,我将子类Viewbox,在初始化之后,您可以隐藏您不想使用的默认ViewBoxMenu的操作。然后,您可以将自己的操作添加到self.menu
下面我隐藏“X轴”选项,并在默认的ViewBox上下文菜单中添加一个子菜单来更改背景颜色。

plot = pg.PlotWidget(title="New Menu",viewBox=NewViewBox())
class NewViewBox(pg.ViewBox):
        def __init__(self,parent=None):
            super(NewViewBox, self).__init__(parent)

            self.myMenuEdit() 

        def myMenuEdit(self):
            #Hide Default Actions
            MenusToHide = ["X axis"] #Names of menus to hide
            w = self.menu.actions()
            for m in w:
                for mhs in MenusToHide:
                    if (m.text().startswith(mhs)):
                        m.setVisible(False)
                        break

            #AddMySubMenu
            leftMenu = self.menu.addMenu("Background color")
            group = QtGui.QActionGroup(self)
            Yellow = QtGui.QAction(u'Yellow', group)
            Red = QtGui.QAction(u'Red', group)
            leftMenu.addActions(group.actions())
            Yellow.setCheckable(True)
            Red.setCheckable(True)
            group.triggered.connect(self.setBgColor)
            self.bgActions=[Yellow,Red]



        def setBgColor(self, action):
              mode = None
              if action == self.bgActions[0]:
                  self.setBackgroundColor("y")
              elif action == self.bgActions[1]:
                  self.setBackgroundColor("r")

请注意,ViewBox的每个父对象(具有方法getContextMenus)都有自己的菜单选项,每次单击时,通过在函数raiseContextMenu中调用self.scene().addParentContextMenus(self, menu, ev),它们将被加载并添加到菜单中。
例如,PlotItem添加了“导出”和“打印选项”。如果需要,可以覆盖每个父类的菜单。

相关问题