PyQt의 기본 창과 스레드 간에 데이터를 안전하게 통신하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-11-01 12:50:15
원래의
327명이 탐색했습니다.

How can I safely communicate data between the main window and a thread in PyQt?

기본 창과 PyQt 스레드 간 데이터 통신

PyQt 애플리케이션에서 일반적인 시나리오는 기본 창과 스레드 간에 데이터를 공유하는 것입니다. 스레드 안전성을 유지하면서 스레드. 권장되는 접근 방식은 다음과 같습니다.

신호 및 슬롯:

  • 스레드 클래스에서 사용자 정의 Qt 신호(예: beep())를 선언합니다.
  • 메인 창의 신호를 관련 위젯을 업데이트하는 슬롯에 연결합니다. 예: update().

예:

<code class="python">class Worker(QtCore.QThread):
    beep = QtCore.pyqtSignal(int)

    def __init__(self, sleep_time):
        super(Worker, self).__init__()
        self.sleep_time = sleep_time

    def run(self):
        i = 0
        while True:
            i += 1
            self.beep.emit(i)
            time.sleep(self.sleep_time)

class MainWindow(QtGui.QWidget):
    def __init__(self):
        # ...
        self.worker = Worker(1)  # Initial sleep time
        self.worker.beep.connect(self.update)
        self.worker.start()

    def update(self, number):
        # Update widget with number
        self.output.display(number)</code>
로그인 후 복사

주의 사항:

  • Qt 위젯은 다음과 같습니다. 스레드로부터 안전하지 않으며 기본에서만 액세스해야 합니다. thread.
  • 여러 스레드에서 액세스할 때 전역 변수가 예상대로 작동하지 않을 수 있습니다.

기타 접근 방식:

  • 호스트 창 참조 전달: QObject 스레드 선호도에 의존하고 경쟁으로 이어질 수 있으므로 위험합니다. 조건.
  • 동기화된 복사본 유지: 기본 창과 스레드 간의 일관성을 유지해야 하며 이는 복잡할 수 있습니다.

위 내용은 PyQt의 기본 창과 스레드 간에 데이터를 안전하게 통신하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!