0
該示例有兩個窗口,Main
和Foo
。 Main
應在Foo
關閉後顯示在Foo
之前輸入的值。暫停當前功能,直到對話框關閉
的代碼如下:
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class Main(QWidget):
def __init__(self):
super(Main, self).__init__()
self.setupUI()
def setupUI(self):
self.label = QLabel('0')
okBtn = QPushButton('Start Foo')
okBtn.clicked.connect(self.startFoo)
mainLayout = QVBoxLayout()
mainLayout.addWidget(self.label)
mainLayout.addWidget(okBtn)
self.setLayout(mainLayout)
self.setWindowTitle('Main')
self.show()
def startFoo(self):
foo = Foo()
# I want the function to suspend until Foo() is destroyed, so I can set label's text as what I input earlier in `Foo`
self.label.setText(str(foo.edit.text()))
class Foo(QDialog):
def __init__(self):
super(Foo, self).__init__()
self.setupUI()
self.var = 0
def setupUI(self):
# QLineEdit
self.edit = QLineEdit()
# QPushButton
okBtn = QPushButton('OK')
okBtn.clicked.connect(self.setVar)
# main layout
mainLayout = QVBoxLayout()
mainLayout.addWidget(self.edit)
mainLayout.addWidget(okBtn)
self.setLayout(mainLayout)
self.setWindowTitle('Foo')
self.show()
def setVar(self):
self.var = self.edit.text()
self.close()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Main()
app.exec_()
注意這部分:
def startFoo(self):
foo = Foo()
# I want the function to suspend until Foo() is closed, so I can set label's text as what I input earlier in `Foo`
self.label.setText(str(foo.edit.text()))
我想要的功能暫停,直到美孚()被破壞,這樣我就可以設置標籤的文字與我之前在Foo
中輸入的內容相同。但該應用程序只是繼續運行,這使得self.label
的文本總是空白(因爲當啓動Foo()
時,foo.edit.text()
是None
)。我試過添加一個QEventLoop
這樣:
def startFoo(self):
foo = Foo()
loop = QEventLoop()
foo.destroyed.connect(loop.quit)
loop.exec_()
self.label.setText(str(foo.edit.text()))
它也行不通。那麼該怎麼辦?
謝謝,'exec_'完美無缺! – Searene