2011-01-16 15 views
4

wxPythonのツールバーのルックアンドフィールが現在のオペレーティングシステムのルックアンドフィールと一致しません.Windows Vista/7のメニューバーI.Eに似たグラデーションがあります。銀の勾配。wxPythonツールバーのルックアンドフィールを変更するにはどうすればよいですか?

これを変更して、オペレーティングシステムのルックアンドフィールとブレンドする方法はありますか?

注:ツールバーの作成時に設定できるスタイルフラグがあり、そのフラグの1つがwx.TB_FLATですが、これはツールバーの表示方法には影響しないようです。

私は、Windows 7上で私のwxPythonのプログラム

編集を実行しています:以下は、私が見ています何のスクリーンショットです。

alt text

編集:ツールバーがWindowsクラシックテーマに変更すると、現在のテーマに合わせて描かれているようで、ウィンドウの背景と一致する平らなツールバーをレンダリングします。

以下のコードは、これまで私が試したことを示しています。私は、ツールバーのペイントイベントにバインドされたOnPaintというメソッドを作成しました。これは効果がなく、ツールバーは上のイメージのように描画されます。

私はこのメソッドをツールバーの代わりにWindowsペイントイベントにバインドすると、矩形がレンダリングされるので、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() 

答えて

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回再インストールしました。 –

関連する問題