これは私の現在の解決策です。申し訳ありませんが少し遅れています。
class custom_virtual_list(wx.ListCtrl):
def __init__(self, parent, columns = None, contents = None, autoscroll = False):
columns = [] if columns == None else columns
contents = [] if contents == None else contents
super(custom_virtual_list, self).__init__(parent, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LC_REPORT | wx.LC_VIRTUAL)
self.columns = columns
self.contents = contents
self.autoscroll = autoscroll
self.update_columns()
self._update_count()
def get_selections(self):
sels = []
sel = self.GetFirstSelected()
while sel != -1:
sels.append(sel)
sel = self.GetNextSelected(sel)
return(sels)
def update_contents(self, new_contents = None):
if not new_contents == None:
self.contents = new_contents
self._update_count()
def OnGetItemText(self, item, col):
return(self.contents[item][col])
def update_columns(self, columns = None):
if not columns == None:
self.columns = columns
self.DeleteAllColumns()
for i, column in enumerate(self.columns):
self.InsertColumn(i, column)
self._resize()
def _update_count(self):
self.SetItemCount(len(self.contents))
self._resize()
self.Refresh()
if self.autoscroll:
self.EnsureVisible(self.GetItemCount() - 1)
def _resize(self):
for i, column in enumerate(self.columns):
self.SetColumnWidth(i, wx.LIST_AUTOSIZE_USEHEADER)
ユーザーがupdate_contents()
に新しいコレクションを渡すことによって、内容を更新したり、より多くの舞台裏を、それを行うにはプロパティにcontents
を変更することができます。
2列目の列が[[name, email_address, id], ...]
であり、列が["Name", "email address"]
であるため、列の幅よりも広い内容を持つことができますが、それでも問題なく動作します。関連性が高いデータは一緒になりますが、エンドユーザーからは隠されています。