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

时间:2015-08-04 17:14:23

标签: python user-interface pyqt qt4

我意识到这个问题之前已经问了好几次,但它们似乎都没有适用于我的情况。我已经安装了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,教练几乎完全按照我所写的内容,他们的窗口出现并保持良好状态。矿井显示几分之一秒然后关闭。

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

Demo code that works

1 个答案:

答案 0 :(得分:12)

没有看到你的所有代码,我假设你错过了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()创建窗口小部件然后显示。

执行python脚本时,这完全符合您的要求:

  1. 创建应用程序
  2. 创建小部件
  3. 显示小部件
  4. 完成。脚本结束。
  5. sys.exit()做的是干净地关闭python脚本。 segmentation.exec_()启动QT​​的事件驱动后台处理。一旦segementation.exec_()完成(用户关闭应用程序,您的软件关闭应用程序,或遇到错误),它将返回一个值,然后将其传递到sys.exit()函数,该函数将终止python进程。