Как установить цвет переключателя в wxpython?

У меня есть коллекция кнопок, которые я создал, и мне нужно изменить цвет кнопки при ее нажатии. В настоящее время он устанавливает цвета по умолчанию (серый = неактивный; светло-синий = активный):

введите здесь описание изображения

но я хочу изменить цвет активного на красный.

Вот мой класс кнопок:

class ButtonClass(wx.Panel):
    def __init__(self, parent, name, id):
        wx.Panel.__init__(self, parent)
        self.name = name
        self.taskid = id

        self.button = wx.ToggleButton(self, 1, size=(50, 50))
        self.button.SetLabel('Start')

        self.mainSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.mainSizer.Add(self.button)

        self.Bind(wx.EVT_TOGGLEBUTTON, self.toggledbutton, self.button)

    # Where the buttons change state
    def toggledbutton(self, event):

        # Active State
        if self.button.GetValue() == True:

            self.button.SetLabel('Stop')

        # Inactive State
        if self.button.GetValue() == False:

            self.button.SetLabel('Start')

Я пробовал использовать self.button.SetColour , self.button.SetBackgroundColour , self.button.SetForegroundColour , все из которых не увенчались успехом. Есть ли способ сделать это в wxpython?


person James Mertz    schedule 28.07.2011    source источник
comment
Я вполне уверен, что это зависит от ОС/темы и что вы не можете это контролировать, но я не уверен в этом на 100%.   -  person g.d.d.c    schedule 29.07.2011
comment
@ g.d.d.c - я боялся этого, но не был уверен.   -  person James Mertz    schedule 29.07.2011
comment
Позвольте мне запустить несколько тестов, у меня есть пара ToggleButtons в части одного из моих проектов. Через несколько минут я обновлю здесь то, что найду.   -  person g.d.d.c    schedule 29.07.2011
comment
Я также не могу контролировать цвет выделения этих элементов управления. SetOwnBackgroundColor, кажется, устанавливает цвет области за кнопкой в ​​содержащем сайзере, но я не могу повлиять на фактическую кнопку ни одним из стандартных подходов. Я склоняюсь к тому, что это невозможно, но я ставлю это в главной роли на случай, если у кого-то еще есть способ.   -  person g.d.d.c    schedule 29.07.2011
comment
Это заявление от Робина Данна указывает, что это ограничение wxWidgets groups.google.com/ группа/wxpython-users/msg/ac60f3a1ef05197b .   -  person Stephen Terry    schedule 29.07.2011
comment
Вы всегда можете создать пользовательскую кнопку, а затем установить любые цвета, которые вам нравятся.   -  person Bogdan    schedule 05.08.2011
comment
@Bogdan: Мне просто не нравится внешний вид пользовательской кнопки, если только вы не имеете в виду растровую кнопку, с которой я не хочу возиться с банкоматом.   -  person James Mertz    schedule 05.08.2011
comment
Вы всегда можете посмотреть, что может предоставить материал AGW... Однажды я использовал их FlatNotebook, потому что он поддерживал то, что я пытался там сделать. У них есть что-то под названием Aqua Button, которое может работать. для тебя...?   -  person chow    schedule 26.08.2011


Ответы (2)


Кажется, это зависит от платформы. Это работало для меня в Ubuntu, но не в Windows.

self.ToggleButtonObj = wx.ToggleButton(self, -1, 'ButtonLabel')
self.ToggleButtonObj.Bind(wx.EVT_TOGGLEBUTTON, self.OnToggleClick)

def OnToggleClick(self,event):
    if self.ToggleButtonObj.GetValue():
         self.ToggleButtonObj.SetBackgroundColour('#color1')
    else:
         self.ToggleButtonObj.SetBackgroundColour('#color2')

Обходной путь:

    self.Button = wx.Button(self, -1, 'ButtonLabel')
    self.Button.Bind(wx.EVT_BUTTON, self.OnToggleClick)
    self.ButtonValue = False

    def OnToggleClick(self,event):
        if not self.ButtonValue():
             self.Button.SetBackgroundColour('#color1')
             self.ButtonValue = True
        else:
             self.Button.SetBackgroundColour('#color2')
             self.ButtonValue = False
person Luke Gregor    schedule 01.11.2011

SetBackgroundColour() работал у меня, используя цвет в режиме RGB (например, (255 255 255)) в Windows 7 с python 2.7.3.

person AsVHEn    schedule 21.03.2014