2017-02-09 5 views
-2

J'ai un simple code python qt4 qui imprime la même étiquette verticalement. Comment puis-je retarder (time.sleep) pendant 1 seconde, avant l'étiquette d'impression suivante?Python QT4 - temps de sommeil

 
class Ui_Form(object): 
    def setupUi(self, Form): 
     ..... 
     self.pushButton.clicked.connect(self.praxis)  

     self.label_i = 0 
     self.timer = QTimer(self) 
     self.timer.timeout.connect(self.praxis) 
     self.timer.start(1000) 


    def praxis(self): 

     self.lbl1_count = 119 
     for i in range(10): 
      self.lbl_1 = QtGui.QLabel(Form) 
      self.lbl_1.setGeometry(QtCore.QRect(120, self.lbl1_count, 14, 34)) 
      self.lbl_1.setText(_translate("Form", "Something Text", None)) 
      font = QtGui.QFont() 
      font.setPointSize(16) 
      self.lbl_1.setFont(font) 
      self.lbl_1.setObjectName(_fromUtf8("label")) 
      self.lbl1_count += 35 

      self.label_i += 1 
      if self.label_i >= 10: 
       self.timer.stop() 

Répondre

1

Vous pouvez utiliser un QTimer pour déclencher un appel de fonction après quantité x de temps. Il est préférable d'utiliser un sleep car il ne gèlera pas l'interface graphique et vous verrez les mises à jour au fur et à mesure.

def __init__(self): 
    ... 
    self.label_i = 0 
    self.timer = QTimer(self) 
    self.timer.timeout.connect(self.update_label) 
    self.timer.start(1000) 

def update_label(self): 
    # Your label updating code above 
    ... 
    self.label_i += 1 
    if self.label_i >= 10: 
     self.timer.stop() 

Cela va créer un QTimer qui appellera votre fonction de mise à jour jamais seconde (1000 millisecondes). Dans la fonction, il vérifie si la fonction a été appelée 10 fois puis arrête le temporisateur.

+0

J'ai édité le code pour mieux comprendre la structure. J'ajoute le QTimer mais ne fonctionne pas. – Athon

+0

Désolé, je voulais dire aussi de supprimer la boucle 'for' dans votre fonction de mise à jour. Le Qtimer le remplace comme une sorte de boucle asynchrone –

+0

J'ai posté tout le code d'application et j'espère comprendre. Je ne peux pas enlever pour la boucle parce que j'en ai besoin pour itérer des éditions de ligne, des étiquettes etc. – Athon