PySide6でウィンドウの作成【QMainWindow】

python コンピュータ
python

Qtではウィンドウを使わずラベル直接表示出来て驚きましたが、今回はベースとなるウィンドウのお話になります。

ウィンドウの表示

import sys
from PySide6.QtWidgets import QApplication,QMainWindow

# メインウィンドウ
class MyMainWindow(QMainWindow):

    # コンストラクタ
    def __init__(self):
        # スーパー(親)クラスのコンストラクタの呼び出し
        super().__init__()
        # ウィンドウサイズの設定
        self.setGeometry(0, 0, 640, 400)
        # フォームのタイトルを設定
        self.setWindowTitle("QMainWindowのサンプル")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyMainWindow()
    window.show()
    sys.exit(app.exec())

ウィンドウが作成されました。

QMainWindowを継承したclass MyMainWindowを定義しています。
ウィンドウサイズの変更やタイトルの設定を試しましたが、self.setGeometry()self.setWindowTitle()などプロパティではなくメソッドで名前がsetから始まるあたり昔のJavaの香りを感じます。と感じましたがPySideで使われているQtはC++ベースだったはずですので、そちらのスタイルなのでしょうか?また、setはあってもgetは見つけられなかったので、他言語の経験が使えない厄介なことに成りそうです。

メニューバーとステータスバー

とりあえずどのようにレイアウトされるか確認。

import sys
from PySide6.QtWidgets import QApplication,QMainWindow

# メインウィンドウ
class MyMainWindow(QMainWindow):

    # コンストラクタ
    def __init__(self):
        # スーパー(親)クラスのコンストラクタの呼び出し
        super().__init__()
        # ウィンドウサイズの設定
        self.setGeometry(0, 0, 640, 400)
        # フォームのタイトルを設定
        self.setWindowTitle("QMainWindowのサンプル")

        # メニューバー
        menubar1 = self.menuBar()
        menubar1.addMenu("ファイル")

        # ステータスバー
        statusbar1 = self.statusBar()
        statusbar1.showMessage('ステータスバー')

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyMainWindow()
    window.show()
    sys.exit(app.exec())

メニューバーの生成?はself.menuBar()から行っていますので、QMainWindow(self)にはあらかじめメニューバーが仕込まれている模様。addMenu()で要素を追加することで可視化?される模様。

ステータスバーもメニューバーと同じ感じに呼び出します。
ステータスバーの.showMessage()で表示したメッセージはいつの間にか消えていていました。

予め用意されている点は便利で良いですが、これほどリッチなWindowを初めて見ました。

 

コメント