'Can I have a Signal list in PySide6?

I have a customized QLabel that can be clicked:

class ClickedLabel(QLabel):
    l_clicked = Signal()
    r_clicked = Signal()
    m_clicked = Signal()

    def __init__(self):
        super().__init__()
        self.style_sheet = 'QLabel {background-color: pink}'
        self.alignment = Qt.AlignCenter

    def mouse_press_event(self, ev: QMouseEvent) -> None:
        if ev.button() == Qt.RightButton:
            self.r_clicked.emit()
        elif ev.button() == Qt.LeftButton:
            self.l_clicked.emit()
        elif ev.button() == Qt.MiddleButton:
            self.m_clicked.emit()

    def set_buttons_functions(self, *funcs):
        signals = [self.l_clicked, self.r_clicked, self.m_clicked]
        for func, signal in zip(funcs, signals):
            signal.connect(func)

It works fine.

Now I want to make three Singnal()s a list, so the code counld be like this:

class ClickedLabel(QLabel):
    signals = [Signal()] * 3

    def __init__(self):
        super().__init__()
        self.style_sheet = 'QLabel {background-color: pink}'
        self.alignment = Qt.AlignCenter

    def mouse_press_event(self, ev: QMouseEvent) -> None:
        buttons = [Qt.LeftButton, Qt.RightButton, Qt.MiddleButton]
        self.signals[buttons.index(ev.button())].emit()

    def set_buttons_functions(self, *funcs):
        for func, signal in zip(funcs, self.signals):
            signal.connect(func)

Then I got an error:

AttributeError: 'PySide6.QtCore.Signal' object has no attribute 'connect'

How could I fix it?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source