]>
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:])