PyQt5中如何在另一个类中正确实现一个类

问题描述 投票:0回答:1

我有一个类,用户可以在表中选择他想要绘制的数据。在这个类中当然有一个表格,右侧有一个图表,其中绘制了所选数据。 该图本身就是一个类,每当我通过主类中的按钮添加一个图时,它都会创建该图的一个实例。 我可以在用户之前选择的图表上正确绘制线条,即使它是更多数据。

用户还应该能够单击该线,相应的线将存储在 self.__selected_curve 中。目的是能够使用滑块上/下、左/右移动线条。

我之前通过在主类中实现图表来尝试过这一点,所以它只是一个类。像这样它工作得很好。然而,当我为图形创建一个单独的类时,相同的方法不再起作用。

line_items 是这样创建的(在图形类中):

    line_item = plot.plot(graph_data[x_col], graph_data[y_col], pen=color, name=curve_name)
    line_item.setCurveClickable(True)
    line_item.sigClicked.connect(lambda c: self._handle_curve_click(c))

然后它应该连接到这个方法:

    def _handle_curve_click(self, curve):
        self.__selected_curve = curve
        print(f"Curve clicked: {self.__selected_curve}")

        # Modify the pen properties of the selected curve
        for graph_type, graph_data in self.selectedGraphsDict.items():
            for line_item, inst in graph_data[1:]:
                pen = line_item.opts['pen']
                pen = pg.mkPen(pen)
                if line_item == curve:
                    selected_pen = pg.mkPen(color=pen.color(), width=2)
                    line_item.setPen(selected_pen)
                else:
                    default_pen = pg.mkPen(color=pen.color(), width=1)
                    line_item.setPen(default_pen)

此方法将曲线存储在 self.__selected_curve 中,并在单击它时使线条变宽,并在单击另一个时将其设置回默认值

通过添加打印语句,我想测试是否得到任何响应 它根本没有响应,所以当我点击曲线时,它没有给我任何回报。 可能是信号没接好?

因为当我在主类中执行相同的方法时它工作得很好,所以它应该以这种方式工作。我只是不确定当我在主类中使用图形实例时信号如何工作。 我在这里需要注意什么? 即使我 .setCurvesClickable(True),该图也根本无法识别鼠标单击。

总结: 我尝试在主类中绘制不同的图表。对于每个图,我创建一个图类的新实例。 表中选择的数据绘制在图表中,然后用户应该能够单击曲线。 我的问题是,它甚至无法识别图形上的鼠标单击,因为我为图形创建了一个单独的类。当我在主类中创建图表时它正在工作。

感谢任何可以让我更接近解决方案的答案:)

python-3.x class pyqt pyqt5 signals-slots
1个回答
0
投票

你实际上并不需要 lambda 这里,你可以这样做

line_item.sigClicked.connect(self._handle_curve_click)
© www.soinside.com 2019 - 2024. All rights reserved.