默认情况下如何隐藏wxpython状态栏

时间:2014-01-16 15:16:27

标签: python python-2.7 ubuntu wxpython

我正在学习wxpython,关注zetcode关于菜单栏和状态栏的教程。如果问题很愚蠢,请原谅我。

以下网站上的代码运行正常,但我很好奇默认情况下如何隐藏状态栏(当弹出应用程序窗口时)。

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

2 个答案:

答案 0 :(得分:0)

恕我直言,因为在完成UI初始化之前(事件循环开始之前)调用viewMenu.Check(..),它可能不会触发事件。

如何在ToggleStatusBar之后手动调用viewMenu.Check方法?

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

答案 1 :(得分: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()