wxpython:如何使用给定的 rgb 颜色填充 listctrl 对象中的复选框内部?

发布于 2024-10-25 18:18:30 字数 110 浏览 3 评论 0原文

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

有没有wxpython函数可以改变这样的属性?

谢谢

I have this chart. In this chart I have a bunch of countries. I am trying to create the legends inside a listctrl object by changing the color of a non-functional checkbox.

Is there any wxpython function to change such attribute?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

明明#如月 2024-11-01 18:18:30

我不认为 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)

I don't think CheckBox will work for that. Changing the background color will have a different effect on different platforms, and I'm not sure any of them change only the box part of the widget. ListCtrl is also pretty limited.

If there's nothing built-in to do the job, you could try something like this using ScrolledPanel and 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)
归属感 2024-11-01 18:18:30

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

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

Take a look at wxRendererNative() in the wx demo, you should be able to use a DC in an OnPaint event and repalce the rendered images with one of your choice, in this case a different coloured checkbox. You would need to make the images yourself or figure out a way to mask the default ones with the colour of your choice (never tried this myself), but it should be doable one way or another.

you can also check out: http://wiki.wxpython.org/CreatingCustomControls for an example of a custom checkbox control. how this will apply within a list, I am not sure. but it might give you an idea of what needs to be done to accomplish a custom checkbox.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文