\ 迷ったらまずTechAcademyの無料カウンセリング! /
PySide超入門【第14回】アプリの操作性を高める!QMenuBarとQToolBarの徹底解説

GUIアプリケーションにおける操作性を大きく向上させるのが、メニューバーとツールバーです。 QMenuBar
と QToolBar
を活用することで、ユーザーにとって直感的で分かりやすいインターフェースを構築できます。
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 | メソッド / プロパティ | 説明 | 例 |
---|---|---|---|
1 | addMenu(title) | 新しいメニューを作成 | menubar.addMenu(“ファイル”) |
2 | addAction(action) | メニューにアクションを追加 | file_menu.addAction(action) |
3 | addSeparator() | メニューに区切り線を挿入 | file_menu.addSeparator() |
4 | setTitle(title) | メニューのタイトルを設定(QMenu) | file_menu.setTitle(“編集”) |
5 | clear() | メニュー内のアクションを全て削除 | file_menu.clear() |
6 | isEmpty() | メニューが空かどうかを判定 | file_menu.isEmpty() |
7 | setEnabled(bool) | メニューを有効・無効にする | file_menu.setEnabled(False) |
8 | setShortcutVisibleInContextMenu(bool) | コンテキストメニューにショートカットを表示 | action.setShortcutVisibleInContextMenu(True) |
QToolBar
No | メソッド / プロパティ | 説明 | 例 |
---|---|---|---|
9 | addAction(action) | ツールバーにアクションを追加 | toolbar.addAction(action) |
10 | addSeparator() | ツールバーに区切り線を追加 | toolbar.addSeparator() |
11 | setMovable(bool) | ツールバーの移動可否を設定 | toolbar.setMovable(False) |
12 | setFloatable(bool) | フローティング(独立表示)の可否を設定 | toolbar.setFloatable(True) |
13 | setAllowedAreas(areas) | 配置可能な領域を指定(Top, Bottomなど) | toolbar.setAllowedAreas(Qt.TopToolBarArea) |
14 | toggleViewAction() | 表示/非表示を切り替える QAction を取得 | toolbar.toggleViewAction() |
15 | setOrientation(Qt.Orientation) | ツールバーの縦横方向を設定 | toolbar.setOrientation(Qt.Vertical) |
16 | setToolButtonStyle(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__
の中で定義し、必要に応じて複数の場所(メニュー・ツールバー)に追加します。 - ツールバーにアイコン付きボタンを表示するには?
-
QAction
にQIcon
を設定してからaddAction()
します。QAction(QIcon("open.png"), "開く", self)
- メニューにショートカットキーを付けたい
-
QAction
にsetShortcut("Ctrl+O")
を使うことで設定可能です。 - メニューやツールバーが表示されないときの対処法は?
-
QMainWindow
を使っているか、addToolBar()
やmenuBar()
を呼び出しているか確認しましょう。 - メニューの階層構造を作るには?
-
addMenu()
を使ってサブメニューを追加できます。edit_menu = menubar.addMenu("編集") format_menu = edit_menu.addMenu("フォーマット")
まとめ
QMenuBar
と QToolBar
を活用することで、操作性の高いGUIを構築できます。共通の QAction
を使うことで、メニュー・ツールバーの統一感を保ちつつ、コードの再利用性も高めることができます。
次回は、ステータス表示や通知に便利な QStatusBar
と QMessageBox
の使い方を解説します。

コメント