Я работаю над софтом, который должен подсчитывать электронные письма в Outlook Ave c обновлять количество каждые x минут.
Я создал QThread, чтобы выполнить эту задачу, которая заморозит мой GUI.
Все работает нормально, но, когда я выхожу из программного обеспечения, поток все еще работает, потому что я использовал бесконечность l oop, чтобы можно было постоянно обновлять сумму.
Я нашел решение, объявив глобальную переменную и локальную переменную с приращением по сигналу. My while l oop сравните их и продолжите, если все в порядке.
Поскольку Qthread не имеет метода isDaemon, я не уверен, что поток действительно мертв и не просто больше не выполняет видимую задачу.
Вот пример мой код:
continuation=1
class App_Direction(QtWidgets.QWidget):</p>
<code> def __init__(self):
super(App_Direction,self).__init__()
self.setWindowTitle("test")
self.resize(1000,1050)
self.move(1500,100)
self.setStyleSheet("font: 10pt;")
self.feed_stats_label()
@QtCore.pyqtSlot(int)
def feed_stats_label(self):
self.workthread=WorkerThread()
self.workthread.mail_sig.connect(self.modif)
self.workthread.continuation_sig.connect(self.continuation)
self.workthread.start()
@QtCore.pyqtSlot(list)
def modif (self,liste=()):
print("Je ne recois plus le signal, car je suis mort")
@QtCore.pyqtSlot(list)
def continuation(self, arg):
global continuation
continuation+=1
class WorkerThread(QtCore.QThread):
mail_sig = QtCore.pyqtSignal(list)
continuation_sig=QtCore.pyqtSignal(list)
def __init__(self, parent=None):
super().__init__(parent)
def run(self):
self.continuation=1
global continuation
while self.continuation==continuation:
print("Et ca continue encore et encore")
self.mail_sig.emit([]) # envoi du signal de progression d'exécution
self.continuation+=1
self.continuation_sig.emit([self.continuation])
time.sleep(10)
if __name__ == '__main__':
QtWidgets.QApplication.setStyle("Fusion")
app=QtWidgets.QApplication ([])
win= App_Direction()
win.show()
app.exec_()<code>
</code>