PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。Linux/X11, macOS および Microsoft Windows をサポートしています。配布ライセンスは LGPL で公開されています。
メニューバーでつくるメニューではなく、GUI に配置した特定のボタンの機能を拡張するためにメニューを付けたくなるときがあります。そんなとき、どうやるんだっけと、いつもあれこれ調べ始めてしまいます。これでは効率が悪いので、ベースサンプルとして使えるように、QToolButton にいわゆるプルダウン・メニューをつけたサンプルを作りましたので、備忘録として紹介します。
下記の OS 環境で動作確認をしています。
![]() |
Fedora Workstation 39 | x86_64 |
Python | 3.11.7 | |
PySide6 | 6.6.1 |
サンプルを以下に示しました。
qt_toolbar_toolbutton_menu.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# coding: utf-8 | |
import sys | |
from PySide6.QtGui import QActionGroup, QAction | |
from PySide6.QtWidgets import ( | |
QApplication, | |
QMainWindow, | |
QMenu, | |
QSizePolicy, | |
QToolBar, | |
QToolButton, | |
QWidget, | |
) | |
class Example(QMainWindow): | |
def __init__(self): | |
super().__init__() | |
self.init_ui() | |
def init_ui(self): | |
toolbar = QToolBar() | |
self.addToolBar(toolbar) | |
pad = QWidget() | |
pad.setSizePolicy( | |
QSizePolicy.Policy.Expanding, | |
QSizePolicy.Policy.Preferred | |
) | |
toolbar.addWidget(pad) | |
toolbutton = QToolButton() | |
toolbutton.setText('Menu') | |
toolbar.addWidget(toolbutton) | |
menu = QMenu(self) | |
toolbutton.setMenu(menu) | |
toolbutton.setPopupMode( | |
QToolButton.ToolButtonPopupMode.InstantPopup | |
) | |
action_1 = QAction('Action 1') | |
action_1.setCheckable(True) | |
action_1.setChecked(True) # default selection | |
menu.addAction(action_1) | |
action_2 = QAction('Action 2') | |
action_2.setCheckable(True) | |
menu.addAction(action_2) | |
action_3 = QAction('Action 3') | |
action_3.setCheckable(True) | |
menu.addAction(action_3) | |
group_action = QActionGroup(self) | |
group_action.addAction(action_1) | |
group_action.addAction(action_2) | |
group_action.addAction(action_3) | |
group_action.triggered.connect(self.on_triggered) | |
def on_triggered(self): | |
group: QActionGroup = self.sender() | |
action = group.checkedAction() | |
print(action.text(), 'is selected.') | |
def main(): | |
app = QApplication(sys.argv) | |
ex = Example() | |
ex.show() | |
sys.exit(app.exec()) | |
if __name__ == '__main__': | |
main() |
qt_toolbar_toolbutton_menu.py の実行例
参考サイト

にほんブログ村
#オープンソース

0 件のコメント:
コメントを投稿