Рубрики
Без рубрики

WXPYPHON: Сброс цвет фона

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: 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)