mlupinのブログ

mlupinのブログ

PR

×

キーワードサーチ

▼キーワード検索

カレンダー

コメント新着

mlupin @ Re[1]:確定申告、ようやく終わる!(03/15) 藻緯羅さんへ いつもコメントありがとうご…
藻緯羅 @ Re:確定申告、ようやく終わる!(03/15) 原則、雑所得になるようですね。  以前は…
mlupin @ Re[1]:2025 我が家のいちご 7個収穫!(08/20) 藻緯羅さんへ いつもメッセージをありがと…
藻緯羅 @ Re:2025 我が家のいちご 7個収穫!(08/20) この酷暑の中で、  イチゴの収穫とは、驚…
昔の家電製品@ Re:今日の花 サルスベリ(百日紅)(07/30) 昔の家電製品は、0896241455 をどうぞ。
2022.01.30
XML
カテゴリ: Python
「PythonでGUIアプリ開発」の基礎 PyQt/PySide編 その11

以下は、リスト9●どんなプログラムでも必要な基本機能をメニューに実装しよう(pyqt07.py)に筆者が、コメントを追加したもの。

# 「特集1 PythonでGUIアプリ開発」の基礎 PyQt/PySide編 その2
#
# ステップ08 メニューに定番機能を実装
#
#『日経ソフトウエア』2021年11月号(p.62~p.63)
#
#
# リスト9●どんなプログラムでも必要な基本機能をメニューに実装しよう(pyqt07.py)
#
# (1)
import sys, webbrowser
from PyQt6.QtGui import *
from PyQt6.QtWidgets import *
# 「QMainWindow」クラスを継承した「pyqt07」クラスを記述。
class pyqt07(QMainWindow):
    #  「pyqt07」クラスのコンストラクタ(インスタンス生成時に
    #   呼び出されるメソッド)である「__init__」を記述。
    def __init__(self):
        #  「pyqt07」クラスの親クラスである「QMainWindow」クラスのコンストラクタを実行するコード。
        #   この記述がないと必要な初期処理が実行されない。
        super().__init__()
        # タイトルバー文字列の設定。
        #   「pyqt07」クラスのインスタンスは、(12)で変数「w」に代入され、「w」という名前で
        #   参照できるが、その名前はクラスの外部のみからしか利用できない。クラス内部から自分
        #   自身のインスタンスを呼び出すには、コンストラクタで指定した「self」という名前を使う。
        #   「setWindowTitle」メソッドに与えた「self.__class__.__name__」は、このクラスの名前で、
        #   中身は「pyqt07」。
        self.setWindowTitle(self.__class__.__name__)
        #  同様に「self」を使って、ラベルウィジェットの位置と大きさを設定する。
        self.setGeometry(100, 100, 250, 100)
        # (2) QMainWindow」クラスを継承した「pyqt07」クラスの「menuBar」メソッドを呼び出して、
        #  メニューバーのインスタンスを作り、それを「menu」という名前で参照できるようにする。
        menu = self.menuBar()
        # (3) 「ファイル」メニューを追加し、それを「menuFile」という名前で参照できるようにする。
        #   「&(アンパサンド)」の次の文字は「アクセスキー」になる。「Altキー」を押しながら
        #   「F」キーを押すと、「ファイル」メニューを開けるようになる。
        menuFile = menu.addMenu('ファイル(&F)')
        # (4) メニュー項目に相当する「アクション」を作り、「menuFileExit」という名前で参照できるようにする。
        #   「QAction」クラスのコンストラクタに渡す最初の引数はアイコンの指定で、ここではQtが持っている
        #   「SP_TitleBarCloseButton」を指定している。
        #   続く引数は、メニュー項目の文字列( '終了(&X)')と親オブジェクト。
        menuFileExit = QAction(
          QIcon(self.style().standardIcon(
          QStyle.StandardPixmap.
          SP_TitleBarCloseButton)),
          '終了(&X)', menuFile)
        # (5) 「終了」メニューが選ばれた場合の処理として、「quit」を指定。
        #   「quit」は、「QApplication」静的メソッドで、呼び出すとプログラムが終了する。
        menuFileExit.triggered.connect(quit)
        # (6) 「menuFile」に「menuFileExit」アクションを追加する。
        menuFile.addAction(menuFileExit)
        # (7) 「ヘルプ」メニューを生成して、「menuHelp」という名前で参照できるようにする。
        menuHelp = menu.addMenu('ヘルプ(&H)')
        # (8) 「menuHelpWeb」メニューを生成して、「menuHelpWeb」という名前で参照できるようにする。
        #   このメニュー項目が選ばれた場合、(11)の「menuHelpWebClicked」メソッドを呼び出す。        
        menuHelpWeb = QAction(
            QIcon(self.style().standardIcon(
            QStyle.StandardPixmap.
            SP_DialogHelpButton)),
            'Webサイトを開く(&W)', menuHelp)
        menuHelpWeb.triggered.connect(
            self.menuHelpWebClicked)
        menuHelp.addAction(menuHelpWeb)
        # (9) メニューの区切り線(セパレータ)を追加するコード。
        menuHelp.addSeparator()
        # (10) バージョン情報を追加するコード。
        #   そのイベントハンドラは、(12)。  
        menuHelpVersion = QAction(
            QIcon(self.style().standardIcon(
            QStyle.StandardPixmap.
            SP_MessageBoxInformation)),
            'バージョン情報(&V)', menuHelp) 
        menuHelpVersion.triggered.connect(
            self.menuHelpVersionClicked)
        menuHelp.addAction(menuHelpVersion)
        #  「show」メソッドを呼び出して、表示する。
        self.show()
    # (11) 「menuHelpWeb」メニュー項目が選ばれた場合のコード。
    #   「webbrowser.open」関数を使うため、(1)で「webbrowser」モジュールをインポートしている。
    def menuHelpWebClicked(self):
        webbrowser.open(
            'https://info.nikkeibp.co.jp/media/NSW/')
    # (12) 実行をするとダイアログを出す。
    #   「sys.version」、を使うために(1)で「sys」モジュールをインポートしている。
    def menuHelpVersionClicked(self):
        s = self.__class__.__name__
        s += ' Version 0.01(2021/08/25)\n'
        s += '@2021 Hideo Harada\n'
        s += 'with Python ' + sys.version
        QMessageBox.information(
          self, self.__class__.__name__, s)
# プログラムを起動したときに最初に実行される。
app = QApplication([])
#  「pyqt07」クラスを生成すると、「def __init__(self):」が実行される。
w = pyqt07()
#  これを実行することで、GUIの画面がユーザーに表示される。


リスト9(pyqt07)の実行結果


「ヘルプ」メニューをクリックした結果(「alt」+「H」でも同様)



「ヘルプ」メニューの「Webを開く」の実行結果。日経ソフトウエアの最新号が表示された。」

「ヘルプ」メニューの「バージョン情報(V)」の実行結果。


<おまけ>
リスト9をJupiterNotebookで実行した結果。






どういうわけか、JupiterNotebookでは、「終了(X)」メニューが機能しませんでした。「Webを開く(W)」、「バージョン情報(V)」は機能したのですが。





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2022.01.30 14:40:52
コメントを書く


■コメント

お名前
タイトル
メッセージ
画像認証
上の画像で表示されている数字を入力して下さい。


利用規約 に同意してコメントを
※コメントに関するよくある質問は、 こちら をご確認ください。


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.

Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: