2024-01-02

QToolButton にメニューをつける ~ PySide6

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
#!/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 の実行例

参考サイト

  1. QToolButton - Qt for Python

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



0 件のコメント: