PyQt5 チュートリアル - メニューバー

  1. PyQt5 メニューバー基本の例
  2. PyQt5 メニューバーメニュー項目アイコン
  3. PyQt5 メニューバーのチェック可能なメニュー項目

メニューバーは通常、GUI の左上隅とタイトルバーの下にあります。ユーザーがメニューの項目をクリックすると、ファイルを開く、ファイルを保存する、アプリケーションを終了するなどのアクションを実行できます。

メニューバーを開始し、アクションをメニューにバインドし、ショートカットを追加し、ステータステキストを表示する方法を学習します。

PyQt5 メニューバー基本の例

ほとんどのエディターと同様に、File メニューを持つ最初の PyQt5 メニューバーの例を作成します。簡単にするために、Exit サブメニューのみを含めます。

PyQt5 Menubar_Basic.py
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication

class basicMenubar(QMainWindow):
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)        
        
        self.initUI()        
        
    def initUI(self):    
        
        self.setGeometry(200, 200, 200, 200)           
        
        exitAction = QAction('&Exit', self)        
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)
        
        
        self.setWindowTitle('PyQt5 Basic Menubar')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = basicMenubar()
    sys.exit(app.exec_())

PyQt5 メニューバーベーシック

menubar = self.menuBar()

QMainWindow には、メニューバーを作成するためのメソッド menuBar() があります。

fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAction)

fileMenuFile という名前でメニューバーに追加され、QAction オブジェクトに関連付けられたメニューエントリ exitAction で構成されます。

exitAction = QAction('&Exit', self)        
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(qApp.quit)

アプリケーションを終了するための QAction オブジェクトを作成し、このオブジェクトを変数 exitAction に保存します。

この QAction オブジェクトの名前は「&Exit」であり、ショートカット「Ctrl + Q」に関連付けられています。

exitAction.setStatusTip('Exit application')

ユーザーがこのメニューエントリの上にマウスポインタを置くと、ステータスバーself.statusBar に追加のメッセージが表示されます。

exitAction.triggered.connect(qApp.quit)

この終了アクションがトリガーされるイベントを、アプリケーションの終了スロットに接続します。

PyQt5 メニューバーメニュー項目アイコン

PyQt5 メニューバーのメニュー項目のアイコンを設定するには、2つの方法があります。

PyQt5 デフォルトスタイルの標準ピックスマップ

デフォルトのスタイルの標準ピックスマップを使用して、標準アイコンでメニュー項目アイコンを設定できます。

self.style().standardIcon(QStyle.SP_DialogCancelButton)

上記のコードは、ダイアログキャンセルの標準アイコンを選択します。

PyQt5 メニューバーPixmap QStyle アイコン

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QStyle

class basicMenubar(QMainWindow):
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs) 
        
        self.initUI()        
        
    def initUI(self):    
        
        self.setGeometry(200, 200, 200, 200)           
        
        exitAction = QAction(self.style().standardIcon(QStyle.SP_DialogCancelButton),
                             '&Exit', self)        
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)
        
        
        self.setWindowTitle('PyQt5 Basic Menubar')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = basicMenubar()
    sys.exit(app.exec_())

QIcon で画像ファイルを使用する

QStyle のデフォルトのアイコンを使用する上記のメソッドに加えて、QIcon クラスを使用してアイコンとして任意の画像ファイルを使用することもできます。

QIcon('exit.png')

画像ファイル exit.png をアイコンに設定します。exit.png ファイルは python スクリプトファイルと同じフォルダーにある必要があります。

PyQt5 メニューバーQIcon アイコン

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QStyle
from PyQt5.QtGui import QIcon

class basicMenubar(QMainWindow):
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)        
        
        self.initUI()        
        
    def initUI(self):    
        
        self.setGeometry(200, 200, 200, 200)           
        
        exitAction = QAction(QIcon('exit.png'),
                             '&Exit', self)        
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)
        
        
        self.setWindowTitle('PyQt5 Basic Menubar')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = basicMenubar()
    sys.exit(app.exec_())

PyQt5 メニューバーのチェック可能なメニュー項目

チェック可能なメニュー項目はチェックまたはチェック解除でき、ユーザーがクリックするたびに状態が切り替わります。

QAction オブジェクトを作成するときにメニュー項目をチェック可能にするには、キーワード引数 checkableTrue に設定する必要があります。

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt

class basicMenubar(QMainWindow):
    
    def __init__(self):
        super().__init__()        
        
        self.initUI()        
        
    def initUI(self):    
        
        self.setGeometry(200, 200, 200, 200)  
        
        self.label = QLabel("The toggle state is ")
        self.label.setAlignment(Qt.AlignCenter)
        
        self.setCentralWidget(self.label)
        
        toggleAction = QAction('&Toggle Label', self, checkable=True)        
        toggleAction.setStatusTip('Toggle the label')
        toggleAction.triggered.connect(self.toggleLabel)
        
        exitAction = QAction(QIcon('exit.png'),
                             '&Exit', self)        
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(toggleAction)
        fileMenu.addAction(exitAction)
        
        
        
        self.setWindowTitle('PyQt5 Basic Menubar')    
        self.show()
        
    def toggleLabel(self, state):
        self.label.setText("The toggle state is {}".format(state))
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = basicMenubar()
    sys.exit(app.exec_())

PyQt5 メニューバーのチェック可能なアイテム

toggleAction = QAction('&Toggle Label', self, checkable=True)  

checkable プロパティは、QAction オブジェクトを開始するときにメニュー項目をチェック可能にするために True に設定する必要があります。

または、オブジェクトの作成後に setCheckable() メソッドを使用できます。

self.setCheckable(True)
注意

チェック可能なアイテムの状態は、コールバック関数のパラメーターです。したがって、関数を定義するときに引数にリストする必要があります。お気に入り

def toggleLabel(self, state):

state はブール型で、選択されている場合は True、選択されていない場合は False の値になります。

comments powered by Disqus