哦,还不能够确保一定能够显示,如果你看过源代码,它是引发了一个show信号,如果它的派生构件没有覆盖show这个信号的方法,会调用默认的gtk_widget_real_show方法。
在gtk中,一个构件的显示要经过两个必要的步骤:
1.realize
2.map
realize是创建对应的gdk窗口,同时也会创建对应的x窗口
而map则是调用gdk_window_show()把已经创建的gdk窗口在屏幕上显示出来,使窗口变得可见。
如果它的派生构件没有覆盖show这个信号的方法,gtk_widget_show()引发信号然后调用默认的gtk_widget_real_show
而gtk_widget_real_show这个方法又会调用gtk_widget_map(), gtk_widget_map先检查构件的gdk窗口有没有realize,如果没有,则先realize这个窗口,然后才调用gdk_window_show使的窗口可见。
窗口可见的话,就可以在上面进行各种绘制了。
要窗口马上显示出来,要用gtk_widget_show_now,它会添加一个回调函数来捕获map_event,如果没有捕获该事件,它会一直调用主循环迭代来强制等待该事件信号