gtk_widget_show_all(window);
gtk_main();
return 0;
"gtk_widget_show_all()" рекурсивно вызывает
"gtk_widget_show()" для контейнера и всех его детей. Следующий
код будет иметь тот же эффект в данном случае:
gtk_widget_show(label);
gtk_widget_show(button);
gtk_widget_show(window);
Необходимо показать каждый виджет, который вы хотите видеть на экране. Противоположная операция называется "gtk_widget_hide()"; виджеты начинают свою жизнь спрятанными, и могут быть перезапрятаны/перепоказаны любое количество раз. Показывание все дочерних виджетов перед показом самого внешнего виджета является хорошей практикой; иначе пользователь сначала будет видеть появляющийся контейнер, а затем появляющихся детей. Виджеты на самом деле не показываются на экране до тех пор, пока их родитель не виден. Исключением из правила является GtkWindow, так как он не имеет родителя.
Как только ваши виджеты показались, вы захотите подождать, пока пользователь не сделает с ними что-нибудь. "gtk_main()" входит в основной цикл Gtk+; основной цикл управляется событиями. То есть, пользовательские действия побуждают события, которые, в общем, заставляют сигналы испускаться, и затем вызываться обработчики. "gtk_main()" циклится бесконечно, дожидаясь и отвечая на ввод пользователя. Главный цикл более детально описан в разделе 3.4. События и их отношение к главному циклу описаны в разделе 10.5.