2013-08-12 1 views
0

J'ai ce morceau de code:Python, PySide sommeil sans caler tout le programme?

self.connect(self.Yes_button,SIGNAL('clicked()'),self.Yes_pressed) 
self.connect(self.No_button,SIGNAL('clicked()'),self.No_pressed) 

def Yes_pressed(self): 
    self.Box.append("Hello") 
    time.sleep(2) 
    self.Box.append("Text2") 

ce qu'il fait est lorsque le bouton vous appuyez sur Oui, il attend 2 secondes d'abord puis ajoute à la fois Bonjour et Texte2 (Box est un objet QTextBrowser()) Comment pourrais-je faire alors il en ajouterait un, attendez 2 secondes et ajoutez l'autre à la place? Y a-t-il une solution simple à cela?

+0

essayer d'appeler self.update() avant le sommeil, et me dire si des œuvres hehe – joaoricardo000

Répondre

2

Vous pouvez faire quelque chose comme ceci, en utilisant pyqt'sQtimer. Plus précisément, le singleShot

Configuration: QTimer.singleShot (int msec, QObject receiver, SLOT()SLOT() member)

QtCore.QTimer.singleShot(1000, lambda: self.Box.append("Text2")) #1000 milliseconds = 1 second 

Ou événement pouvez essayer cette implémentation:

self.timerScreen = QTimer() 
    self.timerScreen.setInterval(1000) #1000 milliseconds = 1 second 
    self.timerScreen.setSingleShot(True) 
    self.timerScreen.timeout.connect(self.Box.append("Text2")) 

Partie 2

Vous pouvez probablement faire quelque chose comme ça, mais Je ne le recommande pas:

def testSleep(self): 
    self.lineEdit.setText('Start') 
    QtCore.QTimer.singleShot(10000, lambda: self.Box.append("Text2")) 
    QtCore.QTimer.singleShot(10000,lambda: self.timerEvent) 


def timerEvent(self): 
    QtCore.QTimer.singleShot(10000, lambda: self.Box.append("Text3")) 

Vous êtes mieux juste faire quelque chose comme ceci:

x = 10000 #or whatever number 
QtCore.QTimer.singleShot(10000 + x, lambda: self.Box.append("Text3")) 
+0

Je vois cependant j'ai un problème ici que tous les le calcul commence en même temps, donc je veux qu'il y ait une seconde pause X après chaque ajout. donc par exemple: QTimer.singleShot (10000, lambda: self.Box.append ("Text2")) QTimer.singleShot (10000, lambda: self.Box.append ("Texte3")) imprime à la fois après 10 secondes et je veux être 10 secondes gab entre eux sans faire du texte3 20000 – Granitas

+0

Donc, fondamentalement, vous voulez juste «x + 10000» à chaque fois que la fonction est appelée entre text2 et text3? C'est facile, juste vérifier mon édition. – enginefree

+0

@Granitas J'ai édité ma réponse. – enginefree

Questions connexes