如何在wxListCtrl中获取项目信息?

2024-09-28 05:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用wxListCtrl生成的列表,其中有三个列。列表更新时生成的数据需要在my的其他部分使用代码。Can有谁能告诉我怎么才能得到列表中所有3列的一个项目的所有值? 我的名单如下。。。在

self.list_ctrl = wx.ListCtrl(self.panel, size=(565,150),pos=(15,20),style=wx.LC_REPORT | wx.BORDER_SUNKEN)
self.name=self.list_ctrl.InsertColumn(0, 'Task Name',width=189)
self.date=self.list_ctrl.InsertColumn(1, 'Run ',width=189)
self.status=self.list_ctrl.InsertColumn(2, 'Status', width=187
self.index=0

其中项是使用..生成的。。在

^{pr2}$

我可以得到物品的名称,即自身名称在第1列下面使用

name=self.list_ctrl.GetItemText(self.name)

但是'自我日期'和'自我时间'正在返回int类型价值观。如何我可以分别在变量“Taskdate”和“Tasktime”中获取日期和时间吗?在


Tags: 数据代码nameself名称列表my时间
1条回答
网友
1楼 · 发布于 2024-09-28 05:25:08

有几种方法可以做到这一点。最简单的方法(在我看来)是将对象与每一行关联起来,但我们将先用“硬”的方法:

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 Data")
        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()
        cols = self.list_ctrl.GetColumnCount()
        for row in range(count):
            for col in range(cols):
                item = self.list_ctrl.GetItem(itemId=row, col=col)
                print item.GetText()

#                                   
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

这是对先前的answer的一个类似的问题稍作修改。总之,让我们来看看如何使用对象:

^{pr2}$

这里我们创建一个Car对象的列表,并使用点表示法将类的属性添加到listcrl中。然后,当我们从列表中选择一个项目时,我们从事件对象中获取当前选定的项目,并使用字典查找它。不完全简单,但我很喜欢。你可以阅读更多关于它的提示和技巧here。在

然而,我认为最好的解决方案是使用ObjectListView(一个listcrl包装器),它将行变成真正的对象,并允许更容易地访问它们的值,同时还引入了一系列其他增强功能。遗憾的是,到目前为止,它还不是普通wxPython发行版的一部分,但是从PyPI添加它很容易。你也可以在这个article的博客里读到更多的信息!在

相关问题 更多 >

    热门问题