以下の内容はhttps://touch-sp.hatenablog.com/entry/2022/04/23/142157より取得しました。


【PyQt6】【サンプル】QToolBar(モダンなツールバーをできるだけ簡潔に実装する)

はじめに

前回メニューバーを実装しました。
touch-sp.hatenablog.com
今回はツールバーを実装したいと思います。

サンプルスクリプト

from PyQt6.QtCore import Qt, QSize
from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow, QToolBar
from PyQt6.QtGui import QIcon,QAction

toolbar_icons = [
    { 'name': 'Menu', 'icon': './icon/menu.svg'},
    { 'name': 'Home', 'icon': './icon/home.svg'},
    { 'name': 'Settings', 'icon': './icon/settings.svg'},
    { 'name': 'Exit', 'icon': './icon/x-circle.svg'},
]

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setFixedSize(QSize(600, 450))

        self.label = QLabel()
        self.setCentralWidget(self.label)

        self.toolbar = QToolBar()
        self.toolbar.setIconSize(QSize(32,32))
        self.toolbar.setStyleSheet("QToolBar {background: rgb(51, 51, 51); spacing: 10px;}")
        self.addToolBar(Qt.ToolBarArea.LeftToolBarArea, self.toolbar)
        self.toolbar.setMovable(False)

        self.all_icon = []
        for each_icon in toolbar_icons:
            icon_name = each_icon.get('name')
            icon_path = each_icon.get('icon')

            self.all_icon.append(QAction(QIcon(icon_path), icon_name, self))
            self.toolbar.addAction(self.all_icon[-1])
            self.all_icon[-1].triggered.connect(self.toolbarAction)
        
    def toolbarAction(self):

        self.label.setText(f'You pushed {self.sender().text()} icon!')

if __name__ == "__main__":
    app = QApplication([])
    ex =Window()
    ex.show()
    app.exec()

ポイント

アイコン画像はこちらのものを使わせて頂きました。
feathericons.com
「icon」フォルダを作成しそちらに使用するアイコンを入れました。


ダウンロードの際にcolorを「#FFFFFF」に設定しておくと白いアイコンがダウンロードできます。


もし黒でダウンロードした場合にはエディタでsvgファイルを開いてstrokeをwhiteに書き直すと白くなります。


追加したいアイコンの内容を一つずつ辞書型で定義しました。
キーの種類は「name」「icon」です。両方とも必須になります。
「icon」にはアイコンファイルのパスを記述します。

toolbar_icons = [
    { 'name': 'Menu', 'icon': './icon/menu.svg'},
    { 'name': 'Home', 'icon': './icon/home.svg'},
    { 'name': 'Settings', 'icon': './icon/settings.svg'},
    { 'name': 'Exit', 'icon': './icon/x-circle.svg'},
]



QActionは一つずつappendでリストに追加しています。
入れたばかりのものにはindex -1でアクセスしています。

self.all_icon = []
for each_icon in toolbar_icons:
    icon_name = each_icon.get('name')
    icon_path = each_icon.get('icon')

    self.all_icon.append(QAction(QIcon(icon_path), icon_name, self))
    self.toolbar.addAction(self.all_icon[-1])
    self.all_icon[-1].triggered.connect((lambda state, x = icon_name: self.toolbarAction(x)))

PyInstallerでexe化

pyinstaller toolbar_sample.py --noconsole

または

pyinstaller toolbar_sample.py --noconsole --onefile

上記コマンドで問題なくexe化できました。
ただし「icon」フォルダを作成したexeファイルと同じフォルダに配置する必要があります。
つまり--onefileを付けても完全なonefile化はできていませんので注意して下さい。

altgraph==0.17.2
future==0.18.2
pefile==2021.9.3
pyinstaller==5.0
pyinstaller-hooks-contrib==2022.4
PyQt6==6.3.0
PyQt6-Qt6==6.3.0
PyQt6-sip==13.3.1
pywin32-ctypes==0.2.0

2022年5月12日追記

つづきを書きました。
touch-sp.hatenablog.com




以上の内容はhttps://touch-sp.hatenablog.com/entry/2022/04/23/142157より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14