wxpython: как заполнить внутреннюю часть флажка в объекте listctrl заданным цветом rgb? - PullRequest
0 голосов
/ 23 марта 2011

У меня есть этот график. В этом графике у меня есть несколько стран. Я пытаюсь создать легенды внутри объекта listctrl, изменив цвет неработающего флажка.

Существует ли функция wxpython для изменения такого атрибута?

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 марта 2011

Взгляните на wxRendererNative () в демоверсии wx, вы должны иметь возможность использовать DC в событии OnPaint и перерассчитывать визуализированные изображения одним из ваших выбранных, в этом случае флажком другого цвета. Вам нужно было бы сделать изображения самостоятельно или придумать способ замаскировать изображения по умолчанию тем цветом, который вы выбрали (сам никогда не пробовал), но это должно быть выполнимо тем или иным способом.

Вы также можете проверить: http://wiki.wxpython.org/CreatingCustomControls для примера пользовательского флажка управления. как это будет применяться в списке, я не уверен. но это может дать вам представление о том, что нужно сделать, чтобы выполнить пользовательский флажок.

0 голосов
/ 23 марта 2011

Я не думаю, что 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)
...