wxpython listctrl 属性_wxPython ListCtrl列忽略特定字段

我重写这篇文章是为了澄清一些事情,并为我遇到麻烦的虚拟列表提供一个完整的类定义。类的定义如下:from wx import ListCtrl, LC_REPORT, LC_VIRTUAL, LC_HRULES, LC_VRULES, \

EVT_LIST_COL_CLICK, EVT_LIST_CACHE_HINT, EVT_LIST_COL_RIGHT_CLICK, \

ImageList, IMAGE_LIST_SMALL, Menu, MenuItem, NewId, ITEM_CHECK, Frame, \

EVT_MENU

class VirtualList(ListCtrl):

def __init__(self, parent, datasource = None,

style = LC_REPORT | LC_VIRTUAL | LC_HRULES | LC_VRULES):

ListCtrl.__init__(self, parent, style = style)

self.columns = []

self.il = ImageList(16, 16)

self.Bind(EVT_LIST_CACHE_HINT, self.CheckCache)

self.Bind(EVT_LIST_COL_CLICK, self.OnSort)

if datasource is not None:

self.datasource = datasource

self.Bind(EVT_LIST_COL_RIGHT_CLICK, self.ShowAvailableColumns)

self.datasource.list = self

self.Populate()

def SetDatasource(self, datasource):

self.datasource = datasource

def CheckCache(self, event):

self.datasource.UpdateCache(event.GetCacheFrom(), event.GetCacheTo())

def OnGetItemText(self, item, col):

return self.datasource.GetItem(item, self.columns[col])

def OnGetItemImage(self, item):

return self.datasource.GetImg(item)

def OnSort(self, event):

self.datasource.SortByColumn(self.columns[event.Column])

self.Refresh()

def UpdateCount(self):

self.SetItemCount(self.datasource.GetCount())

def Populate(self):

self.UpdateCount()

self.datasource.MakeImgList(self.il)

self.SetImageList(self.il, IMAGE_LIST_SMALL)

self.ShowColumns()

def ShowColumns(self):

for col, (text, visible) in enumerate(self.datasource.GetColumnHeaders()):

if visible:

self.columns.append(text)

self.InsertColumn(col, text, width = -2)

def Filter(self, filter):

self.datasource.Filter(filter)

self.UpdateCount()

self.Refresh()

def ShowAvailableColumns(self, evt):

colMenu = Menu()

self.id2item = {}

for idx, (text, visible) in enumerate(self.datasource.columns):

id = NewId()

self.id2item[id] = (idx, visible, text)

item = MenuItem(colMenu, id, text, kind = ITEM_CHECK)

colMenu.AppendItem(item)

EVT_MENU(colMenu, id, self.ColumnToggle)

item.Check(visible)

Frame(self, -1).PopupMenu(colMenu)

colMenu.Destroy()

def ColumnToggle(self, evt):

toggled = self.id2item[evt.GetId()]

if toggled[1]:

idx = self.columns.index(toggled[2])

self.datasource.columns[toggled[0]] = (self.datasource.columns[toggled[0]][0], False)

self.DeleteColumn(idx)

self.columns.pop(idx)

else:

self.datasource.columns[toggled[0]] = (self.datasource.columns[toggled[0]][0], True)

idx = self.datasource.GetColumnHeaders().index((toggled[2], True))

self.columns.insert(idx, toggled[2])

self.InsertColumn(idx, toggled[2], width = -2)

self.datasource.SaveColumns()

我添加了允许列切换的函数,这有助于我描述遇到的问题。在我的应用程序中这个类的第三个实例中,索引1处的列将不显示字符串值。整数值显示正确。如果我将print语句添加到OnGetItemText方法,那么这些值将正确显示在控制台中。这个行为在这个类的前两个实例中不存在,而且我的类不包含任何关于值显示的类型检查代码。在

wxPython用户组中有人建议我创建一个独立的示例来演示这个问题。我正在努力,但还没有时间创建一个不依赖数据库访问的示例。任何建议或建议将不胜感激。我在这件事上焦头烂额。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值