リンク

2017年6月28日水曜日

pythonでGUIツールを作る 〜AquaButton(アクアボタン)〜


今回は、wxPythonで使える、ちょっと変わったボタン・ウィジットをご紹介します。

ご紹介するのは「アクアボタン」というもので、通常のボタンと比べると見た目から全然違います。


少し見にくいですが、上のボタンが「アクアボタン」、下のボタンが「通常のボタン」です。
アクアボタンの特徴は、「影があり、浮いているように見える」ことです。


環境
  • macOS Sierra 10.12.5
  • python 3.4
  • wxPython 4.0.0a3

スクリプト
# -*- coding: UTF-8 -*-

import wx
import wx.lib.agw.aquabutton as aq

class App(wx.Frame):
    """ GUI """
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(300, 300))
        p = wx.Panel(self, wx.ID_ANY)

        # アクアボタン
        button = aq.AquaButton(p, wx.ID_ANY, None, 'アクアボタン')
        button.Bind(wx.EVT_BUTTON, self.click)

        # 通常のボタン
        b = wx.Button(p, wx.ID_ANY, '通常のボタン')

        # レイアウト
        layout = wx.BoxSizer(wx.VERTICAL)
        layout.Add(button, flag=wx.ALL, border=20)
        layout.Add(b, flag=wx.ALL, border=20)
        p.SetSizer(layout)

        self.Show()

    def click(self, event):
        """ クリックイベント """
        print('click')


if __name__ == "__main__":
    app = wx.App()
    App(None, wx.ID_ANY, 'タイトル')
    app.MainLoop()


解説
アクアボタンを使用するにはwx.lib.agwパッケージのaquabuttonクラスをインポートします。
今回は簡略化するため、asを用いて「aq」としました。
import wx.lib.agw.aquabutton as aq

続いてインスタンス化です。
# アクアボタン
button = aq.AquaButton(p, wx.ID_ANY, None, 'アクアボタン')
この部分でインスタンス化を行なっています。
引数は(親ウィジット、ID、イメージ、文字列)です。


メソッド紹介
アクアボタンは見た目が違うだけで、基本的には通常のボタンと同様のメソッドを使うことができます。
ここでは、アクアボタン特有のメソッドをご紹介します。

# 影部分の色を指定する (macOSでは反映されない)
button.SetShadowColour("red")

# ボタン上にマウスカーソルがあるときの色を指定する
button.SetHoverColour("blue")

# ボタンの後ろ部分四角の色を指定する
button.SetRectColour("green")

# ボタンにフォーカスがあるときの色を指定する
button.SetFocusColour("red")

ボタンの文字色を指定、マウスオーバー時の色を指定、後ろ部分の色を指定した場合はこのようになります。

まとめ
アクアボタンは見た目を一風変わったものにしながらも、操作性は通常のボタンと変わらないため、あっさりと導入することができます。

デザイン重視のアプリケーションを作成しようとされている方は、一度検討してみてはいかがでしょうか。

6 件のコメント:

  1. ボタン以外で、見た目のいいものをつくりたいのですが、可能でしょうか?
    例えば、チェックボックスやトグルボタンです。

    返信削除
    返信
    1. コメントありがとうございます。
      aquabutonは上記サンプルの通り「wx.lib.agw.aquabutton」をインポートしているのですが、「wx.lib.agw」パッケージには他にも様々なウィジットが用意されています。
      (agwは「Advanced Generic Widgets」の略です)
      agwで使えるウィジットは下記のページに掲載されておりますので、そちらをご覧ください😊
      https://wxpython.org/Phoenix/docs/html/wx.lib.agw.html#module-wx.lib.agw

      削除
    2. 思った以上にたくさんありましたね!今度じっくり見てみたいと思います!!

      削除
  2. アクアボタン以外で他のボタンに影を追加することが可能でしょうか?
    それともアクアボタン特有のメソッドでしょうか、、返信をいただければ幸いです。

    返信削除
    返信
    1. コメントありがとうございます。
      他のボタンに影を追加するというご質問についてですが、残念ながらアクアボタン以外には情報が見つかりませんでした。
      よって、アクアボタン特有のものであると思われます。
      ご期待にそえず、申し訳ありません。

      削除
    2. ご返信いただきありがとうございます。やはりアクアボタン特有のものですよね、、、

      削除