Je suis actuellement en train de tenter de créer une application de minuteur fileté en utilisant PyQt. Simple, non? Je le pensais aussi. Cependant, après avoir passé toute la journée à essayer de comprendre ce qui ne va pas, je n'en ai absolument aucune idée. Dans mon immense entêtement, j'ai refusé d'abandonner ce qui devait être un projet de 15 minutes.QThread Mystère Erreur
Heres mah codez:
__author__ = 'Darth Vader'
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox, QApplication, QDialog
from PyQt5.QtCore import QThread
from timerui import Ui_Form
import sys
import ctypes
import time
import threading
class Timer(QThread):
def makeNoise(self):
pass
def run(self):
self.ui.startButton.setStyleSheet('''QPushButton {color: red;font: bold 15px;}''')
self.ui.startButton.setEnabled(False)
self.hour = int(self.ui.spinBoxHrs.value())
self.min = int(self.ui.spinBoxMin.value())
self.sec = int(self.ui.spinBoxSec.value())
if self.sec:
self.countSec = self.sec
elif self.min and not self.sec:
self.countSec = 60
self.min -= 1
elif self.hour and not self.min and not self.sec:
self.min = 59
self.countSec = 60
print(self.countSec)
while self.countSec or self.hour or self.min:
if not self.countSec and self.min:
self.min -= 1
self.countSec = 60
elif not self.countSec and not self.min and self.hour:
self.hour -= 1
self.min = 59
self.sec = 60
elif not self.countSec and not self.min and not self.hour:
self.makeNoise()
break
time.sleep(1)
self.countSec -= 1
self.ui.startButton.setText("%dh %dm %ds" % (self.hour, self.min, self.sec))
self.ui.startButton.setEnabled(True)
self.ui.startButton.setText("Start")
self.ui.startButton.setStyleSheet('QPushButton{}')
def setup(self, gui):
self.ui = gui
def __init__(self):
QThread.__init__(self)
def start():
t = Timer()
t.start()
if __name__ == '__main__':
myappid = u'org.ayoung.timer'
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
app = QApplication(sys.argv)
app.setWindowIcon(QtGui.QIcon('res/favicon.png'))
window = QDialog()
ui = Ui_Form()
ui.setupUi(window)
ui.startButton.clicked.connect(start)
window.show()
sys.exit(app.exec_())
Et l'erreur:
QThread: Destroyed while thread is still running
QMutex: destroying locked mutex
D'après ce que j'ai lu, ces deux erreurs ont quelque chose à voir avec la collecte des ordures, mais je n'ai absolument aucune idée comment les réparer.
Merci!
En outre, QThread.start() renvoie None et le thread n'est pas affecté à une variable, ce qui explique pourquoi il est détruit. Honnêtement, il y a tellement de problèmes avec ce code qu'il est difficile de savoir par où commencer. –
Donne-moi une pause, c'est la première fois que j'utilise PyQT. D'ailleurs, la même chose s'est produite quand j'ai eu deux déclarations séparées. @warvariuc J'ai essayé cela, maintenant je viens d'obtenir l'erreur "QThread: Détruit pendant que le fil est encore en cours". –
@DarthVader Je sais que vous avez d'autres problèmes avec ce code, mais j'ai répondu à votre question principale. Stackoverflow essaie de répondre à une question à la fois, sinon vous finissez par discuter de code au lieu de répondre à des questions petites et bien définies. Vous pouvez discuter de votre code [ici] (http://chat.stackoverflow.com/rooms/6/python) – warvariuc