Я пишу GUI, используя pyqt5 (Python 3.6). Я пытаюсь запустить другой поток параллельно основной GUI. Я бы хотел, чтобы этот дочерний поток завершался при закрытии основного приложения. В этом примере дочерний поток является простым счетчиком. Когда я закрываю основной GUI, счетчик продолжает работать. Как я могу завершить поток, когда окно GUI закрыто? В реальном случае у меня может быть поток, который выполняет операции, выполнение которых занимает несколько минут. Я не хочу использовать флаг в потоке, чтобы оценить, должен ли он закончиться, потому что может потребоваться несколько минут, чтобы закрыть поток после закрытия окна GUI. Я бы предпочел, чтобы нить закончилась прямо сейчас. Какие-либо предложения? Спасибо.
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import (QWidget, QApplication,QPushButton,
QVBoxLayout)
import time, threading, sys
class testScriptApp(QtWidgets.QWidget):
def __init__(self, parent=None):
# initialize th widget
QtWidgets.QWidget.__init__(self, parent)
# set the window title
self.setWindowTitle("Scripting")
# manage the layout
self.mainGrid = QVBoxLayout()
self.button = QPushButton('Start')
self.button.clicked.connect(self.on_click)
self.mainGrid.addWidget(self.button)
self.setLayout(self.mainGrid)
def on_click(self):
self.worker = threading.Thread(target=Worker)
self.worker.daemon = True
self.worker.start()
def Worker(count=1):
while count>0:
print(count)
time.sleep(2)
count+=1
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
myapp = testScriptApp()
myapp.show()
app.exec_()