[英]pyqtgraph: How to add radiobuttons on a figure legend?
我想通過使用浮動在左上角的單選按鈕來控制在圖中顯示哪些曲線,這也可以用作圖例。 我怎樣才能做到這一點?
這可以通過繼承pg.LegendItem
和覆蓋addItem
方法來實現。 您需要在其中創建小部件並將它們放入布局中。 您可以使用QGraphicsProxyWidget
在QGraphicsScene
( 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.