【问题标题】:how to hide wxpython status bar by default如何默认隐藏wxpython状态栏
【发布时间】:2014-02-05 14:07:18
【问题描述】:

我正在按照zetcode 上关于菜单栏和状态栏的教程学习 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

【问题讨论】:

    标签: python python-2.7 ubuntu wxpython


    【解决方案1】:

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

    viewMenu.Check之后手动调用ToggleStatusBar方法怎么样?

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

    【讨论】:

    • 这很好用!谢谢!只是好奇是否有任何内置函数可以完成这种“更新”工作?
    【解决方案2】:

    这可能就是您所说的只是好奇是否有任何内置函数可以完成这种“更新”工作? 有一个 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()
    

    【讨论】:

    • 我喜欢这个功能。然而,在我的机器上运行的一个问题是后来检查和取消检查状态栏菜单项似乎没有触发事件。如果代码在你的机器上运行良好,可能是我机器的问题。
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多