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

前端之家收集整理的这篇文章主要介绍了如何更改wxPython工具栏的外观?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

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

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

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

我知道,如果我将此方法绑定到Windows绘制事件而不是工具栏,则OnPaint中的代码将作为矩形呈现.

  1. import wx
  2. ID_STAT = 1
  3. ID_TOOL = 2
  4. class CheckMenuItem(wx.Frame):
  5. def __init__(self,parent,id,title):
  6. wx.Frame.__init__(self,title,size=(350,250))
  7. menubar = wx.MenuBar()
  8. file = wx.Menu()
  9. view = wx.Menu()
  10. self.shst = view.Append(ID_STAT,'Show statubar','Show Statusbar',kind=wx.ITEM_CHECK)
  11. self.shtl = view.Append(ID_TOOL,'Show toolbar','Show Toolbar',kind=wx.ITEM_CHECK)
  12. view.Check(ID_STAT,True)
  13. view.Check(ID_TOOL,True)
  14. self.Bind(wx.EVT_MENU,self.ToggleStatusBar,id=ID_STAT)
  15. self.Bind(wx.EVT_MENU,self.ToggleToolBar,id=ID_TOOL)
  16. menubar.Append(file,'&File')
  17. menubar.Append(view,'&View')
  18. self.SetMenuBar(menubar)
  19. self.toolbar = self.CreateToolBar()
  20. self.toolbar.Realize()
  21. self.statusbar = self.CreateStatusBar()
  22. self.Bind(wx.EVT_PAINT,self.OnPaint,self.toolbar)
  23. self.Centre()
  24. self.Show(True)
  25. def OnPaint(self,e):
  26. dc = wx.PaintDC(self)
  27. dc.SetBrush(wx.Brush('#c56c00'))
  28. dc.DrawRectangle(10,15,90,60)
  29. def ToggleStatusBar(self,event):
  30. if self.shst.IsChecked():
  31. self.statusbar.Show()
  32. else:
  33. self.statusbar.Hide()
  34. def ToggleToolBar(self,event):
  35. if self.shtl.IsChecked():
  36. self.toolbar.Show()
  37. else:
  38. self.toolbar.Hide()
  39. app = wx.App()
  40. CheckMenuItem(None,-1,'Toolbar Test')
  41. app.MainLoop()
最佳答案
似乎我的问题的解决方案实际上非常简单.所有需要的是调用工具栏SetBackgroundColour()方法,而不是尝试应用一些自定义绘制逻辑.

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

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

猜你在找的Python相关文章