Widgets
Widgets (1)
GtkLabel, GtkButton and Gtkbox
GtkLabel
Мы сделали окно и показывали его на экране в предыдущем разделе. Теперь мы переходим к следующей теме, виджетам в окне. Самый простой виджет - GtkLabel. Это виджет со строкой внутри.
#include <gtk/gtk.h>
static void
on_activate(GApplication *app, gpointer user_data)
{
GtkWidget *win;
GtkWidget *lab;
win = gtk_application_window_new(GTK_APPLICATION(app));
gtk_window_set_title(GTK_WINDOW(win), "lb1");
gtk_window_set_default_size(GTK_WINDOW(win), 400, 300);
lab = gtk_label_new("Hello.");
gtk_window_set_child(GTK_WINDOW(win), lab);
gtk_widget_show(win);
}
int main(int argc, char **argv)
{
GtkApplication *app;
int stat;
app = gtk_application_new("com.github.ToshioCP.lb1", G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
stat = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return stat;
}Сохраните эту программу в файл lb1.c. Затем скомпилируйте и запустите.
Окно с сообщением «Привет». появляется.

Там только небольшое изменение между pr4.cи lb1.c. Diff - хорошая программа для определения разницы между двумя файлами.
Это говорит нам:
Добавлено определение переменной lab.
Название окна изменено.
Метка создается и присоединяется к окну.
Функция gtk_window_set_child (GTK_WINDOW (win), lab)делает метку labдочерним виджетом окна win. Будь осторожен. Дочерний виджет отличается от дочернего объекта. У объектов есть родительско-дочерние отношения, а у виджетов также есть родительско-дочерние отношения. Но эти два отношения совершенно разные. Не путайте. В программе lb1.c, labявляется дочерним виджетом win. Дочерние виджеты всегда находятся внутри своего родительского виджета на экране. Смотрите окно, появившееся на экране. Окно включает метку.
У окна winнет родителей. Мы называем такое окно окном верхнего уровня. Одно приложение может иметь два или более окна верхнего уровня.
Last updated
Was this helpful?