신호에 연결할 때 PYQT 매개 변수를 슬롯으로 보내는 매개 변수

StackOverflow https://stackoverflow.com/questions/940555

  •  06-09-2019
  •  | 
  •  

문제

클릭 할 때 트리거 이벤트를 가져 오는 슬롯에 연결되는 작업 표시 줄 메뉴가 있습니다. 이제 문제는 클릭 한 메뉴 항목을 알고 싶지만 해당 정보를 연결된 기능으로 보내는 방법을 모르겠습니다. 동작을 기능에 연결하는 데 사용되는 것은 다음과 같습니다.

QtCore.QObject.connect(menuAction, 'triggered()', menuClickedFunc)

일부 이벤트가 값을 반환한다는 것을 알고 있지만 트리거 ()은 그렇지 않습니다. 그래서 어떻게 이런 일을합니까? 내 자신의 신호를 만들어야합니까?

도움이 되었습니까?

해결책

a lambda

다음은 다음과 같습니다 PYQT 책:

self.connect(button3, SIGNAL("clicked()"),
    lambda who="Three": self.anyButton(who))

그건 그렇고, 당신은 또한 사용할 수 있습니다 functools.partial, 그러나 나는 그것을 발견한다 lambda 메소드는 더 간단하고 명확합니다.

다른 팁

이미 언급했듯이 여기 Lambda 함수를 사용하여 실행하려는 메소드에 추가 인수를 전달할 수 있습니다.

이 예에서는 버튼을 누르면 addControl ()을 호출 한 함수로 문자열 OBJ를 전달할 수 있습니다.

# Create the build button with its caption
self.build_button = QPushButton('&Build Greeting', self)
# Connect the button's clicked signal to AddControl
self.build_button.clicked.connect(lambda: self.AddControl('fooData'))
def AddControl(self, name):
    print name

원천: snip2code -pyqt4에서 추가 인수를 전달하기 위해 Lambda 함수를 사용합니다.

funcTools.partial을 사용하십시오

그렇지 않으면 Lambda를 사용하는 경우 스크립트가 실행될 때 인수를 동적으로 전달할 수 없다는 것을 알게됩니다.

일반적으로 각 메뉴 항목이 다른 슬롯에 연결되어 있어야하며 각 슬롯이 자체 메뉴 항목에 대해서만 기능을 처리해야합니다. 예를 들어, "저장", "Close", "Open"과 같은 메뉴 항목이있는 경우 각각에 대해 별도의 슬롯을 만들어야합니다.

그렇게하고 싶지 않다면 사용할 수 있습니다. qobject :: sender () 기능은 발신자에 대한 포인터를 얻기 위해 (예 : 신호를 방출 한 객체)를 얻습니다. 그래도 당신이 성취하려는 것에 대해 조금 더 듣고 싶습니다.

나는 또한 당신이 사용할 수 있다고 덧붙이고 싶습니다. sender 방법 신호를 보낸 위젯을 찾아야하는 경우 방법. 예를 들어:

def menuClickedFunc(self):
    # The sender object:
    sender = self.sender()
    # The sender object's name:
    senderName = sender.objectName()
    print senderName
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top