Просто удалите выбранную строку и вставьте новый, как это делается в этом примере для одного-выбора ListBox:
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, style=wx.DEFAULT_FRAME_STYLE)
self.button = wx.Button(self, -1, "Change")
self.Bind(wx.EVT_BUTTON, self.ButtonPress, self.button)
self.tc = wx.TextCtrl(self, -1)
self.lb = wx.ListBox(self, -1, choices = ('One', 'Two'))
box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.lb, 0, wx.EXPAND, 0)
box.Add(self.tc, 0, wx.EXPAND, 0)
box.Add(self.button, 0, wx.ADJUST_MINSIZE, 0)
self.SetSizer(box)
box.Fit(self)
self.Layout()
def ButtonPress(self, evt):
txt = self.tc.GetValue()
pos = self.lb.GetSelection()
self.lb.Delete(pos)
self.lb.Insert(txt, pos)
if __name__ == "__main__":
app = wx.PySimpleApp(0)
frame = MyFrame(None, -1, "")
frame.Show()
app.MainLoop()
Если вам нужен множественный выбор ListBox, то вы должны создать его с style=wx.LB_MULTIPLE
:
self.lb = wx.ListBox(self, -1, choices = ('One', 'Two'), style=wx.LB_MULTIPLE)
Теперь вы можете изменить несколько строк сразу:
def ButtonPress(self, evt):
txt = self.tc.GetValue()
for pos in self.lb.GetSelections():
self.lb.Delete(pos)
self.lb.Insert(txt, pos)
+1, но если вы рассматриваете использование 'GetSelections()' вместо 'GetSelection()', вы также должны рассмотреть возможность удаления всех выбранных элементов вместо удаления только одного и для использования 'allselected [0]' – joaquin
@joaquin: я использую только списки множественного выбора в моей работе, и я просто забыл о 'GetSelection()'. Спасибо, что указали это. –