Как использовать `ListCtrl` в wxpython

#python #wxpython #listctrl

#python #wxpython #listctrl

Вопрос:

Как я могу добавить строку и соответствующие ей данные в ListCtrl. Я только что закончил, как использовать TreeCtrl (относительно проще, чем ListCtrl), он показывает мне четкое использование сопоставления одного объекта GUI и данных. Но ListCtrl не дозирует.

  1. Как я могу добавить или вставить одну строку с соответствующими данными.
  2. Как я могу получить доступ к строке и ее данным
  3. Как я могу управлять ими (редактирование данных / строк, удаление данных / строк)

Можете ли вы объяснить их краткое изложение? Спасибо. Я знаю, что мой вопрос настолько прост, и я могу немного узнать об этом из документа. Я читал документы, но все равно не понял

Комментарии:

1. ваш вопрос слишком широкий. Кроме того, в Stackoverflow вы должны показать свой код, полное сообщение об ошибке, и тогда мы можем попытаться решить эту проблему.

2. Это запрос на полное руководство, а не вопрос

3. попробуйте это blog.pythonlibrary.org/2011/01/04 /…

Ответ №1:

Я знаю, что документы wxPython отстают в развитии и не дают большой помощи, вот несколько быстрых советов ниже, я добавил пояснения в комментариях:

 # create new list control
listctrl = wx.dataview.DataViewListCtrl( my_panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.dataview.DV_SINGLE )

# setup listctrl columns
listctrl.AppendTextColumn('first name', width=220)  # normal text column
listctrl.AppendBitmapColumn('my images', 0, width=35)  # you can add images in this col
listctrl.AppendProgressColumn('Progress', align=wx.ALIGN_CENTER)  # a progress bar

listctrl.SetRowHeight(30)  # define all rows height

# add data, note myList is a list or tuple contains the exact type of data for each columns and same length as col numbers
listctrl.AppendItem(myList)

# to modify an entry "a single cell located at row x col"
listctrl.SetValue(myNewValue, row, column)
  

Комментарии:

1. Кажется, данные и метка ячейки несколько неуместны, верно? Вложение данных и вложение ярлыков работают по-разному.

2. Правильно, метки — это ничто, все это больше похоже на Microsoft Excel, где вы можете получить доступ к cel по его местоположению (строка, столбец) или просто мимо целой строки, просто будьте осторожны при добавлении строки, количество элементов должно соответствовать количеству столбцов, иначе вы получите странное поведениеили ошибки

3. Таким образом, я могу получить доступ к определенным строкам данных по индексу метки, если я аккуратно помещаю данные и метки. (Порядок строк и индекс данных должны быть одинаковыми)

Ответ №2:

это то, что работает для меня:

 import wx

il_icons = wx.ImageList(16, 16, mask=True, initialCount=2)
il_icons.Add(wx.Bitmap('icon01.png'))
il_icons.Add(wx.Bitmap('icon02.png'))

lc_list = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.LC_EDIT_LABELS | wx.LC_VRULES, name='lc_list')
lc_list.AssignImageList(il_icons, which=wx.IMAGE_LIST_SMALL)
lc_list.AppendColumn('col01', format=wx.LIST_FORMAT_LEFT, width=64)
lc_list.AppendColumn('col02', format=wx.LIST_FORMAT_RIGHT, width=64)
lc_list.Append(('item01',100))
lc_list.Append(('item02',200))
lc_list.SetItemColumnImage(0,0,0)
lc_list.SetItemColumnImage(1,0,1)

lc_list.Bind(wx.EVT_LIST_ITEM_SELECTED, OnItemSelected)

lc_list.Show(True)