【问题标题】:Is it possible in wxwidgets to determine if the window is currently visible?是否可以在 wxwidgets 中确定窗口当前是否可见?
【发布时间】:2013-05-10 05:13:14
【问题描述】:

在我的 wxWidgets (wxPython) 应用程序中,我使用 50 毫秒的计时器来进行轮询并在有任何更改时更新窗口。如果检测到更改,它会调用wxWindow.Refresh 来更新窗口,小部件的实际更新在EVT_PAINT 处理程序中完成。如果用户无论如何都没有看窗口,我可以禁用绘画和/或计时器,那就太好了。然而,即使窗口被图标化或隐藏在不同的窗口后面,EVT_PAINT 仍然会被触发。

有什么方法可以检测窗口当前是否在屏幕上不可见,或者防止 EVT_PAINT 事件不必要地触发?

IsActive 方法和EVT_ACTIVATE 事件来测试窗口是否有焦点,但是如果它没有焦点但仍然可见,我想继续更新窗口。 wxWindow.IsShown 系列函数没有帮助,对于隐藏/图标化的窗口,它们仍然返回 True。

【问题讨论】:

  • 我有同样的问题:一个小部件使用 wxTimer 重复更新,但如果窗口不可见,则不应更新它,例如当放置在非活动的 wxNotebook 选项卡中时。我可以在事件处理程序中使用 IsShownOnScreen 来停止任何进一步的事件,但是一旦它对用户可见,就无法再次启动它。

标签: user-interface wxpython wxwidgets polling


【解决方案1】:

IsShownOnScreen() 可以帮助解决图标化的情况。 编辑:但实际上没有

或者您可以捕获wxEVT_ICONIZE 以检测窗口何时最小化。

但老实说,刷新隐藏在另一个窗口后面的窗口仍然会导致重绘,我感到相当惊讶。如果前面的窗口不透明,这真的不应该发生。

【讨论】:

  • 不起作用。这正是我尝试的刷新计时器。
  • IsShownOnScreen 仅检查元素及其所有父项是否隐藏。它不检查窗口的状态。
  • 抱歉,IsShownOnScreen() 在这种情况下确实不能正常工作(至少恕我直言,它应该像我写的那样工作,但同样,目前它不能正常工作)。 wxEVT_ICONIZE 确实如此。
猜你喜欢
  • 1970-01-01
  • 2011-02-09
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多