6

私はpyqt4を使い始めたばかりです。私はチュートリアルに従いました ( http://zetcode.com/tutorials/pyqt4/ ) 私を困惑させることの 1 つは、この部分です。

def main():
    app = QtGui.QApplication(sys.argv)
    ex = GUI()
    sys.exit(app.exec())

そして、この理由をここで説明します:

最初のメイン ウィンドウを除いて、さらに 4 つのウィンドウを開く小さなプログラムを作成しました。そこで、メインウィンドウで機能するのを見たものを複製しようとし、新しいウィンドウごとにクラスを作成して、上記のようにしようとしました。現在、次のようになっています。

def main2():
    #app = QtGui.QApplication(sys.argv)
    ex2 = Settings()
    sys.exit(app.exec())

ご覧のとおり、私はそれを変更しました。関数の最初の行をコメント解除したままにしておくと、プログラムがクラッシュします。私はsys.exit(app.exec_())なしでやろうとしましたが、それは新しいウィンドウが表示されてからミリ秒後にしか閉じません。ただし、この方法では、すべてが実行され、機能します。コマンド ウィンドウにのみ、エラー メッセージが表示されます。最後の行を削除できないため、これを修正する方法がわかりません。また、 「アプリ」を何に置き換えるかわかりません。

おそらく最初から新しいウィンドウを間違って実行していることはわかっていますが、これらのウィンドウを元のウィンドウから他の方法で開く方法がわかりません。他に何も動作させることができませんでしたが、これは少なくとも実行され、現在動作しています。したがって、唯一の問題はプロンプトのエラーメッセージです。それらを取り除くといいでしょう:)

助けてくれてありがとう(複雑なものと簡単なもの)!

言い忘れましたが、クラスを次のように開始しました。

class GUI(QtGui.QMainWindow):
    def __init__(self):
        super(GUI, self).__init__()
        self.initUI()

class Settings(QtGui.QWidget):
    def __init__(self):
        super(Settings, self).__init__()
        ...here goes some more...
        self.initUI2()

main2() を呼び出して設定ウィンドウを開きます

4

1 に答える 1

7

プログラムで QApplication を 1 つだけ作成する必要があります。

GUI プログラミングはイベント ドリブンであることに注意してください。最初にウィジェットを宣言してapp.exec()から、ユーザーがアプリケーションを終了するとapp.exec()戻るメイン ループを実行します。

QApplication の目的は、ユーザー イベントを処理し、Qt シグナルを使用してコードに伝達することです。Qt のドキュメントを確認することをお勧めします。C++ プログラマーを対象としている場合でも、非常に完全です。

たとえば、2 つのウィジェットを作成する方法は次のようになります。

def main():
    app = QtGui.QApplication(sys.argv)

    ex = QtGui.QWidget()
    ex.show()
    ex2 = QtGui.QWidget()
    ex2.show()

    sys.exit(app.exec())
于 2013-04-25T17:49:48.443 に答える