C语言GUI程序设计-GTK图文系列-输入部件
这一讲讲解GTK中的输入部件,输入部件包括文本输入,数值选择,以及文本列表选择。这里将选择部件作为输入部件看待,GUI设计原则就是能让用户选的东西绝不要让用户输入,输入增加了操作的繁琐型及增大了系统的出错可能(用户输入未预期的值)。效果图:
#include <gtk/gtk.h>
void get_name_click(GtkButton *button,gpointer user_data)
{
guint16 length = 0;
const gchar *name;
length = gtk_entry_get_text_length(user_data);
if(length)
{
name = gtk_entry_get_text(user_data);
g_print("input name is: %s\n", name);
}
else
{
g_print("input empty!\n");
}
}
void search_click(GtkButton *button,gpointer user_data)
{
const gchar *keyword = gtk_entry_get_text(user_data);
g_print("input word is: %s\n", keyword);
}
void cb_text_select(GtkComboBox *widget,gpointer user_data)
{
gchar *value = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widget));
g_print("you selected value is: %s\n", value);
}
int main(int argc,char *argv[ ])
{
GtkWidget *window,*fixed;
GtkWidget *entry_name,*label_name,*button_name;
GtkWidget *entry_search,*label_search,*button_search;
GtkWidget *mult_text;
GtkWidget *scale,*spinner;
GtkWidget *label_select,*cb_text;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"hello fishc - for input");
gtk_widget_set_size_request(GTK_WIDGET(window),300,300);
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), fixed);
label_name = gtk_label_new("Name: ");
entry_name = gtk_entry_new();
button_name = gtk_button_new_with_label("get name");
g_signal_connect(GTK_WIDGET(button_name), "clicked", G_CALLBACK(get_name_click), entry_name);
gtk_fixed_put(GTK_FIXED(fixed), label_name, 5,22);
gtk_fixed_put(GTK_FIXED(fixed), entry_name, 50,20);
gtk_fixed_put(GTK_FIXED(fixed), button_name, 220,16);
label_search = gtk_label_new("Search: ");
entry_search = gtk_search_entry_new();
button_search = gtk_button_new_with_label("search");
g_signal_connect(GTK_WIDGET(button_search), "clicked", G_CALLBACK(search_click), entry_search);
gtk_entry_set_icon_from_stock(GTK_ENTRY(entry_search), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_FIND);
gtk_fixed_put(GTK_FIXED(fixed), label_search, 5,52);
gtk_fixed_put(GTK_FIXED(fixed), entry_search, 50,50);
gtk_fixed_put(GTK_FIXED(fixed), button_search, 220,46);
mult_text = gtk_text_view_new();
gtk_widget_set_size_request(GTK_WIDGET(mult_text),290,100);
gtk_fixed_put(GTK_FIXED(fixed), mult_text, 5,80);
scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0,100,1);
gtk_widget_set_size_request(GTK_WIDGET(scale),100,1);
gtk_fixed_put(GTK_FIXED(fixed), scale, 5,180);
spinner = gtk_spin_button_new_with_range(0,10,1);
gtk_fixed_put(GTK_FIXED(fixed), spinner, 125,195);
label_select = gtk_label_new("Please select an item: ");
gtk_fixed_put(GTK_FIXED(fixed), label_select, 5,230);
cb_text = gtk_combo_box_text_new();
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cb_text), "aaaaa");
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cb_text), "bbb");
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cb_text), "cccc");
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cb_text), "ffff");
g_signal_connect(GTK_WIDGET(cb_text), "changed", G_CALLBACK(cb_text_select), NULL);
gtk_fixed_put(GTK_FIXED(fixed), cb_text, 150,225);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
其中的GtkScale和GtkSpinButton在按钮部件那一讲说过的,这里就不再赘述。GtkScale和GtkVolumeButton一样的。
GtkEntry
GtkEntry是一个单行文本输入部件,可以用来让用户输入一些字符串数据,如:用户名,密码,这些。
默认输入的文本是明文显示的,如果要输入密码,通过gtk_entry_set_visibility函数设置输入字符以掩码方式显示,这个函数需要两个参数,第一个是GtkEntry部件,第二个是设置是否显示的布尔值参数。通过gtk_entry_get_text_length函数可以获取输入框中字符个数,可以用来判断输入是否为空。
gtk_entry_get_text函数用来获取用户输入的文本信息。
GtkSearchEntry
GtkSearchEntry和GtkEntry是一样的,它“继承”于GtkEntry,不过默认状态下显示一个图标,这个图标通过gtk_entry_set_icon_from_stock函数设置,stock还是之前提到的预定义图标。
gtk_entry_set_icon_from_stock函数有三个参数:
第一个是GtkEntry部件,第二个是图标显示位置,可以为首部显示或尾部显示,其值为枚举:
typedef enum {
GTK_ENTRY_ICON_PRIMARY,
GTK_ENTRY_ICON_SECONDARY
} GtkEntryIconPosition;第三个参数为显示的stockid,是一些定义过的宏,直接拿来用即可。
GtkTextView
GtkTextView也是文本输入框,和GtkEntry的不同之处在于它可以输入多行文本。默认情况下是不现实滚动条的,会自扩展高度,如果要显示滚动条,把它放到可以滚动的布局部件(GtkScrolledWindow)里即可,在前面讲布局部件时提到过。
GtkComboBoxText
GtkComboBoxText是一个简单的只读组合框,比较常用,用来为用户提供一组预期值选择。例如:要输入一个月份,可以把12个月份放入这个部件供用户选择。
gtk_combo_box_text_append_text函数用来为组合框添加文本项,这个函数有两个参数,第一个为组合框部件,第二个为要添加的文本,以追加方式添加到组合框的项列表中。
另外提供gtk_combo_boc_text_insert函数用来插入值,可以插入到项列表的不同位置。通过第二个参数position指定插入在哪个索引项后面。
通过注册 changed 信号来获取组合框选择项改变通知。
这一讲就简单地说这么多,下一讲讲解GTK中的对话框(dialog)。
学习了 窗口编程好麻烦啊 高手啊。Gtk的代码感觉上不如MFC的多。
页:
[1]