gpt4 book ai didi

Python3-Pyqt5如何通过异常或按退出按钮结束线程中的循环

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:07 25 4
gpt4 key购买 nike

我是 python 和 pyqt 的新手,并且有一个我无法解决的问题:以下程序在其 GUI 中有 3 个 while 循环,从一个值运行到零。我将这些循环放在单独的 QThread 中以同时执行它们。问题:如果我按下窗口的退出按钮,循环将继续并仍在控制台中运行,输出线程数(这就是为什么我知道它们仍在运行)。如何通过退出程序来停止此操作?

抱歉,代码困惑。正如我所说,Python 对我来说是新的......

主类:

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_())

最佳答案

#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

使线程成为守护进程意味着如果主线程终止,该线程将不会保持运行状态。

关于Python3-Pyqt5如何通过异常或按退出按钮结束线程中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44978176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com