728x90
728x90

QAction에서 triggered 시그널을 사용할 때, 인자를 triggered 메서드에 전달하는 방법

  • PyQt의 @QAction@에서 @triggered@ 시그널을 사용할 때, 인자를 @triggered@ 메서드에 전달하는 방법을 알아보자.

 

람다 함수 사용하기

action = QAction("My Action", parent)
action.triggered.connect(lambda: my_function(arg1, arg2))
  • my_functionarg1arg2를 인자로 받는 함수이다.
  • triggered 시그널이 발생하면, 람다 함수가 호출되고 my_function이 호출된다.
  • arg1arg2는 람다 함수에서 직접 전달된다.

 

@functools.partial@ 사용하기

import functools

action = QAction("My Action", parent)
action.triggered.connect(functools.partial(my_function, arg1, arg2))

 

  • @functools.partial@ 함수는 함수와 인자를 받아 새로운 함수를 생성하는 역할을 한다.
  • 위의 예제에서 @my_function@에 @arg1@과 @arg2@를 부분적으로 적용하여 새로운 함수를 생성하고, 이 함수를 @triggered@ 시그널에 연결한다.

 

Subclassing 사용하기

class MyAction(QAction):
    def __init__(self, arg1, arg2, parent=None):
        super().__init__("My Action", parent)
        self.arg1 = arg1
        self.arg2 = arg2
        self.triggered.connect(self.triggered_handler)
    
    def triggered_handler(self):
        my_function(self.arg1, self.arg2)

action = MyAction(arg1, arg2, parent)

 

  • @MyAction@ 클래스를 정의하고 @QAction@을 상속받은 후, 생성자에서 @arg1@과 @arg2@를 인스턴스 변수로 저장하고, @triggered@ 시그널을 @triggered_handler@ 메서드에 연결한다.
  • @triggered_handler@ 메서드에서는 @my_function@을 호출하고 @arg1@과 @arg2@를 전달한다.
  • 이렇게 작성된 @MyAction@ 클래스의 인스턴스를 생성하여 사용한다.
728x90
728x90