如何更改wxPython工具栏的外观和感觉?
wxPython的工具栏看起来和当前操作系统的风格不太一样——它有一个类似于Windows Vista/7菜单栏的渐变效果,也就是银色的渐变。
有没有办法改变这个,让它和操作系统的风格更协调呢?
注意:在创建工具栏时,有一个样式标志可以设置,其中一个标志是wx.TB_FLAT,但这似乎对工具栏的显示没有影响。
我是在Windows 7上运行我的wxPython程序。
编辑:下面是我看到的截图。
编辑:看起来工具栏是根据当前主题绘制的,切换到Windows经典主题后,工具栏变得平坦,与窗口背景相匹配。
下面的代码展示了我到目前为止尝试过的内容。我创建了一个叫做OnPaint的方法,并将其绑定到工具栏的绘制事件。但这没有效果,工具栏还是像上面的图片那样显示。
我知道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()
2 个回答
0
wxPython的演示程序表现得一样吗?我记得在我的Windows 7电脑上它看起来没问题。可能是清单文件没有安装好。
6
看起来我遇到的问题其实解决起来很简单。与其尝试一些复杂的绘图逻辑,其实只需要调用工具栏的 SetBackgroundColour() 方法就可以了。
如果想保持系统的外观和感觉,可以使用 wx.SystemSettings 类中的颜色。
self.toolbar.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENUBAR))