개발/Python

[파이썬 PyQt] 선택적 신호 인수

MinorMan 2022. 11. 28. 04:12
반응형

<질문>

기본 키워드 인수가 있는 함수가 있습니다. 내 신호에 두 개의 인수가 있으면 두 인수를 모두 전달해야 한다는 오류가 계속 발생하기 때문에 이것을 구현하는 데 문제가 있습니다. 이 문제를 해결할 방법이 있습니까?

class Controller(QWidget):
    trigger = pyqtSignal(str, str)
    def __init__(self):
        self.trigger.connect(self.myfunc)

    @pyqtSlot(str, str)
    def function(argument, optional_argument=''):
         do something

c = Controller()
c.trigger.emit('Hello', 'World') # This works
c.trigger.emit('Hello')  # This fails and says I need 2 arguments

<답변1>

신호가 지원하는 유형을 오버로드하는 것 외에도 연결에서 서명을 가리키는 연결을 만들어야 합니다.

import sys
from PyQt5 import QtCore


class Controller(QtCore.QObject):
    trigger = QtCore.pyqtSignal([str], [str, str])

    def __init__(self):
        super(Controller, self).__init__()
        self.trigger[str].connect(self.function)
        self.trigger[str, str].connect(self.function)

    @QtCore.pyqtSlot(str)
    @QtCore.pyqtSlot(str, str)
    def function(self, argument,  optional_argument=''):
        print(argument, optional_argument)


def main():
    app = QtCore.QCoreApplication(sys.argv)
    c = Controller()
    c.trigger[str].emit('Hello')
    c.trigger[str, str].emit('Hello', 'World')
    QtCore.QTimer.singleShot(100, QtCore.QCoreApplication.quit)
    sys.exit(app.exec_())


if __name__ == "__main__":
     main()
반응형