今回は、ボタンを押すと下からニュッと飛び出してくるメッセージ系ウィジット「ToasterBox」をご紹介します。
「ToasterBox」はその名の通り、焼けたトーストが「チンっ」と飛び出てくることに由来しています。(大嘘)
面白そうなウィジットですよね!
環境
- macOS Sierra 10.12.5
- python 3.4
- wxPython 4.0.0a3
スクリプト
# -*- coding: UTF-8 -*-
import wx
import wx.lib.agw.toasterbox as TB
class App(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(200, 200))
p = wx.Panel(self, wx.ID_ANY)
b = wx.Button(p, wx.ID_ANY, 'ボタン')
b.Bind(wx.EVT_BUTTON, self.click)
# レイアウト
layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(b, flag=wx.ALL, border=10)
p.SetSizer(layout)
self.Show()
def click(self, event):
# マウス座標を取得
(x, y) = wx.GetMousePosition()
# ToasterBox
toaster = TB.ToasterBox(self, tbstyle=TB.TB_SIMPLE)
toaster.SetPopupBackgroundColour("pink")
toaster.SetPopupPauseTime(3000)
toaster.SetPopupText("見てくれて\nありがとう")
toaster.SetPopupSize(wx.Size(80, 80))
toaster.SetPopupPosition(wx.Position(x + 10, y + 10))
toaster.SetPopupTextFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, 'メイリオ'))
toaster.Play()
if __name__ == "__main__":
app = wx.App()
App(None, wx.ID_ANY, 'タイトル')
app.MainLoop()
実行結果
いつもありがとうございます。
解説
トースターボックスを使用するには、wx.lib.agwパッケージのtoasterboxクラスをインポートします。
今回は簡略化するため、asを用いて「TB」としました。
import wx.lib.agw.toasterbox as TB
続いてインスタンス化です。
今回はボタンがクリックされた時にインスタンス化を行うようになっています。
toaster = TB.ToasterBox(self, tbstyle=TB.TB_SIMPLE)
この部分でインスタンス化を行なっています。この時の引数は(親ウィジット、TBスタイル)です。
TBスタイルは次の2種類から選択できます。
- TB_SIMPLE
- TB_COMPLEX
TB_COMPLEXはAddPanelメソッドを使用することでToasterBox内にパネルを設置することができ、ボタンなどのウィジットを追加することができます。
tbstyle比較 |
今回は省略していますが、他にも「windowstyle」「closingstyle」「scrollType」を指定することができます。
windowstyle
windowstyleはトースターボックスの外観に関するスタイルで、次の2つがあります。
- TB_DEFAULT_STYLE
- TB_CAPTION
TB_CAPTIONはフレームやダイアログのように周りに枠があり、タイトルや×ボタンが表示されます。
windowstyle比較 |
closingstyle
closingstyleはトースターボックスを閉じるタイミングに関するスタイルで、次の2つがあります。
- TB_ONTIME
- TB_ONCLICK
TB_ONCLICKは指定時間の経過を待たずとも、枠内をクリックすると閉じることができます。
scrollType
scrollTypeはトースターボックスの表示方法に関するスタイルで、次の3つがあります。
- TB_SCR_TYPE_DU
- TB_SCR_TYPE_UD
- TB_SCR_TYPE_FADE
メソッド紹介
使用頻度が高そうなメソッドを厳選してご紹介します。
# テキストを設定する(tbstyleがTB_SIMPLEの時のみ)
toaster.SetPopupText("見てくれて\nありがとう")
# 背景色を設定する(tbstyleがTB_SIMPLEの時のみ)
toaster.SetPopupBackgroundColour("pink")
# 画像を設定する(tbstyleがTB_SIMPLEの時のみ)
toaster.SetPopupBitmap(wx.Bitmap("image.png"))
# 表示時間をミリ秒で設定する
toaster.SetPopupPauseTime(3000)
# 表示位置を設定する(左上角の位置)
toaster.SetPopupPosition(wx.Position(10, 10))
# サイズを設定する
toaster.SetPopupSize(wx.Size(80, 80))
# タイトルを設定する
toaster.SetTitle("タイトル")
参考
・公式リファレンス:wx.lib.agw.toasterbox.ToasterBox
まとめ
トースターボックスはよく使われるダイアログとは一味違っていて、動きがあるぶん、作る側も使う側も楽しめるようなウィジットです。
ボタンやテキストコントロールの設置も可能ですので、アイデア次第で色々と活躍してくれるかもしれません。