简体   繁体   English

如何默认隐藏wxpython状态栏

[英]how to hide wxpython status bar by default

I am learning wxpython following the tutorials on zetcode about menu bars and status bars.我正在按照关于菜单栏和状态栏的zetcode教程学习 wxpython。 Please forgive me if the question is stupid.如果问题很愚蠢,请原谅我。

The code below from the website works fine, but I am curious how to hide the status bar by default (when the application window popup).网站下面的代码工作正常,但我很好奇如何默认隐藏状态栏(当应用程序 window 弹出窗口时)。

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()

I have tried to change one line above into:我试图将上面的一行更改为:

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

Sadly, that didn't work out.可悲的是,这没有成功。

Willing to hear any advice!愿意听取任何建议! Thanks in advance!提前致谢!

Specs: wxpython: 2.8.12.1;规格:wxpython:2.8.12.1; python 2.7; python 2.7; Ubuntu 12.04 Ubuntu 12.04

IMHO, because viewMenu.Check(..) is called before UI initialization is done (before event loop begin), it may not fire event. 恕我直言,因为viewMenu.Check(..)在UI初始化完成之前(在事件循环开始之前viewMenu.Check(..)已被调用,所以它可能不会触发事件。

How about manually call ToggleStatusBar method after viewMenu.Check ? viewMenu.Check之后手动调用ToggleStatusBar方法viewMenu.Check

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

This might be what you mean by Just curious if any built-in functions can do that kind of "update" job? 这可能就是您的意思,只是好奇是否有任何内置函数可以完成这种“更新”工作? There is a wx.EVT_UPDATE_UI event, i've modifed your code to use it. 有一个wx.EVT_UPDATE_UI事件,我已经修改了您的代码以使用它。

UpdateUIEvent 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()

I think this way would be better.我认为这种方式会更好。

statusBarHandle.Hide()
self.SetStatusBar(None) #Disable Status Bar
#Enable
statusBarHandle.Show()
self.SetStatusBar(statusBarHandle) #Back created StatusBar(self.CreateStatusBar function)
#Useful tip: for update all widgets in AUI, use AUI function Update()
#For sizers you need to use the Layout() or Update() function 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM