2012-02-12 3 views

ответ

1

Просто удалите выбранную строку и вставьте новый, как это делается в этом примере для одного-выбора 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) 
+0

+1, но если вы рассматриваете использование 'GetSelections()' вместо 'GetSelection()', вы также должны рассмотреть возможность удаления всех выбранных элементов вместо удаления только одного и для использования 'allselected [0]' – joaquin

+0

@joaquin: я использую только списки множественного выбора в моей работе, и я просто забыл о 'GetSelection()'. Спасибо, что указали это. –