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 窗口在显示后立即关闭?的主要内容,如果未能解决你的问题,请参考以下文章