相关文章推荐
强悍的水煮肉  ·  PyQt5 ...·  2 周前    · 
独立的滑板  ·  Kotlin中的lateinit、lazy ...·  5 月前    · 
一身肌肉的包子  ·  python - 检查 Pandas ...·  1 年前    · 
爱玩的蘑菇  ·  【c# ...·  1 年前    · 

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

1 人关注

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

主脚本 (which opens Firstwindow):

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

Firstwindow

On button press:

    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_())
    
2 个评论
你为什么要连续两次启动该程序?在你第二次调用 exec_() 时,它将只是坐在那里什么也不做,而你将无法与它互动,因为你已经关闭了主窗口。去掉第一行 app.exec_()
Prof
@ekhumoro 这招很管用,你可以把它作为答案发布。然而,我想知道我第二次调用exec的地方,因为我不明白。exec不是告诉qt的引擎来处理程序的运行,然后我把exec放在sys.exit中,告诉脚本在qt说退出时退出吗?
python
qt
exec
pyqt5
qapplication
Prof
Prof
发布于 2015-11-14
1 个回答
ekhumoro
ekhumoro
发布于 2015-11-15
已采纳
0 人赞同

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

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