Le programme suivant doit juste compter et int et affiche sa valeur dans une étiquette. Mais après un moment, l'interface graphique cesse de fonctionner, tandis que la boucle continue.PyQt 4 UI gèle
from PyQt4 import QtGui,QtCore
import sys
class main_window(QtGui.QWidget):
def __init__(self,parent=None):
#Layout
QtGui.QWidget.__init__(self,parent)
self.bt=QtGui.QPushButton('crash')
self.lbl=QtGui.QLabel('count')
ver=QtGui.QHBoxLayout(self)
ver.addWidget(self.bt)
ver.addWidget(self.lbl)
self.cnt=0
self.running=False
self.connect(self.bt,QtCore.SIGNAL("clicked()"),self.count)
def count(self):
self.running=True
while self.running:
self.cnt+=1
print self.cnt
self.lbl.setText(str(self.cnt))
self.repaint()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mw=main_window()
mw.show()
sys.exit(app.exec_())
Une aide?
J'ai essayé de simplifier mon problème autant que possible, alors oui, un bouton d'arrêt est prévu. Mettre une commande de veille temporelle provoque même une panne de l'interface graphique plus rapidement. – tillsten
Vous feriez mieux d'utiliser QTimer (http://doc.trolltech.com/3.3/qtimer.html) au lieu de while et de démarrer/arrêter comme vous le souhaitez. – Li0liQ
En outre, votre bouton d'arrêt ne fonctionnera pas tant que la boucle while est en cours d'exécution si vous utilisez un thread unique. Donc, comme je l'ai mentionné, essayez d'utiliser QTimer. – Li0liQ