如何更改wxPython工具栏的外观?

时间:2011-01-16 10:53:07

标签: python wxpython

wxPython ToolBar外观与当前操作系统的外观不匹配 - 它具有类似于Windows Vista / 7菜单栏I.E的渐变。银色渐变。

有没有办法改变它,以便它与操作系统的外观和感觉融为一体?

注意:创建ToolBar时可以设置样式标志,其中一个标志是wx.TB_FLAT,但这似乎对工具栏的渲染方式没有影响。

我在Windows 7上运行我的wxPython程序。

编辑:下面是我所看到的屏幕截图。

alt text

编辑:工具栏似乎是根据当前主题绘制的,因为更改为Windows经典主题会呈现与窗口背景相匹配的平面工具栏。

下面的代码显示了我到目前为止所尝试的内容。我创建了一个名为OnPaint的方法,它绑定到工具栏绘制事件。这没有任何效果,工具栏的绘制如上图所示。

我知道OnPaint中的代码可以正常工作,如果我将此方法绑定到windows paint事件而不是工具栏。

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()

2 个答案:

答案 0 :(得分:4)

似乎我的问题的解决方案实际上非常简单。所有需要的是调用工具栏 SetBackgroundColour()方法而不是尝试应用一些自定义绘制逻辑。

使用 wx.SystemSettings 类中的颜色可以维护系统外观。

self.toolbar.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENUBAR))

enter image description here

答案 1 :(得分:0)

wxPython演示是否表现出相同的行为?我不记得它在我的Windows 7机器上看起来不正确。也许清单文件没有安装。