【问题标题】:PyQt QWidget window closes immediately upon showing?PyQt QWidget 窗口在显示后立即关闭?
【发布时间】: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 提到的那一刻的人添加了视频的屏幕截图。这表明代码是相似的(变量名称不同),但在演示中窗口保持打开状态。

标签: python user-interface pyqt qt4


【解决方案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 脚本时,这完全按照您的指示进行:

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

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

【讨论】:

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