Python3-Pyqt5如何通过异常或按退出按钮结束线程中的循环
我是python和pyqt新手,有一个问题我还没有解决: 下面的程序在其GUI中有3个while循环,从一个值运行到零。我将这些循环放在单独的qthread中,以便同时执行它们。 问题:如果我按下窗口的退出按钮,循环将继续,并仍在控制台中运行,线程数将消失(这就是为什么我知道它们仍在运行)。如何通过退出程序来停止此操作 对不起,代码太乱了。正如我所说,python对我来说是新事物 主要类别:Python3-Pyqt5如何通过异常或按退出按钮结束线程中的循环,python,multithreading,python-3.x,loops,pyqt5,Python,Multithreading,Python 3.x,Loops,Pyqt5,我是python和pyqt新手,有一个问题我还没有解决: 下面的程序在其GUI中有3个while循环,从一个值运行到零。我将这些循环放在单独的qthread中,以便同时执行它们。 问题:如果我按下窗口的退出按钮,循环将继续,并仍在控制台中运行,线程数将消失(这就是为什么我知道它们仍在运行)。如何通过退出程序来停止此操作 对不起,代码太乱了。正如我所说,python对我来说是新事物 主要类别: class Application(QtWidgets.QMainWindow): counte
class Application(QtWidgets.QMainWindow):
counter = pyqtSignal(int)
counting = False
#QtWidgets.QWidget
def __init__(self, name):
super(Application, self).__init__()
self.setupUi(self)
线程中的一个循环:
#Start des Reinigungsprozesses Becken 1
def becken1start(self):
self.sekunden1 = value1 * 60
if self.pushButton1.isChecked():
if value1 == 0:
self.pushButton1.setChecked(False)
self.showMessageBox('Bitte Laufzeit der Reinigung wählen')
else:
thread = threading.Thread(target=self.run1)
thread.start()
print("Active Threads :", threading.activeCount())
else:
pass
#Ausführen des Threads für den Countdown Becken 1
def run1(self):
while self.sekunden1 > -1:
sleep(1)
GPIO.setup(2, GPIO.OUT)
GPIO.output(2, GPIO.LOW)
self.dial1.setDisabled(True)
self.lcdNumber1.display(self.sekunden1)
self.pushButton1.setText("läuft")
#QtWidgets.qApp.processEvents()
print("Active Threads :", threading.activeCount())
self.sekunden1-=1
if self.pushButton1.isChecked():
continue
else:
break
self.dial1.setDisabled(False)
self.pushButton1.setText("BECKEN 1")
self.lcdNumber1.display(value1)
self.pushButton1.setChecked(False)
GPIO.output(2, GPIO.HIGH)
退出部分:
if __name__ == "__main__":
import sys
sys._excepthook = sys.excepthook
def my_exception_hook(exctype, value, traceback):
print(exctype, value, traceback)
sys._excepthook(exctype, value, traceback)
sys.exit()
sys.excepthook = my_exception_hook
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Application(threading.Thread)
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
将线程设为守护进程意味着如果主线程死亡,线程将无法继续运行。感谢您的快速回答。酷!遗憾的是,你的方法行不通。。。也许,我应该提到函数run1和beckenstart1在主类中。。。。另外:我必须导入任何东西才能使用守护进程吗?
#Start des Reinigungsprozesses Becken 1
def becken1start(self):
self.sekunden1 = value1 * 60
if self.pushButton1.isChecked():
if value1 == 0:
self.pushButton1.setChecked(False)
self.showMessageBox('Bitte Laufzeit der Reinigung wählen')
else:
thread = threading.Thread(target=self.run1)
thread.daemon = True
thread.start()
print("Active Threads :", threading.activeCount())
else:
pass