Добавить в корзинуПозвонить
Найти в Дзене

Виджет для ввода текста GtkEntry

В этой статье мы рассмотрим самый популярный виджет GtkEntry — это однострочное поле для ввода текста. Этот виджет применяется  для ввода данных от пользователя. 1. Создание виджета GtkEntry Создадим поле для ввода логина. Для создания виджета нужно сделать три шага: GtkWidget *login_entry; login_entry = gtk_entry_new(); gtk_container_add(GTK_CONTAINER(window), login_entry); Но так как GtkEntry часто используется в паре с ярлыком, то напишем минимальную программу для ввода логина. # include <gtk/gtk.h> int main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *login_label; GtkWidget *login_entry; GtkWidget *hbox1; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "GtkEntry"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 300, 150); // Создаем ярлык и поле ввода login_label = gtk_label_new("Введите логин
Оглавление

В этой статье мы рассмотрим самый популярный виджет GtkEntry — это однострочное поле для ввода текста. Этот виджет применяется  для ввода данных от пользователя.

1. Создание виджета GtkEntry

Создадим поле для ввода логина. Для создания виджета нужно сделать три шага:

  • Создать указатель на виджет;
  • Создать сам виджет;
  • Добавить виджет в окно.

GtkWidget *login_entry;

login_entry = gtk_entry_new();

gtk_container_add(GTK_CONTAINER(window), login_entry);

Но так как GtkEntry часто используется в паре с ярлыком, то напишем минимальную программу для ввода логина.

# include <gtk/gtk.h>

int main (int argc, char *argv[])

{

GtkWidget *window;

GtkWidget *login_label;

GtkWidget *login_entry;

GtkWidget *hbox1;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

gtk_window_set_title (GTK_WINDOW (window), "GtkEntry");

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

gtk_window_set_default_size(GTK_WINDOW(window), 300, 150);

// Создаем ярлык и поле ввода

login_label = gtk_label_new("Введите логин:");

login_entry = gtk_entry_new();

// Добавляем их в горизонтальный контейнер

hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);

gtk_box_pack_start(GTK_BOX(hbox1), login_label, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(hbox1), login_entry, TRUE, FALSE, 5);

gtk_container_add(GTK_CONTAINER(window), hbox1);

g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show_all(window);

gtk_main ();

return 0;

}

2. Поле для ввода пароля

Теперь создадим поле для ввода пароля. Для этого сначала создаем обычное поле ввода, а потом вызываем функцию:

gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);

Теперь программа целиком

# include <gtk/gtk.h>

int main (int argc, char *argv[])

{

GtkWidget *window;

GtkWidget *login_label, *login_entry;

GtkWidget *password_label, *password_entry;

GtkWidget *hbox1, *hbox2;

GtkWidget *vbox;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

gtk_window_set_title (GTK_WINDOW (window), "GtkEntry");

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

gtk_window_set_default_size(GTK_WINDOW(window), 300, 100);

vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

// Создаем ярлык и поле ввода логина

login_label = gtk_label_new("Введите логин:");

login_entry = gtk_entry_new();

// Создаем ярлык и поле ввода пароля

password_label = gtk_label_new("Введите пароль:");

password_entry = gtk_entry_new();

gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);

hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);

gtk_box_pack_start(GTK_BOX(hbox1), login_label, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(hbox1), login_entry, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, FALSE, 5);

hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);

gtk_box_pack_start(GTK_BOX(hbox2), password_label, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(hbox2), password_entry, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, FALSE, 5);

gtk_container_add(GTK_CONTAINER(window), vbox);

g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show_all(window);

gtk_main ();

return 0;

}

-2

3. Получение значения поля

Теперь научимся получать и менять значение поля GtkEntry. Для этого существуют команды:

void gtk_entry_set_text(GtkEntry *entry,

const gchar *text);const gchar* gtk_entry_get_text (GtkEntry *entry);

Добавим в программу две кнопки. Одна будет добавлять значения в поля ввода, а другая — удалять их.

# include <gtk/gtk.h>

GtkWidget *login_label, *login_entry;

GtkWidget *password_label, *password_entry;

void set_button_clicked(GtkWidget *button, gpointer data)

{

gtk_entry_set_text(GTK_ENTRY((GtkWidget*) login_entry), "GtkEntry");

gtk_entry_set_text(GTK_ENTRY((GtkWidget*) password_entry), "GtkEntry");

}

void del_button_clicked(GtkWidget *button, gpointer data)

{

gtk_entry_set_text(GTK_ENTRY((GtkWidget*) login_entry), "");

gtk_entry_set_text(GTK_ENTRY((GtkWidget*) password_entry), "");

}

int main (int argc, char *argv[])

{

GtkWidget *window;

GtkWidget *hbox1, *hbox2, *hbox3;

GtkWidget *vbox;

GtkWidget *set_button, *del_button;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

gtk_window_set_title (GTK_WINDOW (window), "GtkEntry");

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

gtk_window_set_default_size(GTK_WINDOW(window), 300, 100);

vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

// Создаем ярлык и поле ввода логина

login_label = gtk_label_new("Введите логин:");

login_entry = gtk_entry_new();

// Создаем ярлык и поле ввода пароля

password_label = gtk_label_new("Введите пароль:");

password_entry = gtk_entry_new();

gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);

// Создаем кнопки

set_button = gtk_button_new_with_label("Установить");

del_button = gtk_button_new_with_label("Удалить");

// Задаем функции кнопок

g_signal_connect(GTK_BUTTON(set_button), "clicked", G_CALLBACK(set_button_clicked), login_entry);

g_signal_connect(GTK_BUTTON(del_button), "clicked", G_CALLBACK(del_button_clicked), password_entry);

hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);

gtk_box_pack_start(GTK_BOX(hbox1), login_label, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(hbox1), login_entry, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, FALSE, 5);

hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);

gtk_box_pack_start(GTK_BOX(hbox2), password_label, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(hbox2), password_entry, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, FALSE, 5);

hbox3 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);

gtk_box_pack_start(GTK_BOX(hbox3), set_button, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(hbox3), del_button, TRUE, FALSE, 5);

gtk_box_pack_start(GTK_BOX(vbox), hbox3, TRUE, FALSE, 5);

gtk_container_add(GTK_CONTAINER(window), vbox);

g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show_all(window);

gtk_main ();

return 0;

}

Вот результат работы программы:

-3

Можно ли стать программистом за год с нуля?
Читайте в моей бесплатной мини-книге «Путь в программисты». Скачать её можно здесь.