Wxpython-listbox-listctrl-class
wxPython-ListBoxおよびListCtrlクラス
wx.ListBoxウィジェットは、垂直方向にスクロール可能な文字列のリストを提示します。 デフォルトでは、リスト内の単一のアイテムが選択可能です。 ただし、複数選択にカスタマイズできます。
ListCtrlウィジェットは、高度に強化されたリスト表示および選択ツールです。 複数の列のリストは、レポートビュー、リストビュー、またはアイコンビューで表示できます。
ListBoxコンストラクタには次の定義があります-
Wx.ListBox(parent, id, pos, size, choices, style)
choicesパラメーターは、リストに入力するために使用される文字列のリストです。
wx.ListBoxオブジェクトは、次のスタイルパラメータでカスタマイズ可能です-
以下は、wx.ListBoxの最も一般的に使用されるパラメーターです。
S.N. | Parameters & Description |
---|---|
1 |
wxLB_SINGLE 単一選択リスト |
2 |
wxLB_MULTIPLE 複数選択リスト:ユーザーは複数のアイテムのオンとオフを切り替えることができます |
3 |
wxLB_EXTENDED 拡張選択リスト-ユーザーは、ShiftキーまたはCtrlキーとカーソル移動キーまたはマウスを使用して、選択を拡張できます。 |
4 |
wxLB_HSCROLL コンテンツが広すぎる場合は水平スクロールバーを作成します |
5 |
wxLB_ALWAYS_SB 常に垂直スクロールバーを表示する |
6 |
wxLB_NEEDED_SB 必要な場合にのみ垂直スクロールバーを作成します |
7 |
wxLB_SORT リストボックスの内容はアルファベット順にソートされます |
wx.ListBoxクラスのメソッド-
以下に、wx.ListBoxの最も一般的に使用されるメソッドを示します
S.N. | Methods & Description |
---|---|
1 |
DeSelect() リストボックス内のアイテムの選択を解除します |
2 |
InsertItem() 指定した文字列を指定した位置に挿入します |
3 |
SetFirstItem() リストの最初に指定されたインデックスに文字列を設定します |
4 |
IsSorted() wxzL?B_SORTスタイルが使用されている場合はtrueを返します |
5 |
GetString() 選択したインデックスの文字列を返します |
6 |
SetString() 指定されたインデックスでアイテムのラベルを設定します |
EVT_LISTBOXバインダは、リスト内のアイテムが選択されたとき、またはプログラムで選択が変更されたときにハンドラーをトリガーします。 EVT_LISTBOX_DCLICKによってバインドされたハンドラー関数は、リストボックス項目でダブルクリックイベントが発生したときに呼び出されます。
例
次の例では、ListBoxコントロールとTextCtrlオブジェクトがそれぞれ、水平ボックスサイザーの左部分と右部分に配置されています。 ListBoxには、languages []リストオブジェクトの文字列が入力されます。
languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript','PHP','VB.NET','C#']
self.text = wx.TextCtrl(panel,style = wx.TE_MULTILINE)
lst = wx.ListBox(panel, size = (100,-1), choices = languages, style = wx.LB_SINGLE)
2つのオブジェクトが水平ボックスサイザーに配置されます。
box = wx.BoxSizer(wx.HORIZONTAL)
box.Add(lst,0,wx.EXPAND)
box.Add(self.text, 1, wx.EXPAND)
ListBoxコントロールは、EVT_LISTBOXバインダーを使用してonListBox()ハンドラーにリンクされます。
self.Bind(wx.EVT_LISTBOX, self.onListBox, lst)
ハンドラーは、選択した文字列を右側の複数行のTextCtrlに追加します。
def onListBox(self, event):
self.text.AppendText( "Current selection: "+
event.GetEventObject().GetStringSelection() + "\n")
完全なコードは次のとおりです-
import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (350,300))
panel = wx.Panel(self)
box = wx.BoxSizer(wx.HORIZONTAL)
self.text = wx.TextCtrl(panel,style = wx.TE_MULTILINE)
languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript', 'PHP', 'VB.NET','C#']
lst = wx.ListBox(panel, size = (100,-1), choices = languages, style = wx.LB_SINGLE)
box.Add(lst,0,wx.EXPAND)
box.Add(self.text, 1, wx.EXPAND)
panel.SetSizer(box)
panel.Fit()
self.Centre()
self.Bind(wx.EVT_LISTBOX, self.onListBox, lst)
self.Show(True)
def onListBox(self, event):
self.text.AppendText( "Current selection:
"+event.GetEventObject().GetStringSelection()+"\n")
ex = wx.App()
Mywin(None,'ListBox Demo')
ex.MainLoop()
上記のコードは、次の出力を生成します-
*wx.ListCtrl* は拡張されているため、より複雑なウィジェットです。 ListBoxに表示される列は1つだけですが、ListCtrlには複数の列を含めることができます。 ListCtrlウィジェットの外観は、次のスタイルパラメータによって制御されます-
以下は、Wx.ListCtrlの最も一般的に使用されるパラメーターです。
S.N. | Parameters & Description |
---|---|
1 |
wx.LC_LIST オプションの小さなアイコンを備えた複数列のリストビュー。 列は自動的に計算されます |
2 |
wx.LC_REPORT オプションのヘッダーを使用した単一列または複数列のレポートビュー |
3 |
wx.LC_VIRTUAL アプリケーションは、オンデマンドでアイテムテキストを提供します。 wxLC_REPORTでのみ使用できます |
4 |
wx.LC_ICON オプションのラベルが付いた大きなアイコンビュー |
5 |
wx.LC_SMALL_ICON オプションのラベルが付いた小さなアイコンビュー |
6 |
wx.LC_ALIGN_LEFT アイコンは左に揃えられます |
7 |
wx.LC_EDIT_LABELS ラベルは編集可能-編集の開始時にアプリケーションに通知されます |
8 |
wx.LC_NO_HEADER レポートモードでヘッダーなし |
9 |
wx.LC_SORT_ASCENDING 昇順で並べ替え |
10 |
wx.LC_SORT_DESCENDING 降順で並べ替え |
11 |
wx.LC_HRULES レポートモードで行間に明るい水平線を描画します |
12 |
wx.LC_VRULES レポートモードで列間に軽い垂直ルールを描画します |
例
次の例では、レポートビューのListCtrlウィジェットが構築されます。
self.list = wx.ListCtrl(panel, -1, style = wx.LC_REPORT)
ヘッダー列は、列番号、キャプション、スタイル、幅のパラメーターをとるInsertColumn()メソッドによって作成されます。
self.list.InsertColumn(0, 'name', width = 100)
self.list.InsertColumn(1, 'runs', wx.LIST_FORMAT_RIGHT, 100)
self.list.InsertColumn(2, 'wkts', wx.LIST_FORMAT_RIGHT, 100)
それぞれがplayer []と呼ばれる3つの文字列を含むタプルのリストには、ListCtrlオブジェクトの列を設定するために使用されるデータが格納されます。
新しい行は、現在の行のインデックスを返すInsertStringItem()メソッドで始まります。 sys.maxintを使用すると、最後の行の後に行番号が表示されます。 インデックスを使用して、他の列はSetStringItem()メソッドによって埋められます。
for i in players:
index = self.list.InsertStringItem(sys.maxint, i[0])
self.list.SetStringItem(index, 1, i[1])
self.list.SetStringItem(index, 2, i[2])
例の完全なコードは-
import sys
import wx
players = [('Tendulkar', '15000', '100'), ('Dravid', '14000', '1'),
('Kumble', '1000', '700'), ('KapilDev', '5000', '400'),
('Ganguly', '8000', '50')]
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title)
panel = wx.Panel(self)
box = wx.BoxSizer(wx.HORIZONTAL)
self.list = wx.ListCtrl(panel, -1, style = wx.LC_REPORT)
self.list.InsertColumn(0, 'name', width = 100)
self.list.InsertColumn(1, 'runs', wx.LIST_FORMAT_RIGHT, 100)
self.list.InsertColumn(2, 'wkts', wx.LIST_FORMAT_RIGHT, 100)
for i in players:
index = self.list.InsertStringItem(sys.maxint, i[0])
self.list.SetStringItem(index, 1, i[1])
self.list.SetStringItem(index, 2, i[2])
box.Add(self.list,1,wx.EXPAND)
panel.SetSizer(box)
panel.Fit()
self.Centre()
self.Show(True)
ex = wx.App()
Mywin(None,'ListCtrl Demo')
ex.MainLoop()
上記のコードは次の出力を生成します。 プレイヤーのデータはレポートビューに表示されます-