窗口关闭后PyQt线程仍在运行

时间:2015-11-13 20:29:01

标签: python qt exec pyqt5 qapplication

当我在PyQt中关闭应用程序窗口时,控制台仍然在后台运行,并且python.exe进程存在,直到我关闭控制台。我认为sys.exit(app.exec_())无法正常运作。

Mainscript (打开Firstwindow):

if __name__ == '__main__':
    from firstwindow import main
    main()

Firstwindow

按下按钮:

    self.close() #close firstprogram
    Start() #function to open mainprogram

开始():

def Start():
        global MainWindow
        MainWindow = QtWidgets.QMainWindow()
        ui = genui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()

main()(建议here):

def main_window():
     return form

def main():
    global form
    app = QtWidgets.QApplication(sys.argv)  
    form = MyApp()  
    form.show()
    app.exec_()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:2)

问题是您在exec_()函数中调用main()两次:

def main():
    global form
    app = QtWidgets.QApplication(sys.argv)  
    form = MyApp()  
    form.show()
    app.exec_()
    sys.exit(app.exec_())

第一个app.exec_()行将启动一个事件循环,这意味着main()函数会在您与gui交互时暂停。当您关闭顶级窗口(或在应用程序上调用quit())时,事件循环将停止,exec_()将返回,main()功能将继续。

但下一行调用sys.exit(app.exec_()),其中重新启动事件循环,并再次暂停main()函数 - 包括sys.exit()调用,这必须等待exec_()返回。然而,它将永远等待,因为现在没有gui可以与之交互,因此除了强行终止脚本之外,没有什么可以阻止事件循环。