- テキスト入力欄に入力した文字列を label に反映する
- ボタンをクリックすると button_click() が呼び出され、その中で entry に書き込まれた文字列を gtk_entry_get_text() で読み出し、label に gtk_label_set_text() で反映する
Example: entry.c
#include <gtk/gtk.h>
typedef struct main_dialog_type {
GtkWidget *window;
GtkWidget *button;
GtkWidget *table;
GtkWidget *entry;
GtkWidget *label;
} MainDialog;
/* ボタンがクリックされたら entry に入力された文字列を読み込み label を更新する */
void button_click(GtkWidget *widget, gpointer data)
{
const gchar *text;
char buf[256];
text = gtk_entry_get_text(GTK_ENTRY(((MainDialog*)data)->entry));
sprintf(buf, "%s", text);
gtk_label_set_text(GTK_LABEL(((MainDialog*)data)->label), buf);
}
int main(int argc, char **argv)
{
MainDialog dialog;
gtk_init(&argc, &argv);
dialog.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(dialog.window), "GtkEntry");
gtk_window_set_position(GTK_WINDOW(dialog.window), GTK_WIN_POS_CENTER);
/* table を作成し、各要素を table 上に配置する */
/* 0 1 2
* 0+----------+----------+
* | | |
* 1+----------+----------+
* | | |
* 2+----------+----------+
*/
/* gtk_table_attach_defaults(*table, *child, left_attach, right_attach, top_attach, bottom_attach); */
dialog.table = gtk_table_new(2, 2, TRUE);
gtk_container_add(GTK_CONTAINER(dialog.window), dialog.table);
/* entry を下記の場所に配置する */
/* 0 1 2
* 0+----------+----------+
* | XXXX | |
* 1+----------+----------+
* | | |
* 2+----------+----------+
*/
dialog.entry = gtk_entry_new();
gtk_table_attach_defaults(GTK_TABLE(dialog.table), dialog.entry, 0, 1, 0, 1);
/* label を下記の場所に配置する */
/* 0 1 2
* 0+----------+----------+
* | | XXXX |
* 1+----------+----------+
* | | |
* 2+----------+----------+
*/
dialog.label = gtk_label_new("blank");
gtk_table_attach_defaults(GTK_TABLE(dialog.table), dialog.label, 1, 2, 0, 1);
/* button を下記の場所に配置する */
/* 0 1 2
* 0+----------+----------+
* | | |
* 1+----------+----------+
* | XXXXXXXXXXXXXXX |
* 2+----------+----------+
*/
dialog.button = gtk_button_new_with_label("Enter");
gtk_table_attach_defaults(GTK_TABLE(dialog.table), dialog.button, 0, 2, 1, 2);
g_signal_connect(dialog.button, "clicked", G_CALLBACK(button_click), &dialog);
gtk_widget_show_all(dialog.window);
g_signal_connect_swapped(G_OBJECT(dialog.window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
return 0;
}
実行結果
0 件のコメント:
コメントを投稿