QThread & Custom Signal 예시

2022. 10. 11. 19:33·사소한 아이의 소소한 스킬/PyQT5
반응형

이번에는 QThread 사용법이다.

 

다른 언어에서도 다 사용하듯 1개의 쓰레드로 모든 기능을 처리한다는 것은 불가능에 가깝다.

 

특히나 UI가 있다면 더더욱.. (프리징현상 어쩔꺼야...)

 

그리하여 이번엔 QTthread이다.

 

정말 간단한 예제이며

 

QT에서는 QThread말고 QRunnable 등 다른 여러가지 Thread 사용법들이 있다..

 

차차 하나씩 알아보고 이번엔 간단한 QThread만 알아보도록 하자

 

from PySide6.QtCore import *
from PySide6.QtWidgets import *

import sys
import time

# 내 돈
balance = 100

# 돈을 1씩 계속 없애는 QThread
class Balance_decrease(QThread):
    # Custom Signal 생성
    UpdateBalance = Signal()

    # QThread의 주 함수
    def run(self):
        # 내 돈을 Global에서 가져온다.
        global balance
        # 무한 루프
        while True:
            # 내 돈을 1원씩 계속 없앤다
            balance -= 1
            # 없애고 난 돈을 Emit(이벤트 발생)한다.
            self.UpdateBalance.emit()
            # 1초 대기
            time.sleep(1)


# 메인 윈도우
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        # 내 돈 표출할 레이블 하나 추가
        self.lbl = QLabel(str(balance))

        # 쓰레드 호출 버튼
        self.btn1 = QPushButton("FIRE")
        # 버튼 선택 시 함수 연결
        self.btn1.clicked.connect(self.btn1_clicked)

        # UI 설정
        self.layout = QHBoxLayout()
        self.layout.addWidget(self.lbl)
        self.layout.addWidget(self.btn1)

        self.setLayout(self.layout)

    def btn1_clicked(self):
        try:
            # 쓰레드 클래스 선언
            x = Balance_decrease(self)
            # 내 돈에 대한 이벤트 호출 시 함수 연결
            x.UpdateBalance.connect(self.lbl_update)
            # 쓰레드 클래스 시작!
            x.start()

        except KeyboardInterrupt:
            print("KeyboardInterrupt")

    def lbl_update(self):
        # 내 돈 표출
        self.lbl.setText(str(balance))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    app.exec()

 

그렇게까지 어려운 코드가 아니라 다들 이해할 거라 생각함..

 

주로 봐야할 부분은 Signal 선언하고 emit하는 부분과 connect로 연결하는 부분이다.

(PySide6은 Signal, PyQT5는 pyqtSignal로 선언)

 

이부분만 보면 Custom Event를 알 수 있을테고..

 

QTthread는 클래스 생성 시 QThread를 상속받고 run 함수에 특정 기능을 넣는다 정도 하면 될 것 같다.

반응형
저작자표시 비영리 변경금지 (새창열림)
'사소한 아이의 소소한 스킬/PyQT5' 카테고리의 다른 글
  • QDateTimeEdit 사용법
  • QComboBox 사용법
  • QRadioButton 사용법
  • Window, Label, Button 사용법
JOOJI
JOOJI
그냥 혼자좋아하는 것들 남기는 블로그....
  • JOOJI
    사소한프로그래머의 소소한행복
    JOOJI
  • 전체
    오늘
    어제
    • 분류 전체보기 (954) N
      • 사소한 아이의 소소한 일상 (245)
      • 사소한 아이의 소소한 먹거리 (43)
      • 사소한 아이의 소소한 정보 (75) N
      • 사소한 아이의 소소한 감사 (4)
      • 사소한 아이의 소소한 운동 (56) N
      • 사소한 아이의 소소한 여행 (40)
        • 2013_전주 (1)
        • 2014_독일 (13)
        • 2014_군산 (1)
        • 2015_제주도 (3)
        • 2015_서울모토쇼 (3)
        • 2015_진해 (1)
        • 2015_전주 (1)
        • 2016_여수 (1)
        • 2020_강릉 (1)
        • 2022_제주도 (4)
      • 사소한 아이의 소소한 강짱 (22)
        • 하트투하트 (10)
        • MAPS (1)
        • 화려한 유혹 (2)
        • 한여름의 추억 (2)
      • 사소한 아이의 TV (50)
        • Drama (9)
        • 예능 (32)
        • 사소한 아이의 다현 (9)
      • 사소한 아이의 소소한 스킬 (130)
        • Scaleform (2)
        • C# (74)
        • QT (3)
        • 알고리즘 (4)
        • Python (21)
        • PyQT5 (9)
        • C_C++ (2)
      • 사소한 아이의 소소한 축구 (283)
        • Korea (25)
        • Germany (45)
        • Bayern Munich (64)
        • Soccer_ETC (75)
        • Euro 2016 (12)
        • 친선경기 (3)
      • 사소한 아이의 소소한 생활정보 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
    • 관리
  • 링크

    • 독일여행
    • 레바티스토리
    • 프라치노 공간
    • 남성패션꿀템 블로그
  • 공지사항

  • 인기 글

  • 태그

    python
    문제
    바이에른 뮌헨
    뮌헨
    c#
    분데스리가
    회사밥
    러닝
    독일
    WPF
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JOOJI
QThread & Custom Signal 예시
상단으로

티스토리툴바