Как изменить внешний вид панели инструментов wxPython?

Внешний вид wxPython ToolBar не соответствует таковому в текущей операционной системе - он имеет градиент, похожий на серебряный градиент IE в Windows Vista / 7.

Есть ли там градиент. есть ли способ изменить это так, чтобы он гармонировал с внешним видом операционной системы?

Примечание: Существует флаг стиля, который можно установить при создании ToolBar, и один из этих флагов - wx.TB_FLAT, но это, похоже, не влияет на способ отображения ToolBar.

Я запускаю свою программу wxPython в Windows 7.

Редактировать: Ниже приведен снимок экрана того, что я вижу.

alt text

Редактировать: Кажется, панель инструментов нарисована в соответствии с текущей темой, поскольку при переходе на классическую тему Windows отображается плоская панель инструментов, которая соответствует фону окна.

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

Я знаю, что код в OnPaint работает так, как отображается прямоугольник, если я привязываю этот метод к событию рисования Windows вместо панелей инструментов.

import wx

ID_STAT = 1
ID_TOOL = 2

class CheckMenuItem(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(350, 250))

        menubar = wx.MenuBar()
        file = wx.Menu()
        view = wx.Menu()
        self.shst = view.Append(ID_STAT, 'Show statubar', 'Show Statusbar', kind=wx.ITEM_CHECK)
        self.shtl = view.Append(ID_TOOL, 'Show toolbar', 'Show Toolbar', kind=wx.ITEM_CHECK)
        view.Check(ID_STAT, True)
        view.Check(ID_TOOL, True)

        self.Bind(wx.EVT_MENU, self.ToggleStatusBar, id=ID_STAT)
        self.Bind(wx.EVT_MENU, self.ToggleToolBar, id=ID_TOOL)

        menubar.Append(file, '&File')
        menubar.Append(view, '&View')
        self.SetMenuBar(menubar)

        self.toolbar = self.CreateToolBar()
        self.toolbar.Realize()

        self.statusbar = self.CreateStatusBar()

        self.Bind(wx.EVT_PAINT, self.OnPaint, self.toolbar)

        self.Centre()
        self.Show(True)

    def OnPaint(self, e):
        dc = wx.PaintDC(self)
        dc.SetBrush(wx.Brush('#c56c00'))
        dc.DrawRectangle(10, 15, 90, 60)

    def ToggleStatusBar(self, event):
        if self.shst.IsChecked():
            self.statusbar.Show()
        else:
            self.statusbar.Hide()

    def ToggleToolBar(self, event):
        if self.shtl.IsChecked():
            self.toolbar.Show()
        else:
            self.toolbar.Hide()

app = wx.App()
CheckMenuItem(None, -1, 'Toolbar Test')
app.MainLoop()
5
задан Benjamin Gale 13 February 2011 в 14:40
поделиться