PyQt - Window()。show()失败,但var = Window(); var.show()有效吗?

时间:2013-01-10 13:49:09

标签: python constructor pyqt variable-assignment

这是我正在搞乱的一些示例代码,当我发现一些我根本不理解的东西时。

此代码似乎有效

from PyQt4 import QtGui, QtCore
import sys

class Window(QtGui.QWidget):
    def __init__(self):
        pass

ap = QtGui.QApplication(sys.argv)
var = Window()
var.show()
sys.exit(ap.exec_())

但这导致窗口出现而不是快速连续消失。 (第二个底线改变了)

from PyQt4 import QtGui, QtCore
import sys

class Window(QtGui.QWidget):
    def __init__(self):
        pass

ap = QtGui.QApplication(sys.argv)
Window().show()
sys.exit(ap.exec_())

我根本无法理解为什么。在我对python和Qt的所有理解中,我无法理解底部失败的原因。它是垃圾收集还是什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

在第二个版本中,您没有保留对Window实例的引用,因此Python将在执行该行代码后销毁它。在第一个版本中,您通过代码块在var中保留引用。最重要的是,当您致电var时,ap.exec_()存在。

答案 1 :(得分:0)

它有效,但不是在pass中写__init__(),而是将其写下来:

super(Window, self).__init__()

您的__init__()功能为空。

以下是完整代码:

from PyQt4 import QtGui
import sys

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()

ap = QtGui.QApplication(sys.argv)
var = Window()
var.show()
sys.exit(ap.exec_())

我用PySide测试过,也应该在PyQt上工作。