在我的wxWidgets(wxPython)应用程序中,如果有任何更改,我使用50 ms计时器进行一些轮询并更新窗口。如果检测到更改,它会调用wxWindow.Refresh
来更新窗口,并且在EVT_PAINT
处理程序中完成小部件的实际更新。如果用户没有看窗口,我可以禁用绘画和/或定时器。但是,即使窗口被图标化或隐藏在不同的窗口后面,EVT_PAINT仍然被解雇。wxwidgets有可能确定窗口当前是否可见?
有什么办法可以检测窗口当前是否在屏幕上不可见,或防止EVT_PAINT事件被不必要地触发?
有IsActive
方法和EVT_ACTIVATE
事件来测试窗口是否有焦点,但我想继续更新窗口,如果它是未聚焦,但仍然可见。 wxWindow.IsShown
系列函数没有帮助,它们仍然为隐藏/图标化窗口返回True。
我有同样的问题:使用wxTimer重复更新小部件,但如果窗口不可见,则不应更新小部件,例如放置在不活动的wxNotebook选项卡中。我可以在事件处理程序中使用IsShownOnScreen来停止任何进一步的事件,但一旦用户可以看到,就无法再次启动它。 – Jonatan