Skip to main content
 首页 » 编程设计

wxpython之ListCtrl之wxPython 获取列中的所有值

2024年08月06日17zfyouxi

是否可以以列表的形式获取wx.ListCtrl列中的所有值(项目)?

我在文档中看到您可以获取指定的项目,但不能获取整个列,GetValue() 也不起作用,有什么帮助吗?

请您参考如下方法:

这是一种方法:

import wx 
 
######################################################################## 
class MyForm(wx.Frame): 
 
    #---------------------------------------------------------------------- 
    def __init__(self): 
        wx.Frame.__init__(self, None, wx.ID_ANY, "List Control Tutorial") 
 
        # Add a panel so it looks the correct on all platforms 
        panel = wx.Panel(self, wx.ID_ANY) 
        self.index = 0 
 
        self.list_ctrl = wx.ListCtrl(panel, size=(-1,100), 
                         style=wx.LC_REPORT 
                         |wx.BORDER_SUNKEN 
                         ) 
        self.list_ctrl.InsertColumn(0, 'Subject') 
        self.list_ctrl.InsertColumn(1, 'Due') 
        self.list_ctrl.InsertColumn(2, 'Location', width=125) 
 
        btn = wx.Button(panel, label="Add Line") 
        btn2 = wx.Button(panel, label="Get Column 0") 
        btn.Bind(wx.EVT_BUTTON, self.add_line) 
        btn2.Bind(wx.EVT_BUTTON, self.getColumn) 
 
        sizer = wx.BoxSizer(wx.VERTICAL) 
        sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5) 
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5) 
        sizer.Add(btn2, 0, wx.ALL|wx.CENTER, 5) 
        panel.SetSizer(sizer) 
 
    #---------------------------------------------------------------------- 
    def add_line(self, event): 
        line = "Line %s" % self.index 
        self.list_ctrl.InsertStringItem(self.index, line) 
        self.list_ctrl.SetStringItem(self.index, 1, "01/19/2010") 
        self.list_ctrl.SetStringItem(self.index, 2, "USA") 
        self.index += 1 
 
    #---------------------------------------------------------------------- 
    def getColumn(self, event): 
        """""" 
        count = self.list_ctrl.GetItemCount() 
        for row in range(count): 
            item = self.list_ctrl.GetItem(itemId=row, col=0) 
            print item.GetText() 
 
#---------------------------------------------------------------------- 
# Run the program 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyForm() 
    frame.Show() 
    app.MainLoop() 

就我个人而言,我比 ListCtrl 更喜欢 ObjectListView。