Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Вы можете вручную задавать и изменять содержимое виджета
GtkEntry
_set_text
_append_text
_modify_text
Для применения
GtkEntry
gtk_entry_set_visibility
visible
FALSE
gtk_entry_set_invisible_char
Выполните упражнение 16.4.
Теперь, познакомившись с функциями виджета GtkEntry, посмотрим на них в действии в небольшой программе. Программа entry.c будет создавать окно ввода имени пользователя и пароля и сравнивать введенный пароль с секретным.
1. Сначала определим секретный пароль, остроумно заданный как
secret
#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>
const char * password = "secret";
2. У вас есть две функции обратного вызова, которые вызываются, когда уничтожается окно и щелкается мышью кнопка OK:
void closeApp(GtkWidget *window, gpointer data) {
gtk_main_quit();
}
void button_clicked(GtkWidget *button, gpointer data) {
const char *password_text =
gtk_entry_get_text(GTK_ENTRY((GtkWidget *) data));
if (strcmp(password_text, password) == 0)
printf("Access granted!n");
else printf("Access denied!n");
}
3. В функции
main
int main (int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *username_label, *password_label;
GtkWidget *username_entry, *password_entry;
GtkWidget *ok_button;
GtkWidget *hbox1, *hbox2;
GtkWidget *vbox;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GtkEntryBox");
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_windowset_default_size(GTK_WINDOW(window), 200, 200);
g_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(closeApp), NULL);
username_label = gtk_label_new("Login:");
password_label = gtk_label_new("Password:");
username_entry = gtk_entry_new();
password_entry = gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);
ok_button = gtk_button_new_with_label("Ok");
g_signal_connect(GTK_OBJECT(ok_button), "clicked",
GTK_SIGNAL_FUNC(button_clicked), password_entry);
hbox1 = gtk_hbox_new(TRUE, 5);
hbox2 = gtk_hbox_new(TRUE, 5);
vbox = gtk_vbox_new(FALSE, 10);
gtk_box_pack_start(GTK_BOX(hbox1), username_label, TRUE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox1), username_entry, TRUE, FALSE, 5);
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), hbox1, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), ck_button, FALSE, FALSE, 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
Когда вы запустите программу, то получите окно, показанное на рис. 16.8.
Рис. 16.8
Как это работает
Программа создает два виджета типа
GtkEntry
username_entry
password_entry
password_entry
FALSE
GtkButton
clicked
button_clicked
Как только в функции обратного вызова программа извлечет введенный пароль и сравнит его с секретным паролем, на экран выводится соответствующее сообщение.
Обратите внимание на то, что для вставки виджетов в свои контейнеры вы много раз повторили операторы
gtk_box_pack_start
GtkSpinButton
Порой вам нужно, чтобы пользователь ввел числовое значение, например, максимальную скорость или размер инструмента, и в такой ситуации виджет
GtkSpinButton