PySide超入門【第14回】アプリの操作性を高める!QMenuBarとQToolBarの徹底解説

\ 迷ったらまずTechAcademyの無料カウンセリング! /

GUIアプリケーションにおける操作性を大きく向上させるのが、メニューバーとツールバーです。 QMenuBarQToolBar を活用することで、ユーザーにとって直感的で分かりやすいインターフェースを構築できます。

  • QMenuBar : メニュー項目を階層的に表示し、標準的なアプリ操作を実現します。
  • QToolBar : よく使う操作をアイコンボタンとして常時表示する領域を提供します。

本記事では、この2つのウィジェットの使い方を基礎から丁寧に解説し、操作性の高いUI設計を学んでいきます。

目次

QMenuBar / QToolBarとは?

QMenuBar は、アプリケーションの最上部に配置されるメニュー領域で、「ファイル」「編集」「表示」などの階層的な操作メニューを提供します。ユーザーが直感的にアクセスしやすいナビゲーション手段です。

一方、QToolBar はよく使うアクションをボタンやアイコンで常時表示するコンポーネントで、操作のスピードと効率を高める役割を果たします。

この2つは QMainWindow と組み合わせて使用されることが一般的で、GUIアプリの操作性とユーザビリティを大きく向上させます。

基本コード

from PySide6.QtWidgets import QApplication, QMainWindow, QMenu, QToolBar
from PySide6.QtGui import QAction
import sys

app = QApplication(sys.argv)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QMenuBarとQToolBar")

        # メニューバー作成
        menubar = self.menuBar()
        file_menu = QMenu("ファイル", self)
        menubar.addMenu(file_menu)

        # アクション作成
        open_action = QAction("開く", self)
        file_menu.addAction(open_action)

        # ツールバー作成
        toolbar = QToolBar("メインツールバー", self)
        self.addToolBar(toolbar)
        toolbar.addAction(open_action)

window = MainWindow()
window.show()
sys.exit(app.exec())

主なプロパティとメソッド一覧(全解説)

QMenuBar

Noメソッド / プロパティ説明
1addMenu(title)新しいメニューを作成menubar.addMenu(“ファイル”)
2addAction(action)メニューにアクションを追加file_menu.addAction(action)
3addSeparator()メニューに区切り線を挿入file_menu.addSeparator()
4setTitle(title)メニューのタイトルを設定(QMenu)file_menu.setTitle(“編集”)
5clear()メニュー内のアクションを全て削除file_menu.clear()
6isEmpty()メニューが空かどうかを判定file_menu.isEmpty()
7setEnabled(bool)メニューを有効・無効にするfile_menu.setEnabled(False)
8setShortcutVisibleInContextMenu(bool)コンテキストメニューにショートカットを表示action.setShortcutVisibleInContextMenu(True)

QToolBar

Noメソッド / プロパティ説明
9addAction(action)ツールバーにアクションを追加toolbar.addAction(action)
10addSeparator()ツールバーに区切り線を追加toolbar.addSeparator()
11setMovable(bool)ツールバーの移動可否を設定toolbar.setMovable(False)
12setFloatable(bool)フローティング(独立表示)の可否を設定toolbar.setFloatable(True)
13setAllowedAreas(areas)配置可能な領域を指定(Top, Bottomなど)toolbar.setAllowedAreas(Qt.TopToolBarArea)
14toggleViewAction()表示/非表示を切り替える QAction を取得toolbar.toggleViewAction()
15setOrientation(Qt.Orientation)ツールバーの縦横方向を設定toolbar.setOrientation(Qt.Vertical)
16setToolButtonStyle(style)アイコンとテキストの表示方法を設定toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

各プロパティ・メソッド 詳細解説

【1】新しいメニュー項目を追加

  • 概要:メニューバーに新しいメニュー項目を追加します。
  • メソッド:addMenu(title)
  • 使い方
file_menu2 = menubar.addMenu("編集")

【2, 9】QAction を追加

  • 概要QAction をメニューまたはツールバーに追加します。
  • メソッド:addAction(action)
  • 使い方
# メニュー
edit_action = QAction("編集", self)
file_menu2.addAction(edit_action)

# ツールバー
toolbar.addAction(action)
toolbar.addAction(edit_action)

【3, 10】区切り線(セパレータ)を追加

  • 概要:区切り線(セパレータ)をメニューまたはツールバーに追加します。
  • メソッド:addSeparator()
  • 使い方
file_menu.addSeparator()
toolbar.addSeparator()

【4】QMenuのタイトルを変更

  • 概要QMenu のタイトルを後から変更します。
  • メソッド:setTitle(title)
  • 使い方
file_menu.setTitle("Open")

【5】すべてのアクションを削除

  • 概要:メニューのすべてのアクションを削除します。
  • メソッド:clear()
  • 使い方
file_menu.clear()

【6】アクションが空かを判定

  • 概要:メニューにアクションがひとつもないかどうかを返します。
  • メソッド:isEmpty()
  • 使い方
if file_menu.isEmpty():
    print("空のメニューです")
else:
    print("アクションがあります")

# アクションがあります

【7】無効化または有効化

  • 概要:メニューやアクションを無効化または有効化します。
  • メソッド:setEnabled(bool)
  • 使い方
file_menu.setEnabled(False)  # グレーアウトされて選択不可に

【8】ショートカットキーを表示

  • 概要:アクションのショートカットキーを右クリックメニューに表示するかどうかを指定します。
  • メソッド:setShortcutVisibleInContextMenu(bool)
  • 使い方
action.setShortcutVisibleInContextMenu(True)

【11】ドラッグで移動できるかどうか

  • 概要:ツールバーをドラッグで移動できるかどうかを設定します。
  • メソッド:setMovable(bool)
  • 使い方
toolbar.setMovable(False)  # 固定化

【12】フローティング表示

  • 概要:ツールバーをウィンドウから切り離してフローティング表示可能にするかを設定します。
  • メソッド:setFloatable(bool)
  • 使い方
toolbar.setFloatable(True)

【13】ツールバーの位置制限

  • 概要:ツールバーが配置可能な位置(上、下、左右)を制限します。
  • メソッド:setAllowedAreas(areas)
定数名表示位置説明
Qt.LeftToolBarArea左側メインウィンドウの左側にツールバーを配置可能
Qt.RightToolBarArea右側メインウィンドウの右側に配置可能
Qt.TopToolBarArea上部(デフォルト)ウィンドウ上部に配置可能(最も一般的)
Qt.BottomToolBarArea下部ウィンドウ下部に配置可能
Qt.AllToolBarAreas全領域上記4つすべての位置に配置可能
Qt.NoToolBarArea無効どこにも配置できない(主に無効化時に使用)
  • 使い方
from PySide6.QtCore import Qt
toolbar.setAllowedAreas(Qt.TopToolBarArea | Qt.LeftToolBarArea)

【14】ツールバーの表示・非表示

  • 概要:ツールバーの表示・非表示を切り替える QAction を取得できます。
  • メソッド:toggleViewAction()
  • 使い方
view_action = toolbar.toggleViewAction()
menu.addAction(view_action)
追加されたQAction ツールバーの非表示

【15】ツールバーの縦向き・横向き

  • 概要:ツールバーを縦向きまたは横向きに配置します。
  • メソッド:setOrientation(Qt.Orientation)
  • 使い方
from PySide6.QtCore import Qt
toolbar.setOrientation(Qt.Vertical)

【16】テキスト・アイコンの表示

  • 概要:ツールバー上のボタンにテキスト・アイコンの表示方法を指定します。
  • メソッド:setToolButtonStyle(style)
スタイル名表示形式
Qt.ToolButtonIconOnlyアイコンのみ
Qt.ToolButtonTextOnlyテキストのみ
Qt.ToolButtonTextBesideIconアイコンの横にテキスト
Qt.ToolButtonTextUnderIconアイコンの下にテキスト
  • 使い方
# ライブラリの読み込み
from PySide6.QtCore import Qt
from PySide6.QtGui import QIcon

# テキスト・アイコンの表示方法を指定
toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

# アクション追加(アイコン + テキスト)
open_action = QAction(QIcon.fromTheme("document-open"), "開く", self)
save_action = QAction(QIcon.fromTheme("document-save"), "保存", self)

toolbar.addAction(open_action)
toolbar.addAction(save_action)

よくある質問(FAQ)

QAction はどこで定義すべき?

通常は __init__ の中で定義し、必要に応じて複数の場所(メニュー・ツールバー)に追加します。

ツールバーにアイコン付きボタンを表示するには?

QActionQIcon を設定してから addAction() します。

QAction(QIcon("open.png"), "開く", self)
メニューにショートカットキーを付けたい

QActionsetShortcut("Ctrl+O") を使うことで設定可能です。

メニューやツールバーが表示されないときの対処法は?

QMainWindow を使っているか、addToolBar()menuBar() を呼び出しているか確認しましょう。

メニューの階層構造を作るには?

addMenu() を使ってサブメニューを追加できます。

edit_menu = menubar.addMenu("編集")
format_menu = edit_menu.addMenu("フォーマット")

まとめ

QMenuBarQToolBar を活用することで、操作性の高いGUIを構築できます。共通の QAction を使うことで、メニュー・ツールバーの統一感を保ちつつ、コードの再利用性も高めることができます。

次回は、ステータス表示や通知に便利な QStatusBarQMessageBox の使い方を解説します。

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次