2014-01-16 21 views
2

我正在學習關於菜單欄和狀態欄的教程zetcode的wxpython。如果問題很蠢,請原諒我。如何隱藏默認的wxpython狀態欄

從網站的代碼工作正常,但我很好奇如何隱藏狀態欄默認情況下(當應用程序窗口彈出)。

import wx 

class Example(wx.Frame): 

    def __init__(self, *args, **kwargs): 
     super(Example, self).__init__(*args, **kwargs)    
     self.InitUI() 

    def InitUI(self):  

     menubar = wx.MenuBar() 
     fileMenu = wx.Menu() 
     viewMenu = wx.Menu() 

     self.shst = viewMenu.Append(wx.ID_ANY, 'Show statubar', 
      'Show Statusbar', kind=wx.ITEM_CHECK) 
     self.shtl = viewMenu.Append(wx.ID_ANY, 'Show toolbar', 
      'Show Toolbar', kind=wx.ITEM_CHECK) 

     viewMenu.Check(self.shst.GetId(), True) 
     viewMenu.Check(self.shtl.GetId(), True) 

     self.Bind(wx.EVT_MENU, self.ToggleStatusBar, self.shst) 
     self.Bind(wx.EVT_MENU, self.ToggleToolBar, self.shtl) 

     menubar.Append(fileMenu, '&File') 
     menubar.Append(viewMenu, '&View') 
     self.SetMenuBar(menubar) 

     self.toolbar = self.CreateToolBar() 
     self.toolbar.AddLabelTool(1, '', wx.Bitmap('texit.png')) 
     self.toolbar.Realize() 

     self.statusbar = self.CreateStatusBar() 
     self.statusbar.SetStatusText('Ready') 

     self.SetSize((350, 250)) 
     self.SetTitle('Check menu item') 
     self.Centre() 
     self.Show(True) 


    def ToggleStatusBar(self, e):   
     if self.shst.IsChecked(): 
      self.statusbar.Show() 
     else: 
      self.statusbar.Hide() 

    def ToggleToolBar(self, e):   
     if self.shtl.IsChecked(): 
      self.toolbar.Show() 
     else: 
      self.toolbar.Hide()   

def main(): 

    ex = wx.App() 
    Example(None) 
    ex.MainLoop()  

if __name__ == '__main__': 
    main() 

我試圖改變一個線以上到:

viewMenu.Check(self.shst.GetId(), False) 

可悲的是,沒有工作了。

願意聽到任何意見!提前致謝!

規格:wxpython:2.8.12.1; python 2.7; Ubuntu 12.04

回答

0

恕我直言,因爲viewMenu.Check(..)在UI初始化完成之前(事件循環開始之前)被調用,它可能不會觸發事件。

如何在viewMenu.Check之後手動撥打ToggleStatusBar方法?

def InitUI(self):  
    .... 
    viewMenu.Check(self.shst.GetId(), False) 
    self.ToggleStatusBar(None) 
+0

這非常適用!謝謝!只是好奇,如果任何內置函數可以做這種「更新」工作? – Ray

0

這可能是你的意思,只是好奇,如果任何內置函數可以做這種「更新」工作? 有一個wx.EVT_UPDATE_UI事件,我修改了你的代碼來使用它。

UpdateUIEvent

import wx 


class Example(wx.Frame): 

    def __init__(self, *args, **kwargs): 
     super(Example, self).__init__(*args, **kwargs) 
     self.InitUI() 

    def InitUI(self): 

     menubar = wx.MenuBar() 
     fileMenu = wx.Menu() 
     viewMenu = wx.Menu() 

     self.shst = viewMenu.Append(-1, 'Show statubar', 'Show Statusbar', 
      kind=wx.ITEM_CHECK) 
     self.shtl = viewMenu.Append(-1, 'Show toolbar', 'Show Toolbar', 
      kind=wx.ITEM_CHECK) 

     self.shst.Check(False) 
     self.shtl.Check(True) 

     menubar.Append(fileMenu, '&File') 
     menubar.Append(viewMenu, '&View') 
     self.SetMenuBar(menubar) 

     self.toolbar = self.CreateToolBar() 
     self.toolbar.AddLabelTool(1, '', wx.EmptyBitmap(16, 16)) 
     self.toolbar.Realize() 

     self.statusbar = self.CreateStatusBar() 
     self.statusbar.SetStatusText('Ready') 

     self.Bind(wx.EVT_UPDATE_UI, self.on_update_status_bar, self.statusbar) 
     self.Bind(wx.EVT_UPDATE_UI, self.on_update_tool_bar, self.toolbar) 

     self.SetSize((350, 250)) 
     self.SetTitle('Check menu item') 
     self.Centre() 
     self.Show(True) 

    def on_update_status_bar(self, event): 
     event.Show(self.shst.IsChecked()) 

    def on_update_tool_bar(self, event): 
     event.Show(self.shtl.IsChecked()) 


def main(): 

    ex = wx.App() 
    Example(None) 
    ex.MainLoop() 

if __name__ == '__main__': 
    main() 
+0

我喜歡這個功能。然而,我的機器上運行的一個問題是,稍後的檢查和取消選中狀態欄菜單項似乎不會觸發事件。如果代碼在您的代碼上運行良好,可能會成爲我的機器的問題。 – Ray