2

我是 GTK 的新手,我正在使用它在 C 中创建 UI。我创建了一个启动屏幕,我可以在指定的几秒钟后使用该函数将其关闭g_timeout_add(100, function_to_call, NULL);。启动画面效果很好。但问题是当进一步扩展我的程序时(即)关闭启动屏幕后,我希望自动显示另一个窗口,但事实并非如此。两扇窗户同时打开。这是我的程序。

gboolean function_to_call(gpointer data){
    gtk_quit_main();
    return(FALSE);
}
int main (int argc, char *argv[]){
    GtkWidget *window, *image, *another_window;
    gtk_init(&argc, &argv);
    .
    .
    .
    .
    .
    .
    .
    g_timeout_add (100, function_to_call, NULL);
    gtk_main ();
    /*if my program is till this, splash screen closes after 1 sec . But when i try
     *to define another window from here onwards and call gtk_widget_show() and gtk_main() 
     *again for another_ window, window and another_window both open together and window  
     *doesn't close after 1 sec. */
}

任何形式的帮助都是值得赞赏的。
谢谢你。

4

2 回答 2

7

您的 function_to_call 不会在此处关闭您的启动窗口,它会结束 gtk_main 事件循环。您不需要结束事件循环。

相反,您想要在您的function_to_call, 中隐藏(或销毁)您的启动窗口并显示您的下一个窗口(gtk_widget_hide(), gtk_widget_show())。

于 2012-11-05T20:40:52.307 回答
2

我创建了一个启动画面头文件,如下所示。

#include <gtk/gtk.h>

/* Close the splash screen */
gboolean close_screen(gpointer data)
{
  gtk_widget_destroy((GtkWidget*)data);
  gtk_main_quit ();
  return(FALSE);
}


int Show_Splash_Screen(char* image_name,int time,int width,int height)
{
  GtkWidget  *image, *window;
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_size_request (window, width, height);
  gtk_window_set_decorated(GTK_WINDOW (window), FALSE);
  gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS);
  gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
  image=gtk_image_new_from_file(image_name);
  gtk_container_add(GTK_CONTAINER(window), image);
  gtk_widget_show_all (window);
  g_timeout_add (time, close_screen, window);
  gtk_main ();
  return 0;
}

只需包含此文件并显示启动屏幕调用函数 Show_Splash_Screen("image_path",time_in_seconds,width_of_image_in_pixels,height_of_image_in_pixels);

于 2012-12-16T13:47:42.063 回答