0

複数のトップ レベル (プライマリ) ウィンドウを開くアプリケーションを作成しようとしています。

親のないウィジェットはプライマリ ウィンドウ ( http://qt-project.org/doc/qt-4.8/application-windows.html ) であるため、ボタンを押すたびに新しいウィンドウを生成するサンプル プログラムを作成しました。

C++ で目的の結果を得ることができます。

Window::Window(QWidget *parent):
    QWidget(parent) {
    QPushButton *btn = new QPushButton("Another one!", this);
    connect(btn, SIGNAL(clicked()), this, SLOT(addOne()));
}

void Window::addOne() {
    QWidget *nw = new QWidget();
    nw->show();
}

ボタンを押すたびに新しい空のウィンドウが作成され、最後のウィンドウが閉じられるとプログラムが正しく終了します。

PyQt4を使用してpython3で同じことを試しましたが、ウィンドウは表示されません:

import sys
from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(300, 300, 250, 150)
        b = QtGui.QPushButton('Another one!', self)
        b.clicked.connect(self.new_window)
        self.show()

    def new_window(self):
        print('Opening new window...')
        w = QtGui.QWidget()
        w.show()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

メッセージは正しく出力されているので、呼び出しの問題ではないようです... python3 を使用しても 2 を使用しても、結果は同じです。

私は何が欠けていますか?

4

1 に答える 1

1

ガベージコレクションのせいです。

于 2013-09-20T09:44:43.583 に答える