Objectlistview Python:过滤

2024-04-27 16:49:31 发布

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

我试图根据数据的某一列中的文本值筛选objectlistview。我不知道如何正确地构造过滤器。我指的是:

http://objectlistview.sourceforge.net/python/features.htmlhttp://objectlistview.sourceforge.net/python/majorClasses.html

我能得到过滤器头(n) 成功地工作但不能得到过滤器.TextSearch(objectListView,columns=(),text=“”)无法正常工作,因为我不知道支持哪些参数类型。在

我写了以下代码:

def OnFilterMeter(self,event):
    list = self.exception_panel.col_list   ## The lenght of my column list
    col  = list[len(list)-1]     ## I want to search the last column 
    meter_flt = Filter.TextSearch(self.exception_panel,columns = (col), text = "10") ## Create filter to find string 10 in last column
    self.exception_panel.SetFilter(meter_flt)
    self.exception_panel.populate()

我不明白为什么这样不行。当程序再次尝试填充列表视图时,它不会过滤列表。至少它应该显示所有空白,因为它找不到任何等于“10”的项。请帮忙。谢谢你

以下是我的代码:

^{pr2}$

请参阅FilterMeter函数。在


Tags: columnstextselfhttp过滤器nethtmlexception
1条回答
网友
1楼 · 发布于 2024-04-27 16:49:31

下面的方法适用于我,它对第二列进行搜索,只显示一个匹配的条目。在

# -*- coding: utf-8 -*-
import datetime
import wx
import wx.lib.sized_controls as SC
import ObjectListView as OLV

class MyData:
    def __init__(self, year, month, day, level, sets, reps):
        self.date = datetime.date(year, month, day)
        self.level = level
        self.sets = sets
        self.reps = reps

    def GetDate(self):
        return self.date

    def GetLevel(self):
        return self.level

    def GetSets(self):
        return self.sets

    def GetRepetitions(self):
        return self.reps


class MyListCtrl(OLV.GroupListView):
    def __init__(self, parent):
        super(MyListCtrl, self).__init__(parent, wx.ID_ANY, style=wx.LC_REPORT)
        self.SetColumns(self._ColumnDefinitions())
        meter_flt = OLV.Filter.TextSearch(self, columns=self.columns[2:3],
                                          text="7")
        self.SetFilter(meter_flt)
        self.SetObjects(self._DataObjects())

    def _DataObjects(self):
        return [MyData(2010,10,8, 1, 2, 3),
                MyData(2005,10,10, 7, 2, 3),
                MyData(2010,10,3, 2, 2, 3),
                MyData(2012,10,10, 1, 2, 3),
                MyData(2014,10,10, 1, 2, 3)
                ]

    def _ColumnDefinitions(self):
        return [OLV.ColumnDefn('Date', valueGetter='GetDate', groupKeyGetter='GetDate'),
                OLV.ColumnDefn('Level', valueGetter='GetLevel', width=150),
                OLV.ColumnDefn('Sets', valueGetter='GetSets', width=100, groupKeyGetter='GetSets'),
                OLV.ColumnDefn('Reps', valueGetter='GetRepetitions', width=200)]


class MyFrame(SC.SizedFrame):
    def __init__(self):
        super(MyFrame, self).__init__(None)
        pane = self.GetContentsPane()

        olv = MyListCtrl(pane)
        olv.SetSizerProps(expand=True, proportion=1)


if __name__ == '__main__':
    import wx.lib.mixins.inspection as WIT
    app = WIT.InspectableApp()
    win = MyFrame()
    win.Show()
    app.MainLoop()

相关问题 更多 >