window 关闭后 PyQt 线程仍然 运行

PyQt thread still running after window closed

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

Mainscript(先打开window):

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

第一window

按下按钮时:

    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()(建议):

def main_window():
     return form

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

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

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

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

但下一行调用 sys.exit(app.exec_()) 重新启动 事件循环,并再次暂停 main() 函数 - 包括 sys.exit() 调用,必须等待 exec_() 到 return。但是,它将永远等待,因为现在没有可以与之交互的 gui,因此除了强行终止脚本之外,您无法停止事件循环。