如何在与菜单的交互中管理wx.StatusBar文本

时间:2014-10-17 02:05:29

标签: python-2.7 wxpython

我有一个带wx.StatusBar的主窗口,我认为这是非常标准的方式:

class MainWindow(wx.Frame):
    "Obviously, the main window..."
    def __init__(self, parent, title, appState, installTypes):
        wx.Frame.__init__(self, parent, title=title)

        # [...]

        # and StatusBar (which puts itself in the bottom of the window)
        self.CreateStatusBar() 

我有一堆菜单,在StatusBar中显示他们的帮助:

    # Auto-exit  toggle:
    menuOptionsAutoExit = optionsmenu.Append(ID_OPTIONS_AUTO_EXIT,
                                             _("&Auto-exit"), 
                                             _("Have CMH exit after showing the status"), 
                                             kind = wx.ITEM_CHECK)

但是我的控制器中也有需要在状态栏中报告的事件。其中每个都有两个需要在StatusBar中完成的操作:显示通知("正在发生的事情")然后删除它。

问题在于,如果用户在菜单项上进行了鼠标操作(以便在我执行&时,项目的帮助已经替换了"某些事情发生在状态栏中?#34; #34;删除消息",结果是错过了删除,并且在他们鼠标离开菜单项后,我离开了"正在发生的事情"永远。

我已经尝试了几乎所有我能想到的使用SetStatusText()PushStatusText()组合来放置"正在发生的事情"和PopStatusText()SetStatusText('')清除它。无论我做什么,通过在设置状态消息和清除它之间弄乱菜单,我最终可能会发生一些事情正在发生的事情"卡在那里。

什么是正确的食谱?

(wxpython 3.0.0.0,OSX和Win7下的相同行为)

1 个答案:

答案 0 :(得分:1)

一些解决方法,但可能适合你。

self.CreateStatusBar(2)
self.SetStatusText("A Custom StatusBar...", 1)
wx.CallLater(10000, self.SetStatusText, "", 1)

因此,请勿使用状态栏上的第一个字段来显示消息。