Wxpython-listbox-listctrl-class

提供:Dev Guides
移動先:案内検索

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()

上記のコードは次の出力を生成します。 プレイヤーのデータはレポートビューに表示されます-

Listctrlデモ出力