PyQt QWidget 窗口在显示后立即关闭?

Posted

技术标签:

【中文标题】PyQt QWidget 窗口在显示后立即关闭?【英文标题】:PyQt QWidget window closes immediately upon showing? 【发布时间】:2015-08-04 17:14:23 【问题描述】:

我意识到这个问题之前已经问过好几次了,尽管它们似乎都不适用于我的情况。我已经安装了 PyQt,只是想打开一个窗口:

import sys
from PyQt4 import QtGui as qt

segmentation = qt.QApplication(sys.argv)
main = qt.QWidget()
main.show()

我在这里看到的所有其他问题通常是由窗口超出范围的错误引起的,因为窗口的 show 方法是从函数内调用的,或者类似的东西。

我的代码根本不使用任何函数,所以这不是问题。这应该按原样工作,不是吗?我正在关注本教程:

https://www.youtube.com/watch?v=JBME1ZyHiP8

在 8 点 58 分,讲师的内容与我所写的内容几乎完全一样,他们的窗口显示出来并保持正常。我的显示了几分之一秒,然后关闭。

视频中代码块的屏幕截图,用于与此处提供的代码块进行比较:

【问题讨论】:

看视频。该演示没有.exec_() 代码。除了变量名称,OP 发布的代码是相同的。问题是它为什么在那里工作,而不是当 OP 运行它时。 我为那些不想导航到 OP 提到的那一刻的人添加了视频的屏幕截图。这表明代码是相似的(变量名称不同),但在演示中窗口保持打开状态。 【参考方案1】:

没有看到您的所有代码,我假设您缺少sys.exit() 位。

对于您的特定代码sys.exit(segmentation.exec_()) 将是您所需要的。

segmentation = qt.QApplication(sys.argv)
main = qt.QWidget()
main.show()
sys.exit(segmentation.exec_())

这里发生的事情的一些细节。

segmentation = qt.QApplication(sys.argv) 创建实际的应用程序。

main = qt.QWidget()main.show() 创建 Widget 然后显示。

在执行 python 脚本时,这完全按照您的指示进行:

    创建应用程序 创建一个小部件 显示小部件 已完成。脚本结束。

sys.exit() 所做的是干净地关闭 python 脚本。 segmentation.exec_()启动QT的事件驱动后台处理。一旦segementation.exec_() 完成(用户关闭应用程序、您的软件关闭应用程序或遇到错误),它将返回一个值,然后将其传递给sys.exit() 函数,该函数反过来终止python 进程。

【讨论】:

看视频。该演示没有.exec_() 代码。除了变量名,OP贴出来的代码都是一样的。 @jphollowed,这个答案是正确的。添加此处提供的代码行将阻止窗口关闭。 这是我所有的代码。我刚刚开始本教程,并且在出现问题之前才走到这一步。如果您查看链接视频中的 8:58,我的确切代码对他有效。我刚刚尝试了你的建议,它确实解决了这个问题。但我仍然想知道为什么视频中不需要sys.exit,但我却需要。谢谢。 @jphollowed 我将假设视频正在展示互动体验。这意味着执行的代码实际上并没有像运行普通脚本那样终止。如果您要在 iPython 控制台中执行您的代码,该窗口会出现并且不会立即关闭。 感谢您添加解释,这很有意义。

以上是关于PyQt QWidget 窗口在显示后立即关闭?的主要内容,如果未能解决你的问题,请参考以下文章

PyQt 窗口在打开后立即关闭

PyQt 窗口在打开后关闭

PyQt 新窗口实例立即显示和关闭

PyQt5-关闭窗体显示提示框(窗口界面显示器上居中)-5

PyQt4关闭窗口

PyQt5中的QWebEngineView和QWidget