mieki256's diary



2016/11/17(木) [n年前の日記]

#1 [python] PySideのツールバー関係を勉強中

QToolBar なるクラスを使うとツールバーが表示できるらしいので、その手のサンプルを探して眺めていたり。

_Menus and toolbars in PySide

どうやら、QAction を使って、メニューに表示する各項目を用意してから、メニューに追加、かつ、ツールバーにも追加していく模様。

QActionの書き方。 :

今までは以下のような書き方をしてたけど。
    eraser_action = QAction("Eraser", self)
    eraser_icon = QIcon(self.icons[2])
    eraser_action.setIcon(eraser_icon)
    eraser_action.setCheckable(True)
    eraser_action.setShortcut("E")
    eraser_action.setStatusTip("Eraser tool")
    eraser_action.triggered.connect(self.eraser_tool)

_Examples/menus.py at master - PySide/Examples で、こういう書き方もできるらしいと知った。
    line_action = QAction(QIcon(self.icons[3]), "Line", self,
                          checkable=True, shortcut="L",
                          statusTip="Line tool",
                          triggered=self.line_tool)

どっちが分かりやすいのかは、ちょっとよく分からない。

Qtが持っているアイコン画像を使う書き方。 :

自分で用意したアイコン画像を指定する際は以下のように書くけれど。
    new_action = QAction("&New", self)
    new_icon = QIcon(QPixmap("document-new.png"))
    new_action.setIcon(new_icon)

Qtが持ってるアイコン画像を使う場合は以下のように書けばいいらしい。
    new_action = QAction("&New", self)
    new_icon = self.style().standardIcon(QStyle.SP_FileIcon)
    new_action.setIcon(new_icon)

どういう種類のアイコン画像があるかは、以下のページが参考になった。

_Qt デフォルトで使用可能な組み込みアイコン QStyle::StandardPixmaps - unstable diary
_QStyle - PySide v1.0.7 documentation (PySide.QtGui.QStyle.StandardPixmap のあたりを参照)
_List of Qt Icons | Joe Kuan Defunct Code

qApp.setStyle(QStyleFactory.create('Cleanlooks')) 等を指定して全体の見た目を変えるとアイコンも変わるかもと思ったけれど。試してみたら一部のアイコンは変わったものの、大半は同じデザインのアイコンが表示された。

QToolBar上のアイコンサイズ。 :

QToolBar上のアイコンサイズを指定する方法は、以下が参考になった。

_How to change Icon size in QMenu?

    self.view_tb = QToolBar("View")
    self.view_tb.setIconSize(QSize(32, 32))
    self.addToolBar(self.view_tb)
QToolBarに対し、setIconSize() を使えば、表示したいアイコンサイズを指定することができる。

アクションのグループ化。 :

例えば、CGツールでよく見かける、ブラシツール、消しゴムツール、選択ツール等は、一つを選ぶと他の項目が非選択になる。要は、ラジオボタンっぽい感じだけど。

そういう感じのメニューやツールバーにしたい時は、QActionGroup を使う。
    # ツール群。checkableをTrueにしてることに注意
    pen_action = QAction("Pen", self)
    pen_action.setIcon(QIcon(self.icons[0]))
    pen_action.setCheckable(True)
    pen_action.setShortcut("P")
    pen_action.triggered.connect(self.pen_tool)

    eraser_action = QAction("Eraser", self)
    eraser_action.setIcon(QIcon(self.icons[2]))
    eraser_action.setCheckable(True)
    eraser_action.setShortcut("E")
    eraser_action.triggered.connect(self.eraser_tool)

    # ツール群はグループ化する。どれか一つだけが選ばれる状態になる。
    self.tools_grp = QActionGroup(self)
    self.tools_grp.addAction(pen_action)
    self.tools_grp.addAction(eraser_action)
    pen_action.setChecked(True)
該当する QAction に対し、setCheckable(True) を設定してから、QActionGroup に追加登録してやる。また、初期状態では、setChecked(True) を使って、どれか一つを選択状態にしておく。

メニューバーやツールバーへの登録は、いつもと同じように行えばいい。QActionGroup 自体をメニューバーやツールバーに追加登録する必要はない。

以上です。

過去ログ表示

Prev - 2016/11 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project