在wxpython的列表控件中删除

时间:2013-01-23 05:08:46

标签: python wxpython

我的代码产生以下错误 - “无法检索有关列表控件第3项的信息。”

import wx

DATA = [("0", "Zero"), ("1", "One"), ("2", "Two")]
class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)

        self.list = wx.ListCtrl(self.panel, style=wx.LC_REPORT)
        self.list.InsertColumn(0, "Index")
        self.list.InsertColumn(1, "Number")       
        for data in DATA:
            self.list.Append((data[0], data[1]))

        self.button = wx.Button(self.panel, label="Delete")
        self.button.Bind(wx.EVT_BUTTON, self.OnButton)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.list, 1, wx.ALL | wx.EXPAND, 5)
        self.sizer.Add(self.button, 0, wx.ALL | wx.EXPAND, 5)
        self.panel.SetSizerAndFit(self.sizer)

        self.Show()

    def OnButton(self, e):
        current_items = self.list.GetItemCount()
        while ((current_items) >= 0) :
            if (self.list.GetItemText(current_items) == "1" or self.list.GetItemText(current_items-1) == "2"):
                self.list.DeleteItem(current_items)
                wx.MessageBox("Delete item ", 'Delete Information',wx.OK)
            else:
                break
            current_items-=1

if __name__ == "__main__":
    app = wx.App(False)
    win = MainWindow(None)
    win.Centre()
    app.MainLoop()

有人能告诉我代码有什么问题吗? 我该怎么做才能解决这个错误? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

也许你想要这样的东西?

import wx

DATA = [("0", "Zero"), ("1", "One"), ("2", "Two")]
class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)

        self.list = wx.ListCtrl(self.panel, style=wx.LC_REPORT)
        self.list.InsertColumn(0, "Index")
        self.list.InsertColumn(1, "Number")       
        for data in DATA:
            self.list.Append((data[0], data[1]))

        self.button = wx.Button(self.panel, label="Delete")
        self.button.Bind(wx.EVT_BUTTON, self.OnButton)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.list, 1, wx.ALL | wx.EXPAND, 5)
        self.sizer.Add(self.button, 0, wx.ALL | wx.EXPAND, 5)
        self.panel.SetSizerAndFit(self.sizer)

        self.Show()

    def OnButton(self, e):
        current_items = self.list.GetItemCount() - 1
        while ((current_items) >= 0) :
            if (self.list.GetItemText(current_items) == "1" or self.list.GetItemText(current_items) == "2"):
                self.list.DeleteItem(current_items)
                wx.MessageBox("Delete item ", 'Delete Information',wx.OK)
            else:
                break
            current_items-=1

if __name__ == "__main__":
    app = wx.App(False)
    win = MainWindow(None)
    win.Centre()
    app.MainLoop()

答案 1 :(得分:0)

   def OnButton(self, e):
    itemIndex = self.list.GetNextItem(itemIndex,
                                         wx.LIST_NEXT_ALL,
                                         wx.LIST_STATE_SELECTED);
    print itemIndex
    if itemIndex == -1: 
        print "Nothing Selected";

        # // Got the selected item index
     print "SELECTED:",self.list.GetItemText(itemIndex);

尝试类似的东西