0

我有这张图表。在这张图表中,我有很多国家。我正在尝试通过更改非功能复选框的颜色来在 listctrl 对象中创建图例。

是否有任何 wxpython 函数来更改此类属性?

谢谢

4

2 回答 2

0

我不认为 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)
于 2011-03-23T20:29:10.950 回答
0

看一下 wx 演示中的 wxRendererNative(),您应该能够在 OnPaint 事件中使用 DC,并用您选择的一个来替换渲染的图像,在这种情况下是一个不同颜色的复选框。您需要自己制作图像,或者想办法用您选择的颜色掩盖默认图像(我自己从未尝试过),但它应该是可行的。

您还可以查看:http ://wiki.wxpython.org/CreatingCustomControls以获取自定义复选框控件的示例。这将如何在列表中应用,我不确定。但它可能会让您了解完成自定义复选框需要做什么。

于 2011-03-28T18:13:39.653 回答