2014-01-16 6 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; 파이썬 2.7; Ubuntu 12.04

답변

0

IMHO는 UI 초기화가 완료되기 전에 (이벤트 루프가 시작되기 전에) viewMenu.Check(..)이 호출되기 때문에 이벤트를 발생시키지 않을 수 있습니다.

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

이 기능을 좋아합니다. 그러나 내 컴퓨터에서 실행되는 한 가지 문제는 나중의 확인 및 선택 취소 상태 표시 줄 menuitem이 이벤트를 발생시키지 않는 것입니다. 코드가 잘 작동하면 내 컴퓨터의 문제 일 수 있습니다. – Ray

관련 문제