2017-02-09 6 views
-2

私は同じラベルを垂直に印刷するシンプルなpython qt4コードを持っています。次の印刷ラベルの前に、どのようにして1秒間(time.sleep)遅延させることができますか?Python QT4 - time sleep

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

答えて

1

QTimerを使用して、x時間後に関数呼び出しをトリガーすることができます。 sleepを使用するよりも優れています。これは、GUIがフリーズしないため、更新が表示されるためです。

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

これは、これまで秒(1000ミリ秒)あなたの更新関数を呼び出しますQTimerを作成します。この関数では、関数が10回呼び出されたかどうかをチェックしてから、タイマーを停止します。

+0

構造をよりよく理解するためにコードを編集しました。私はQTimerを追加しますが、動作しません。 – Athon

+0

申し訳ありませんが、あなたの更新機能で 'for'ループを削除するとも言いました。 Qtimerはそれをループの非同期の一種として置き換えています –

+0

私はアプリケーションのすべてのコードを投稿しました。私は理解したいと思います。私はforループを削除することはできません。行の編集、ラベルなどを繰り返す必要があるからです。 – Athon