Я не думаю, что CheckBox будет работать для этого. Изменение цвета фона будет по-разному влиять на разные платформы, и я не уверен, что какая-либо из них изменит только часть окна виджета. ListCtrl также довольно ограничен.
Если нет ничего встроенного для выполнения этой работы, вы можете попробовать что-то подобное, используя ScrolledPanel и StaticText:
import wx.lib.scrolledpanel as sp
SAMPLE_DATA = [('Antarctica', 'Green'),
('Afghanistan', 'Maroon'),
('Belguim', 'Blue'),
('Canada', 'Red'),
('India', 'Sea Green'),
('Mexico', 'Grey'),
('Mongolia', 'Black'),
('New Zealand', 'Orange'),
('Turkey', 'Purple'),]
class Legend(sp.ScrolledPanel):
def __init__(self, parent, id, data=SAMPLE_DATA):
sp.ScrolledPanel.__init__(self, parent, id)
self.sizer = wx.BoxSizer(wx.VERTICAL)
for d in data:
item = d[0]
color = d[1]
linesizer = wx.BoxSizer(wx.HORIZONTAL)
box = wx.StaticText(self, wx.ID_ANY, ' ', size=(10,10))
box.SetBackgroundColour(color)
text = wx.StaticText(self, wx.ID_ANY, item)
linesizer.Add(box, 0, flag=wx.EXPAND|wx.ALL, border=2)
linesizer.Add(text, 1, flag=wx.EXPAND)
self.sizer.Add(linesizer, 0, wx.EXPAND)
self.SetSizer(self.sizer)
self.sizer.Fit(self)
self.SetupScrolling(scroll_y=True)