2

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

这段代码似乎工作

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 的所有理解中,我无法理解为什么底部会失败。是垃圾收集还是什么?

谢谢!

4

2 回答 2

3

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

于 2013-01-10T14:03:49.393 回答
0

它有效,但不是写passin __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 上工作。

于 2013-01-10T20:09:03.377 回答