如何知道Gtk窗口何时完全显示?

如何知道Gtk窗口何时完全显示?,gtk,Gtk,我想知道当一个Gtk.Window完全显示时,会发出哪个信号,我的意思是显示窗口本身以及它的小部件 我尝试了几个信号: 展示 认识到 可见性通知事件 聚焦 但它们都不能正常工作 我在网上找到的唯一有趣的答案是。在信号后连接回调(以前在GTK+2中称为expose) 附录 还有其他一些因素在起作用:,以及(为什么不?)小部件可以在空闲回调中延迟绘制的事实 如果您想知道主窗口第一次出现的时间,则在您的show\u all呼叫后添加一个按钮要容易得多(也更明智)。它应该是: window.get_

我想知道当一个
Gtk.Window
完全显示时,会发出哪个信号,我的意思是显示窗口本身以及它的小部件

我尝试了几个信号:

  • 展示
  • 认识到
  • 可见性通知事件
  • 聚焦
但它们都不能正常工作


我在网上找到的唯一有趣的答案是。

在信号后连接回调(以前在GTK+2中称为
expose

附录

还有其他一些因素在起作用:,以及(为什么不?)小部件可以在空闲回调中延迟绘制的事实

如果您想知道主窗口第一次出现的时间,则在您的
show\u all
呼叫后添加一个按钮要容易得多(也更明智)。

它应该是:

window.get_property("visible")
#Returns true if the window is visible

我刚刚尝试过,但在显示窗口时会发出绘制信号,但在显示窗口小部件之前,您是否尝试过在之后使用
g\u signal\u connect\u而不是
g\u signal\u connect
?@liberforce:这仍然不够。例如,双缓冲将绘图信号包装在
gdk\u window\u begin\u paint\u region
gdk\u window\u end\u paint
调用之间,以避免闪烁。
g\u idle\u add
解决方案似乎可行,但我认为它不是确定性的。事实上,我认为它可以工作,因为直到窗口完全显示时,Gtk都很忙,并且没有执行作为参数传递给
g\u idle\u add
的函数。但我不知道这种行为是否是确定性的。@robbo:它是确定性的。您有一个进程、一个线程和一个事件循环:怎么可能是确定性的?idle函数的实现与您描述的完全一样,即在执行任何其他具有更高优先级的挂起事件后调用。正如您从事件处理程序中看到的,事件处理程序具有更高的优先级。如果您也需要适当的尺寸(宽度、高度),那么唯一适合我的信号就是
size\u allocate