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_())

ただし、これにより、ウィンドウが表示され、すばやく連続して消えます。(2 番目のボトムラインが変更されました)

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

2 番目のバージョンでは、インスタンスへの参照を保持しないため、WindowPython はそのコード行の実行後にインスタンスを破棄します。最初のバージョンではvar、コード ブロック全体で参照を保持します。最も重要なことは、var呼び出し中に存在することですap.exec_()

于 2013-01-10T14:03:49.393 に答える
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 でも動作するはずです。

于 2013-01-10T20:09:03.377 に答える