[英]Control not returning after self.close() encountered in PyQt
我正在嘗試使用PyQt創建UI。 它具有非常基本的功能。 當腳本在終端上運行時,當按確定時,將打開一個對話框,要求輸入名稱。 但是,我無法從Qt應用返回控件。
我的代碼如下:
class Interactive(QtGui.QWidget):
def __init__(self):
super(Interactive,self).__init__()
self.initGUI()
def initGUI(self):
self.setGeometry(300,300,290,150)
self.setWindowTitle('Input Dialog')
self.show()
self.inputdialog = QtGui.QInputDialog()
self.inputdialog.move(50,50)
text, ok = self.inputdialog.getText(self,'Input Dialog','Enter Your Name:')
#self.text = text
if ok:
self.text = text
print text
self.close()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
obj = Interactive()
#app.exec_()
if app.exec_():
sys.exit()
print "somerandomtext"
該類中的print text
正在運行,但是我的測試字符串"somerandomtext"
不起作用,並且程序未結束。
我曾在So處研究過類似的問題,但似乎沒有一個問題可以解決相同的問題,我是否需要為此另做一個處理程序?
通常,應用程序將在最后一個頂級窗口關閉時自動退出,但是在您的示例中,由於您不允許事件循環正確啟動,因此可以避免這種情況發生。
有很多方法可以重新構造示例來避免此問題,但最簡單的方法可能是使用如下計時器:
class Interactive(QtGui.QWidget):
def __init__(self):
super(Interactive,self).__init__()
# delay initialization
# self.initGUI()
...
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
obj = Interactive()
QtCore.QTimer.singleShot(0, obj.initGUI)
app.exec_()
print "somerandomtext"
PS :
deleteLater()
之所以在另一個答案中起作用的原因是,它將刪除事件發布到事件隊列中(一旦事件循環正確啟動,將對其進行處理)。 close()
方法不會以這種方式發布事件,因此應用程序沒有機會自動退出。
if ok:
self.text = text
print text
self.deleteLater()
應該終止應用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.