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
相关产品推荐
相关产品推荐

