You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt调用admin页面报错:QCoreApplication::exec:事件循环已运行

解决PyQt调用新窗口时的事件循环冲突问题

错误QCoreApplication::exec: The event loop is already running的核心原因是:PyQt程序中只能存在一个QApplication实例,且事件循环仅能启动一次。你在main.py中已经启动了事件循环,却又在show_admin函数里重新创建QApplication并调用exec_(),导致冲突。

以下是两种可行的解决方法:

方法一:关闭原窗口,打开admin窗口

适用于需要完全切换主窗口的场景,不需要重启事件循环:

def show_admin():
    QtWidgets.QMessageBox.warning(None, "success", "logged in as admin")
    from admin import main
    
    # 获取当前已存在的应用实例,无需重新创建
    app = QtWidgets.QApplication.instance()
    # 关闭原主窗口(替换为你main.py中实际的窗口变量名)
    main_window.close()
    # 实例化admin窗口并显示
    admin_window = main()
    admin_window.show()

方法二:保留原窗口,直接打开新窗口

如果不需要关闭原窗口,直接打开admin页面即可:

def show_admin():
    QtWidgets.QMessageBox.warning(None, "success", "logged in as admin")
    from admin import main
    
    # 直接实例化admin窗口并显示,复用现有事件循环
    admin_window = main()
    admin_window.show()

关键注意事项

  • admin.py中的main类必须是QMainWindow或QWidget的子类,确保是合法的窗口类型
  • 绝对不要在事件循环已启动的情况下再次调用app.exec_(),这是触发错误的根本原因
  • 若原窗口是通过sys.exit(app.exec_())启动的,不要调用app.quit()终止事件循环,只需关闭或隐藏原窗口即可让新窗口正常运行

内容的提问来源于stack exchange,提问作者Namous Nassim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:59:54