我有这张图表。在这张图表中,我有很多国家。我正在尝试通过更改非功能复选框的颜色来在 listctrl 对象中创建图例。
是否有任何 wxpython 函数来更改此类属性?
谢谢
我不认为 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)
看一下 wx 演示中的 wxRendererNative(),您应该能够在 OnPaint 事件中使用 DC,并用您选择的一个来替换渲染的图像,在这种情况下是一个不同颜色的复选框。您需要自己制作图像,或者想办法用您选择的颜色掩盖默认图像(我自己从未尝试过),但它应该是可行的。
您还可以查看:http ://wiki.wxpython.org/CreatingCustomControls以获取自定义复选框控件的示例。这将如何在列表中应用,我不确定。但它可能会让您了解完成自定义复选框需要做什么。