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

2024-05-17 11:34:48 发布

您现在位置:Python中文网/ 问答频道 /正文

wxPython工具栏的外观与当前操作系统不匹配-它的渐变与windowsvista/7菜单栏类似,即银色渐变。在

有没有办法改变这一点,使之与操作系统的外观和感觉融为一体?在

注意:在创建工具栏时可以设置一个样式标志,其中一个标志是wx.TB_单位但这似乎不会影响工具栏的呈现方式。在

我在Windows7上运行wxPython程序。在

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

alt text

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

下面的代码显示了我迄今为止所做的努力。我创建了一个名为OnPaint的方法,它绑定到toolbars paint事件。这没有效果,工具栏如上图所示绘制。在

我知道,如果我将这个方法绑定到windows paint事件而不是工具栏上,OnPaint中的代码就像呈现矩形一样工作。在

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

Tags: selfviewidtruedefshowtoolstat
2条回答

wxPython演示是否显示出相同的行为?我不记得它在我的Windows7机器上看起来不正确。可能没有安装清单文件。在

看来我的问题的解决办法其实很简单。所需的不是尝试应用一些自定义绘制逻辑,而是调用toolbarsSetBackgroundColour()方法。在

使用中的颜色可以保持系统的外观wx.system设置课程。在

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

enter image description here

相关问题 更多 >