В gtk как я могу переключиться на новый экран с новыми кнопками и другими виджетами, но в том же окне? - PullRequest
0 голосов
/ 27 февраля 2019

В gtk я пытаюсь создать игру, в которой создатель отображает большие буквы в течение 3 (трех) секунд перед отображением главного меню.Я знаю, что все в порядке с функцией DisplayMainMenu.По какой-то причине это заставляет его просто показывать экран Asadefa навсегда.Как я могу исправить?

#define NOTHING
#define EMPTYSTRING "\0"

int main(int argc, char *argv[]) {
    gtk_init (&argc, &argv);
    Window = gtk_window_new(0);
    Box = gtk_hbox_new(00, 00);

    gtk_window_set_position(GTK_WINDOW(Window), 1);
    gtk_window_set_default_size(GTK_WINDOW(Window),800, 500);
    gtk_window_set_title(GTK_WINDOW(Window), "Fakecraft" );
    g_signal_connect(Window, "destroy", gtk_main_quit, NULL);
    gtk_container_set_border_width(GTK_CONTAINER(Window),16);

    char *TXT=("<span font=\"72\">ASADEFA </span>");
    GtkWidget (*Label) = gtk_label_new(EMPTYSTRING);
    gtk_container_add(GTK_CONTAINER(Window), Box);
    gtk_container_add(GTK_CONTAINER(Box), Label);
    gtk_label_set_markup(GTK_LABEL(Label), TXT);

    gtk_widget_show_all(Window);
    gtk_main( NOTHING NOTHING );

    sleep(3);

    DisplayMainMenu();
    return 0;
}

1 Ответ

0 голосов
/ 27 февраля 2019

Не используйте sleep.GTK + использует цикл обработки событий для реакции на событие, поэтому вы не сможете дозвониться до sleep до тех пор, пока не будет вызван gtk_main_quit, что уже слишком поздно.Вы должны использовать g_timout_add_seconds вместо того, чтобы добавить источник события, который будет вызывать ваш обратный вызов через 3 секунды.В этом обратном вызове вы можете вызвать функцию DisplayMainMenu.

...