谁能帮我禁用pyqtgraph的上下文菜单或删除其中的一些选项?
mspsb9vt1#
我自己一直在做这件事,这是我发现的(截至2021年5月)。作为参考,下图是PyQtGraph PlotWidget出现的右键单击菜单,但并非所有项目(QActions)都是由PlotWidget本身添加的。
PlotItem.vb
PlotItem.getViewBox()
PlotWidget
PlotWidget.getPlotItem()
PlotItem
QAction
PlotItem.vb.menu.actions()
QAction.text()
ctrlMenu
PlotItem.ctrlMenu.menuAction()
GraphicsScene
ViewBox.scene().contextMenu[0]
QAction.setVisible()
7lrncoxx2#
使用PlotItem.setMenuEnabled方法。类似于:
self.plot = pg.PlotItem() self.plot.setMenuEnabled(False)
我还没有找到一种方法来删除它的选项,但也许这是可能的。我也会对这个感兴趣。
kadbb4593#
找到了一种编辑和删除选项的方法,看看这个:ViewBoxMenu删除导出...选项在这里找到:导出...(contextMenu)我刚刚清理了列表:
export = self.gui.Display.ui.graphicsView.sceneObj.contextMenu del export[:]
zqdjd7g94#
在实践中,为了实现Elliot的答案,我将子类Viewbox,在初始化之后,您可以隐藏您不想使用的默认ViewBoxMenu的操作。然后,您可以将自己的操作添加到self.menu。下面我隐藏“X轴”选项,并在默认的ViewBox上下文菜单中添加一个子菜单来更改背景颜色。
Viewbox
ViewBoxMenu
self.menu
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添加了“导出”和“打印选项”。如果需要,可以覆盖每个父类的菜单。
getContextMenus
raiseContextMenu
self.scene().addParentContextMenus(self, menu, ev)
4条答案
按热度按时间mspsb9vt1#
我自己一直在做这件事,这是我发现的(截至2021年5月)。作为参考,下图是PyQtGraph PlotWidget出现的右键单击菜单,但并非所有项目(QActions)都是由PlotWidget本身添加的。
PlotItem.vb
或PlotItem.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)访问。GraphicsScene
(源代码在这里),可以通过ViewBox.scene().contextMenu[0]
访问,它提供了“Export...”QAction。QAction
都可以通过QAction.setVisible()
(Qt reference)隐藏/显示7lrncoxx2#
使用PlotItem.setMenuEnabled方法。类似于:
我还没有找到一种方法来删除它的选项,但也许这是可能的。我也会对这个感兴趣。
kadbb4593#
找到了一种编辑和删除选项的方法,看看这个:ViewBoxMenu
删除导出...选项在这里找到:导出...(contextMenu)
我刚刚清理了列表:
zqdjd7g94#
在实践中,为了实现Elliot的答案,我将子类
Viewbox
,在初始化之后,您可以隐藏您不想使用的默认ViewBoxMenu
的操作。然后,您可以将自己的操作添加到self.menu
。下面我隐藏“X轴”选项,并在默认的
ViewBox
上下文菜单中添加一个子菜单来更改背景颜色。请注意,
ViewBox
的每个父对象(具有方法getContextMenus
)都有自己的菜单选项,每次单击时,通过在函数raiseContextMenu
中调用self.scene().addParentContextMenus(self, menu, ev)
,它们将被加载并添加到菜单中。例如,
PlotItem
添加了“导出”和“打印选项”。如果需要,可以覆盖每个父类的菜单。