Установить строку текущего выбранного элемента с помощью wxListbox - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть список,

Как я могу изменить строку текущего выбранного элемента списка в другую строку?

Я не могу найти, как это сделать в Google.

1 Ответ

1 голос
/ 12 февраля 2012

Просто удалите выбранную строку и вставьте новую, как это делается в этом примере для списка с одним выбором:

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()

Если вам нужен список с несколькими вариантами выбора, то вы должны создать его с помощью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)
...