ImageListはその名の通り、”イメージの集まり”です。
ListCtrlやTreeCtrl、Menuなどで主に使用します。
例えば、ListCtrlにアイテムを追加する際、偶数の項目にはA.pngを、奇数の項目にはB.pngを当てはめる、といった具合です。
ImageListを使用する利点は「インデックスだけで画像を指定できる」という点です。
上記程度の内容であれば、直接イメージファイルを指定してもいいのですが、例えば「拡張子に対応したイメージを割り当てる」といった場合は結構面倒です。
そこでImageListが活躍します。
下記のスクリプトはListCtrlにImageListを適用するサンプルです。
# -*- coding: UTF-8 -*-
import wx
imagelist = wx.ImageList(32, 32)
imagelist.Add(wx.Icon("a.png", wx.BITMAP_TYPE_PNG))
imagelist.Add(wx.Icon("b.png", wx.BITMAP_TYPE_PNG))
imagelist.Add(wx.Icon("c.png", wx.BITMAP_TYPE_PNG))
imagelist.Add(wx.Icon("d.png", wx.BITMAP_TYPE_PNG))
class App(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(300, 300), style=wx.DEFAULT_FRAME_STYLE)
p = wx.Panel(self, wx.ID_ANY)
self.listctrl = wx.ListCtrl(p, wx.ID_ANY, style=wx.LC_ICON)
# ListCtrlにイメージリストを割り当て
self.listctrl.AssignImageList(imagelist, wx.IMAGE_LIST_NORMAL)
# ListCtrlにアイテムを追加
for x in range(4):
self.listctrl.InsertItem(x, 'item_' + str(x), x)
layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(self.listctrl, flag=wx.EXPAND | wx.ALL, border=10, proportion=1)
p.SetSizer(layout)
self.Show()
app = wx.App()
App(None, wx.ID_ANY, 'タイトル')
app.MainLoop()
<結果> ↓ ↓ ↓
※画像ファイルは各自でご用意ください。
ImageListには次のような関数があらかじめ用意されています。
# イメージリストに追加するイメージを指定する
imagelist.Add(wx.Icon("a.png", wx.BITMAP_TYPE_PNG))
# 指定インデックスのサイズを取得する
imagelist.GetSize(1)
# イメージリスト内のイメージ数を取得する
imagelist.GetImageCount()
# 指定インデックスのイメージを削除する
imagelist.Remove(1)
# 全てのイメージを削除する
imagelist.RemoveAll()
# 指定インデックスのイメージを置き換える
imagelist.Replace(1, wx.Icon("d.png", wx.BITMAP_TYPE_PNG))
ウィジット内で多くのイメージを使用する場合、ImageListは非常に有効ですのでぜひご利用ください。
0 件のコメント:
コメントを投稿