PyQt는 객체 간 통신을 위한 다양한 신호 및 슬롯 메커니즘을 제공합니다. 이벤트에 대해 리스너에게 알리기 위해 신호가 내보내지는 반면, 슬롯은 신호가 수신될 때 실행되는 메서드입니다. 일반적인 사용 사례 중 하나는 신호에서 슬롯으로 데이터를 전달하는 것입니다. 하지만 신호와 함께 추가 데이터를 전송하려면 어떻게 해야 할까요? 이 글에서는 람다 함수와 functools.partial을 사용하여 신호를 통해 추가 인수를 전달하는 방법을 살펴보겠습니다.
Python에서 람다 함수는 다음을 수행할 수 있는 익명 함수입니다. 인라인으로 정의해야 합니다. 이는 슬롯의 정의를 수정하지 않고 슬롯에 추가 인수를 전달하는 편리한 방법을 제공합니다. 구문은 다음과 같습니다.
signal.connect(lambda param1, param2, ..., arg1=val1, arg2=value2, ... : fun(param1, param2,... , arg1, arg2, ....))
여기서:
예를 들어 다음을 고려하세요. code:
def addLineEdit(self): self.buttonGroup.buttonClicked['int'].connect(lambda i: self.input(i, "text")) @pyqtSlot(int) def input(self, button_or_id, DiffP): if isinstance(button_or_id, int): if button_or_id == 0: self.TotalInput[0].setText(DiffP) elif button_or_id == 1: self.TotalInput[54].setText('1')
이 예에서 ButtonClicked 신호는 추가 인수 "text"를 전달하는 람다 함수를 사용하여 슬롯(입력)에 연결됩니다. 그런 다음 입력 슬롯은 DiffP 인수를 사용하여 TotalInput 위젯을 수정합니다.
신호를 통해 추가 인수를 전달하는 또 다른 접근 방식은 functools.partial을 사용하는 것입니다. 이 함수는 원래 함수 인수의 하위 집합이 이미 채워진 새 함수를 생성합니다. 구문은 다음과 같습니다.
signal.connect(partial(fun, args1, arg2, ... ))
여기서:
예를 들어 다음 코드를 고려하세요.
from functools import partial self.buttonGroup.buttonClicked['int'].connect(partial(self.input, "text")) @pyqtSlot(int) def input(self, DiffP, button_or_id): if isinstance(button_or_id, int): if button_or_id == 0: self.TotalInput[0].setText(DiffP) elif button_or_id == 1: self.TotalInput[54].setText('1')
이 예에서 functools.partial은 이미 "text" 인수가 바인딩된 새 함수를 만드는 데 사용됩니다. . ButtonClicked 신호가 방출되면 DiffP 인수와 이전에 전달된 "text" 인수를 사용하여 입력 슬롯이 호출됩니다.
신호를 통해 추가 인수를 전달하는 것은 PyQt에서 유용한 기술이 될 수 있습니다. 개발. 이를 통해 신호와 함께 추가 데이터를 전송할 수 있어 개체 간의 통신이 강화됩니다. 람다 함수와 functools.partial의 사용을 이해하면 PyQt 애플리케이션에서 이 기능을 효과적으로 활용할 수 있습니다.
위 내용은 PyQt에서 신호를 통해 추가 인수를 어떻게 전달할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!