]>
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), (65, 18))
79 self
.lb1
= wx
.ListBox(self
, 60, (80, 50), (80, 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:", (200, 50), (65, 18))
89 self
.lb2
= wx
.ListBox(self
, 70, (300, 50), (80, 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, (80, 250), (80, 120), sampleList
, wx
.LB_SINGLE
)
103 def EvtListBox(self
, event
):
104 self
.log
.WriteText('EvtListBox: %s, %s, %s\n' %
105 (event
.GetString(), event
.IsSelection(), event
.GetSelection()))
107 lb
= event
.GetEventObject()
108 data
= lb
.GetClientData(lb
.GetSelection())
111 self
.log
.WriteText('\tdata: %s\n' % data
)
114 def EvtListBoxDClick(self
, event
):
115 self
.log
.WriteText('EvtListBoxDClick: %s\n' % self
.lb1
.GetSelection())
116 self
.lb1
.Delete(self
.lb1
.GetSelection())
118 def EvtMultiListBox(self
, event
):
119 self
.log
.WriteText('EvtMultiListBox: %s\n' % str(self
.lb2
.GetSelections()))
121 def EvtRightButton(self
, event
):
122 self
.log
.WriteText('EvtRightButton: %s\n' % event
.GetPosition())
124 if event
.GetEventObject().GetId() == 70:
125 selections
= list(self
.lb2
.GetSelections())
128 for index
in selections
:
129 self
.lb2
.Delete(index
)
132 #---------------------------------------------------------------------------
134 def runTest(frame
, nb
, log
):
135 win
= TestListBox(nb
, log
)
138 #---------------------------------------------------------------------------
143 overview
= """<html><body>
144 A listbox is used to select one or more of a list of
145 strings. The strings are displayed in a scrolling box, with the
146 selected string(s) marked in reverse video. A listbox can be single
147 selection (if an item is selected, the previous selection is removed)
148 or multiple selection (clicking an item toggles the item on or off
149 independently of other selections).
154 if __name__
== '__main__':
157 run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])