본문 바로가기

공부/Python

8.[Thread] 함수 Thread 와 중간에 정지 시키기

반응형

 

import ctypes
import sys
import threading
import time

from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import *

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.Button_state = True
        self.pb_start.clicked.connect(self.click1_function)

        # thread setup
        self.test_thread_id = 0


    def click1_function(self):
        if self.Button_state:
            self.Button_state = False
            self.pb_start.setText('Stop')

            self.test = threading.Thread(target=self.Thread_Test1)
            self.test.daemon = True
            self.test.start()

        elif self.Button_state == False:
            self.Button_state = True
            self.pb_start.setText('start')
            self.stop_thread()

        print('check')

    def setupUi(self, QMainWindow):
        self.resize(500, 500)
        self.centralwidget = QtWidgets.QWidget(QMainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pb_start = QtWidgets.QPushButton(self.centralwidget)
        self.pb_start.setGeometry(QtCore.QRect(100, 100, 100, 100))
        self.pb_start.setObjectName("pb_start")
        self.pb_start.setText("Start")
        QMainWindow.setCentralWidget(self.centralwidget)

    def Thread_Test1(self):
        i = 0
        print(self.test.ident)
        self.test_thread_id = self.test.ident
        while True:
            print(i)
            i += 1
            time.sleep(10)
            print("END")
        print("End")


    def stop_thread(self):
        res = ctypes.pythonapi.PyThreadState_SetAsyncExc(self.test_thread_id,
                                                         ctypes.py_object(SystemExit))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    myApp = MyWindow()
    myApp.show()
    app.exec_()

 

결과 화면

반응형

'공부 > Python' 카테고리의 다른 글

[FTDI]Python 으로 칩 정보로 포트 찾기  (0) 2022.02.15
7.[Thread]Qt Designer + PyQt5  (0) 2021.06.05
6.[Scroll Area]Qt Designer + PyQt5  (0) 2021.05.25
5.[Text]Qt Designer + PyQt5  (0) 2021.05.07
4.[check box]Qt Designer + PyQt5  (0) 2021.05.07