Автор оригинала: Mike Driscoll.
Последние пару недель, я видел несколько человек, просит сбросить цвет виджета обратно к исходному цвету «по умолчанию». Был по крайней мере один парень на Список рассылки wxpython И другой на их канале IRC, который запрашивал информацию на эту тему. Когда я впервые посмотрел на эту проблему, это было для сотрудника программиста в списке, который хотел сбросить цвет фона панели. В моем поиске я думал, что нашел идеальное решение:
color = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BACKGROUND) panel.SetBackgroundColour(color)
К сожалению, это не будет работать во всех случаях. Вместо этого Robin Dunn рекомендуется использовать WX.NullColor вместо этого (вы можете прочитать полную нить здесь ). По словам г-на Данна, причина в том, что это Что (wx.nullecolor) скажут WX, что виджет не имеет определенного набора цвета, и поэтому он будет использовать любую платформу, которую хочет использовать, которая может управляться активной темой и не может быть твердым цветом вообще. Это немного отличается от использования цвета системных настроек, как тогда WX будет действовать так, как если бы настроен пользовательский цвет, и он не заботится, если оно оно совпадает с цветом системы.
Таким образом, я создал демонстрационную приложение, которое покажет вам, как сбросить цвет:
import wx class MyForm(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, wx.ID_ANY, "Background Reset Tutorial") # Add a panel so it looks the correct on all platforms self.panel = wx.Panel(self, wx.ID_ANY) self.txt = wx.TextCtrl(self.panel) self.txt.SetBackgroundColour("Yellow") blueBtn = wx.Button(self.panel, label="Change Background Color") blueBtn.Bind(wx.EVT_BUTTON, self.onChangeBackground) resetBtn = wx.Button(self.panel, label="Reset") resetBtn.Bind(wx.EVT_BUTTON, self.onReset) topSizer = wx.BoxSizer(wx.VERTICAL) btnSizer = wx.BoxSizer(wx.HORIZONTAL) btnSizer.Add(blueBtn, 0, wx.ALL|wx.CENTER, 5) btnSizer.Add(resetBtn, 0, wx.ALL|wx.CENTER, 5) topSizer.Add(self.txt, 0, wx.ALL, 5) topSizer.Add(btnSizer, 0, wx.CENTER) self.panel.SetSizer(topSizer) def onChangeBackground(self, event): """ Change the background color of the panel """ self.panel.SetBackgroundColour("Blue") self.panel.Refresh() def onReset(self, event): """ Reset the color of the panel to the default color """ self.panel.SetBackgroundColour(wx.NullColor) self.txt.SetBackgroundColour(wx.NullColor) self.panel.Refresh() # Run the program if __name__ == "__main__": app = wx.PySimpleApp() frame = MyForm() frame.Show() app.MainLoop()
В этом коде вы заметите, что у меня установите текстовый элемент управления с исходным цветом фона желтого цвета, и я позволяю пользователям также изменить фоном панели через обработчик событий кнопки. Пользователь также может «сбросить» цвет фона обоих виджетов, нажав кнопку «Сброс».
Вот раньше и после картины:
Там действительно ничего нечего сказать. Теперь вы тоже знаете трюк, поэтому, если вы видите Newb, который борется с этим, вы можете сказать им, что делать тоже!
Этот код был протестирован на следующем:
- Windows XP, WxPython 2.8.10.1 (MSW-Unicode), Python 2.5.2
Загрузки
- Restocolor (zip)
- Restocolor (TAR)