import sys import time from PySide2 import QtCore, QtWidgets class MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.button1 = QtWidgets.QPushButton("isrun=false") self.button2 = QtWidgets.QPushButton("mythread.terminate") self.layout = QtWidgets.QVBoxLayout() self.layout.addWidget(self.button1) self.layout.addWidget(self.button2) self.setLayout(self.layout) self.button1.clicked.connect(self.setF) self.button2.clicked.connect(self.termThread) self.mythread = AThread() self.isrun = True def setF(self): self.isrun = False print("isrun = False") def termThread(self): self.mythread.terminate() print("thread stopped") class AThread(QtCore.QThread): def run(self): while True: if widget.isrun: print("thread ping") else: self.terminate() time.sleep(1) if __name__ == "__main__": app = QtWidgets.QApplication([]) widget = MyWidget() widget.resize(800, 600) widget.show() widget.mythread.start() sys.exit(app.exec_())