wxpython:如何用指定的RGB颜色填充listctrl对象内的复选框?
我有一个图表,这个图表里有很多国家。我想在一个列表控件里创建一些图例,并通过改变一个没有实际功能的复选框的颜色来实现。
有没有什么wxpython的函数可以用来改变这样的属性呢?
谢谢!
2 个回答
0
看看wx演示中的wxRendererNative(),你应该能在OnPaint事件中使用一个DC(设备上下文),然后用你选择的图像替换掉渲染出来的图像,比如换成一个不同颜色的复选框。你需要自己制作这些图像,或者想办法用你喜欢的颜色来遮盖默认的图像(我自己没试过),但总的来说,这应该是可以实现的。
你还可以查看这个链接:http://wiki.wxpython.org/CreatingCustomControls,里面有一个自定义复选框控件的例子。我不太确定这个在列表中怎么应用,但这可能会给你一些关于如何实现自定义复选框的思路。
0
我觉得复选框可能不太适合这个需求。改变背景颜色在不同的平台上效果会不一样,而且我不确定有没有哪个平台只改变控件的框部分。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)