2011-01-16 14 views
4

wxPython工具栏的外观与当前操作系统的外观不符 - 它具有类似于Windows Vista/7菜单I.E.的渐变。银色渐变。如何更改wxPython工具栏的外观?

有什么方法可以改变它,使它与操作系统的外观融合?

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

我运行在Windows 7上

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

alt text

编辑:看来在工具栏绘制按照当前的主题,更改为Windows经典主题呈现其窗口背景相匹配的扁平工具栏。

下面的代码显示了我到目前为止所尝试的内容。我创建了一个名为OnPaint的方法,该方法绑定到工具栏上的paint事件。这不起作用,工具栏如上图所示。

我知道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() 

回答

3

看来我的问题的解决方案其实很简单。而不是尝试应用一些自定义绘画逻辑,所有需要的都是调用工具栏的方法SetBackgroundColour()方法。

通过使用wx.SystemSettings类的颜色,可以保持系统的外观和感觉。

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

enter image description here

0

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

+0

呀,从wxPython的演示工具栏样品看起来完全一样,在我的截图一样。另外,我已经重新安装了wxPython至少3次。 –