簡體   English   中英

pyqtgraph:如何在圖形圖例上添加單選按鈕?

[英]pyqtgraph: How to add radiobuttons on a figure legend?

我想通過使用浮動在左上角的單選按鈕來控制在圖中顯示哪些曲線,這也可以用作圖例。 我怎樣才能做到這一點?

這可以通過繼承pg.LegendItem和覆蓋addItem方法來實現。 您需要在其中創建小部件並將它們放入布局中。 您可以使用QGraphicsProxyWidgetQGraphicsScene ( QRadioButton ) 上顯示 QRadioButton。

import pyqtgraph as pg
from pyqtgraph.graphicsItems.LegendItem import ItemSample
from PyQt5 import QtCore, QtGui, QtWidgets

class LegendItem(pg.LegendItem):

    clicked = QtCore.pyqtSignal(int)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._group = QtWidgets.QButtonGroup()

    def addItem(self, item, name):
        widget = QtWidgets.QRadioButton(name)
        palette = widget.palette()
        palette.setColor(QtGui.QPalette.Window, QtCore.Qt.transparent)
        palette.setColor(QtGui.QPalette.WindowText, QtCore.Qt.white)
        widget.setPalette(palette)
        self._group.addButton(widget)
        row = self.layout.rowCount()
        widget.clicked.connect(lambda: self.clicked.emit(row))
        proxy = item.scene().addWidget(widget)
        if isinstance(item, ItemSample):
            sample = item
        else:
            sample = ItemSample(item)
        self.layout.addItem(proxy, row, 0)
        self.layout.addItem(sample, row, 1)
        self.items.append((proxy, sample))
        self.updateSize()

if __name__ == '__main__':
    app = QtWidgets.QApplication([])

    plt = pg.PlotWidget()
    plt.setWindowTitle('Legend with radiobuttons')
    
    legend = LegendItem(verSpacing=5, horSpacing=5)
    legend.setParentItem(plt.getViewBox())

    plt.plotItem.legend = legend

    c1 = plt.plot([1,3,2,4], pen='r', symbol='o', symbolPen='r', symbolBrush=0.5, name='red plot') 
    c2 = plt.plot([2,1,4,3], pen='g', fillLevel=0, fillBrush=(255,255,255,30), name='green plot')

    def onClicked(index):
        print("{} clicked".format(index))

    legend.clicked.connect(onClicked)

    plt.show()

    app.exec()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM