>백엔드 개발 >파이썬 튜토리얼 >PyQt의 Qt 슬롯에 추가 인수를 어떻게 전달할 수 있습니까?

PyQt의 Qt 슬롯에 추가 인수를 어떻게 전달할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-19 16:48:03295검색

How Can I Pass Extra Arguments to Qt Slots in PyQt?

Qt 슬롯을 통해 추가 인수 전달

PyQt 애플리케이션에서 슬롯은 신호가 발생할 때 호출되는 멤버 함수입니다. 이러한 신호는 버튼이나 위젯과 같은 다양한 Qt 객체에서 방출될 수 있습니다. 기본적으로 슬롯은 신호에 의해 전달된 매개변수를 수신합니다. 그러나 슬롯에 추가 인수를 전달하는 것도 가능합니다.

문제: 슬롯을 통해 변수 전달

다음 시나리오를 고려하십시오. DiffP라는 변수를 정의하는 함수가 있습니다. 이 변수를 버튼 클릭 이벤트에 연결된 슬롯에 전달하려고 합니다.

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        [...]
        self.button.clicked.connect(self.some_slot)

    def some_slot(self):
        # Here you want to access the 'DiffP' variable defined in another function

해결책: Lambda 함수 사용

슬롯을 통해 추가 인수를 전달하는 한 가지 방법은 람다를 사용하는 것입니다. 기능. Lambda 함수는 인라인으로 정의할 수 있는 익명 함수입니다. 기본 슬롯 매개변수와 전달하려는 추가 인수를 모두 사용하는 람다 함수를 생성할 수 있습니다.

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        [...]
        self.button.clicked.connect(lambda: self.some_slot("DiffP"))

    def some_slot(self, DiffP):
        # Here you can access the 'DiffP' variable

이 예에서 람다 함수는 추가 인수 DiffP를 사용하여 some_slot 함수에 전달합니다. .

해결책: functools.partial 사용

슬롯을 통해 추가 인수를 전달하는 또 다른 방법은 functools.partial 함수를 사용하는 것입니다. 부분 함수는 일부 인수가 부분적으로 적용되는 새 함수를 만듭니다. 부분을 ​​사용하여 기본 슬롯 매개변수만 사용하고 추가 인수를 바인딩된 인수로 전달하는 함수를 생성할 수 있습니다.

from functools import partial

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        [...]
        self.button.clicked.connect(partial(self.some_slot, "DiffP"))

    def some_slot(self, DiffP):
        # Here you can access the 'DiffP' variable

이 예에서 부분 함수는 버튼_or_id 매개변수만 사용하는 새 함수를 생성합니다. DiffP 인수를 바인딩합니다. 슬롯이 호출되면 올바른 인수를 사용하여 새 함수가 호출됩니다.

위 내용은 PyQt의 Qt 슬롯에 추가 인수를 어떻게 전달할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.