簡體   English   中英

在PyQt中遇到self.close()之后控件不返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM