2016-09-07 15 views
0

forループ内の各繰り返しで、ユーザーが特定のQPushButtonを押すのを待つ方法はありますか?Qtのwhileループでclicked()イベントを待つ

for i in range(10): 


     while (the button has not been pressed): 
      #do nothing 
     #do something 

主な問題は、whileループでclicked()イベントを検出できないことです。

EDIT:

最後に私がなってしまった。だから、

for i in range(10): 
     self.hasBeenProcessed = False 

     # only one function can modify this boolean 
     # and this function is connected to my button 
     while (self.hasBeenProcessed is not True): 
       QtCore.QCoreApplication.processEvents() 
+0

それがクリックされたイベントを持っているので、スロットを実装し、それらを接続する必要があり、あなたのボタンのイベントを使用する場合に役立ちます私に教えてください。 - > https://wiki.qt.io/How_to_Use_QPushButton/de – retinotop

+0

も参照してください。何もしないためにwhileループを使用するのはなぜですか?マルチスレッドのアプリケーションを起動し、whileループでイベントを待つことができますか? – retinotop

+0

私はclicked()イベントを受け取るまで次の繰り返しに行きたくありません。 – floflo29

答えて

2

、私はあなたが説明何をしたいか否かのわずかな懐疑を共有しています。また、文脈を記述するために少しだけコードを表示する方が良いと分かります。

これを言って、以下のコードは、あなたが説明しているように見えるところで刺すものです。これは決して生産準備のためのコードではなく、その原則を説明するための粗悪な例であることに注意してください。

Button1のプレスで1つの機能を呼び出すと、QCoreApplication.processEvents()を呼び出すことによってイベントループがwhileループ内で回転したままになります。マウスイベント。さて、これはではなく、のようなものです。しかしながら、これが必要とされる特定の状況が存在する。あなたが非モーダルでQProgressDialogを持っていて、ダイアログカウンタが増加している間にGUIを更新したままにしたい場合(http://doc.qt.io/qt-4.8/qprogressdialog.html#value-propを参照)

2番目の部分では、 whileループが終了します。

が、これは

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

btn2pushed = False 

def window(): 
    app = QApplication(sys.argv) 
    win = QDialog() 
    b1 = QPushButton(win) 
    b1.setText("Button1") 
    b1.move(50,20) 
    b1.clicked.connect(b1_clicked) 

    b2 = QPushButton(win) 
    b2.setText("Button2") 
    b2.move(50,50) 
    QObject.connect(b2,SIGNAL("clicked()"),b2_clicked) 

    win.setGeometry(100,100,200,100) 
    win.setWindowTitle("PyQt") 
    win.show() 
    sys.exit(app.exec_()) 

def b1_clicked(): 
    print "Button 1 clicked" 
    i = 0 
    while (btn2pushed != True): 
     # not doing anything                                                 
     if (i % 100000 == 0): 
      print "Waiting for user to push button 2" 
     QCoreApplication.processEvents() 
     i += 1; 

    print "Button 2 has been pushed" 


def b2_clicked(): 
    global btn2pushed 
    btn2pushed = True 

if __name__ == '__main__': 
    window() 
+0

答えを見る前にQCoreApplication.processEvents()のおかげで数時間前に解決しました。そしてあなたの答えはそれがそれを解決する方法であることを確認します! – floflo29

関連する問題