首页 > 解决方案 > 从 Pyqt5 图表中获取值

问题描述

将鼠标悬停在某个位置上时,尝试从 pyqt5 图表中提取值。

该系列是一个烛台系列,其值为 Adj_Open、Adj_High、Adj_Low、Adj_Close。

def call_sym_data(self):
    self.chartlayout.removeWidget(self.chartviewer)
    sym = self.sym_input.text()
    sym_raw = quandl.get("EOD/"+sym, start_date = sdate, end_date = edate)
    self.symlabel.setText(self.sym_input.text())
    can_data = pd.DataFrame( columns = ['Adj_Open','Adj_High','Adj_Low','Adj_Close'])
    can_data['Adj_Open'] = sym_raw['Adj_Open']
    can_data['Adj_High'] = sym_raw['Adj_High']
    can_data['Adj_Low'] = sym_raw['Adj_Low']
    can_data['Adj_Close'] = sym_raw['Adj_Close']
    
    print(can_data)
    sym_date = sym_raw.index
    
    series = QCandlestickSeries()
    series.setDecreasingColor(Qt.red)
    series.setIncreasingColor(Qt.green)
    
    
    for  index, row in can_data.iterrows():
        series.append(QCandlestickSet(row['Adj_Open'], row['Adj_High'], row['Adj_Low'], row['Adj_Close']))
        
       
    
    self.sym_chart = QChart()
    
    self.sym_chart.addSeries(series)
    
    self.sym_chart.setAnimationOptions(QChart.SeriesAnimations)
    self.sym_chart.createDefaultAxes()
    self.sym_chart.legend().hide()
    
    self.sym_chart.axisX(series).setCategories(sym_date.strftime("%Y-%m-%d"))
    
    
    self.chartviewer = QChartView(self.sym_chart)
    self.chartlayout.addWidget(self.chartviewer)

目标是将鼠标悬停在特定栏上,并让它在图片中的输出上更改 Open、High、Low 和 Close 的标签。标签是 bar_open、bar_high、bar_low 和 bar_close。

符号图

我不知道如何悬停工作并显示每个值,并且 mapToPosition 似乎没有帮助。

标签: pythonpyqt5qchart

解决方案


有一个可用的 QCandlestickSeries 信号 - 悬停。由于悬停在相应的烛台集上,这将在发射时返回底层的 QCandlestickSet。

可以添加一个插槽并将其连接到该信号。在槽中,可以提取来自 QCandlestickSet 的数据并用于更新标签。

虽然有一个问题 - 为插槽添加 pyqtSlot 装饰器。以下信号出错

QObject::connect: Incompatible sender/receiver arguments  QtCharts::QCandlestickSeries::doubleClicked(QCandlestickSet*)

推荐阅读