]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/ListBox.py
   4 #--------------------------------------------------------------------------- 
   6 # This listbox subclass lets you type the starting letters of what you want to 
   7 # select, and scrolls the list to the match if it is found. 
   8 class FindPrefixListBox(wx
.ListBox
): 
   9     def __init__(self
, parent
, id, pos
=wx
.DefaultPosition
, size
=wx
.DefaultSize
, 
  10                  choices
=[], style
=0, validator
=wx
.DefaultValidator
): 
  11         wx
.ListBox
.__init
__(self
, parent
, id, pos
, size
, choices
, style
, validator
) 
  14         self
.Bind(wx
.EVT_KEY_DOWN
, self
.OnKey
) 
  17     def FindPrefix(self
, prefix
): 
  18         self
.log
.WriteText('Looking for prefix: %s\n' % prefix
) 
  21             prefix 
= prefix
.lower() 
  24             # Changed in 2.5 because ListBox.Number() is no longer supported. 
  25             # ListBox.GetCount() is now the appropriate way to go. 
  26             for x 
in range(self
.GetCount()): 
  27                 text 
= self
.GetString(x
) 
  30                 if text
[:length
] == prefix
: 
  31                     self
.log
.WriteText('Prefix %s is found.\n' % prefix
) 
  34         self
.log
.WriteText('Prefix %s is not found.\n' % prefix
) 
  39         key 
= evt
.GetKeyCode() 
  41         if key 
>= 32 and key 
<= 127: 
  42             self
.typedText 
= self
.typedText 
+ chr(key
) 
  43             item 
= self
.FindPrefix(self
.typedText
) 
  46                 self
.SetSelection(item
) 
  48         elif key 
== wx
.WXK_BACK
:   # backspace removes one character and backs up 
  49             self
.typedText 
= self
.typedText
[:-1] 
  51             if not self
.typedText
: 
  54                 item 
= self
.FindPrefix(self
.typedText
) 
  57                     self
.SetSelection(item
) 
  62     def OnKeyDown(self
, evt
): 
  66 #--------------------------------------------------------------------------- 
  68 class TestListBox(wx
.Panel
): 
  69     def __init__(self
, parent
, log
): 
  71         wx
.Panel
.__init
__(self
, parent
, -1) 
  73         sampleList 
= ['zero', 'one', 'two', 'three', 'four', 'five', 
  74                       'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 
  75                       'twelve', 'thirteen', 'fourteen'] 
  77         wx
.StaticText(self
, -1, "This example uses the wx.ListBox control.", (45, 10)) 
  78         wx
.StaticText(self
, -1, "Select one:", (15, 50)) 
  79         self
.lb1 
= wx
.ListBox(self
, 60, (100, 50), (90, 120), sampleList
, wx
.LB_SINGLE
) 
  80         self
.Bind(wx
.EVT_LISTBOX
, self
.EvtListBox
, self
.lb1
) 
  81         self
.Bind(wx
.EVT_LISTBOX_DCLICK
, self
.EvtListBoxDClick
, self
.lb1
) 
  82         self
.lb1
.Bind(wx
.EVT_RIGHT_UP
, self
.EvtRightButton
) 
  83         self
.lb1
.SetSelection(3) 
  84         self
.lb1
.Append("with data", "This one has data"); 
  85         self
.lb1
.SetClientData(2, "This one has data"); 
  88         wx
.StaticText(self
, -1, "Select many:", (220, 50)) 
  89         self
.lb2 
= wx
.ListBox(self
, 70, (320, 50), (90, 120), sampleList
, wx
.LB_EXTENDED
) 
  90         self
.Bind(wx
.EVT_LISTBOX
, self
.EvtMultiListBox
, self
.lb2
) 
  91         self
.lb2
.Bind(wx
.EVT_RIGHT_UP
, self
.EvtRightButton
) 
  92         self
.lb2
.SetSelection(0) 
  94         sampleList 
= sampleList 
+ ['test a', 'test aa', 'test aab', 
  95                                    'test ab', 'test abc', 'test abcc', 
  98         wx
.StaticText(self
, -1, "Find Prefix:", (15, 250)) 
  99         fp 
= FindPrefixListBox(self
, -1, (100, 250), (90, 120), sampleList
, wx
.LB_SINGLE
) 
 103     def EvtListBox(self
, event
): 
 104         self
.log
.WriteText('EvtListBox: %s, %s, %s, %s\n' % 
 107                             event
.GetSelection(), 
 108                             event
.GetClientData())) 
 110         lb 
= event
.GetEventObject() 
 111         data 
= lb
.GetClientData(lb
.GetSelection()) 
 114             self
.log
.WriteText('\tdata: %s\n' % data
) 
 117     def EvtListBoxDClick(self
, event
): 
 118         self
.log
.WriteText('EvtListBoxDClick: %s\n' % self
.lb1
.GetSelection()) 
 119         self
.lb1
.Delete(self
.lb1
.GetSelection()) 
 121     def EvtMultiListBox(self
, event
): 
 122         self
.log
.WriteText('EvtMultiListBox: %s\n' % str(self
.lb2
.GetSelections())) 
 124     def EvtRightButton(self
, event
): 
 125         self
.log
.WriteText('EvtRightButton: %s\n' % event
.GetPosition()) 
 127         if event
.GetEventObject().GetId() == 70: 
 128             selections 
= list(self
.lb2
.GetSelections()) 
 131             for index 
in selections
: 
 132                 self
.lb2
.Delete(index
) 
 135 #--------------------------------------------------------------------------- 
 137 def runTest(frame
, nb
, log
): 
 138     win 
= TestListBox(nb
, log
) 
 141 #--------------------------------------------------------------------------- 
 146 overview 
= """<html><body> 
 147 A listbox is used to select one or more of a list of 
 148 strings. The strings are displayed in a scrolling box, with the 
 149 selected string(s) marked in reverse video. A listbox can be single 
 150 selection (if an item is selected, the previous selection is removed) 
 151 or multiple selection (clicking an item toggles the item on or off 
 152 independently of other selections). 
 157 if __name__ 
== '__main__': 
 160     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])