当我在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_())
答案 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可以与之交互,因此除了强行终止脚本之外,没有什么可以阻止事件循环。