所以,我分享了輕微的懷疑,你是否應該想這樣做你所描述的。另外,我分享一下,如果你展示更多的代碼來描述上下文會更好。
說了這話之後,下面的代碼就是你似乎要描述的東西。請注意,這絕不意味着是生產就緒的代碼,但更多是一個粗略的例子來說明原則。
會發生什麼事,我稱之爲一個功能上的Button1
新聞和我保持while
循環內的事件循環紡紗通過調用QCoreApplication.processEvents()
這意味着GUI仍然會接受如鼠標事件。現在,這是你應該而不是通常做的事情。然而,在某些情況下可能需要這種情況,例如,如果你有一個非模態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()
使用按鈕的情況下,它應該有一個點擊事件,所以實現插槽和連接它們。另請參閱 - > https://wiki.qt.io/How_to_Use_QPushButton/de – retinotop
以及爲什麼要使用while循環無法執行任何操作?是否可以嘗試啓動多線程應用程序並在while循環中等待事件? – retinotop
因爲我不想進入下一次迭代,直到收到clicked()事件。 – floflo29