白浪 发表于 2013-9-19 17:11:59

2.5 录入控件

录入构件(GtkEntry)是单行录入字段,用它来录入和显示正文信息。录入构件由可编辑构件派生而来,
它是更复杂的正文构件的简化形式。录入构件比按钮构件或标号构件复杂。与按钮构件或标号构件相比,
它具有更多的功能。
可以用gtk_entry_new函数或者gtk_entry_new_with_max_length函数建立录入构件.其中函数
gtk_entry_new_with_max_length能够设置录入到构件中的最长的字符数。


以下代码可以生成如图所示的界面
<P> #include <gtk/gtk.h></P>
<P>void button_toggled(GtkWidget *widget,gpointer *data)
{
    //在终端中打印
    if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget))==TRUE)
    g_printf("button checked!!!\n");
    else
    g_printf("button unchecked!!!\n");
}</P>
<P>int main (void)
{
    GtkWidget *window = NULL;
    GtkWidget *entry = NULL;
    // 初始化 GTK
    gtk_init(NULL, NULL);
    // 建立一個新的 GtkWindow
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);</P>
<P>    entry = gtk_entry_new();
    // 設置標題
    gtk_window_set_title (GTK_WINDOW (window), "Window");
    // 設置默認大小
    gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
    //将button放置到window容器中
    gtk_container_add(GTK_CONTAINER(window),entry);
    // 處理 "destroy" 信號,當窗口被關閉時退出程序
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    // 顯示窗口和所有子組件
    gtk_widget_show_all (window);
    // 開始事件循環
    gtk_main ();
    // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
    return 0;
}</P>
<P> </P>


如图所示,点一下button就可以将entry的内容显示到label里面去了#include <gtk/gtk.h>

GtkWidget *entry = NULL;
GtkWidget *label2 = NULL;

void button_on_clicked(GtkWidget *widget,gpointer *data)
{
const gchar *text;
text = (gchar *)malloc(sizeof(gchar));
text = gtk_entry_get_text(GTK_ENTRY(entry));//获取entry的内容
gtk_label_set_text(GTK_LABEL(label2),text);//设置label的内容
}

int main (void)
{
GtkWidget *window = NULL;

GtkWidget *label1 = NULL;
GtkWidget *button = NULL;
GtkWidget *fixed = NULL;
// 初始化 GTK
gtk_init(NULL, NULL);
// 建立一個新的 GtkWindow
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

entry = gtk_entry_new();
fixed = gtk_fixed_new();
label1 = gtk_label_new ("input:");
label2 = gtk_label_new (" ");

//建立一个新的button
button = gtk_button_new_with_label ("button");

gtk_fixed_put(GTK_FIXED(fixed),label1,20,20);
gtk_fixed_put(GTK_FIXED(fixed),entry,80,20);
gtk_fixed_put(GTK_FIXED(fixed),button,20,60);
gtk_fixed_put(GTK_FIXED(fixed),label2,20,90);

// 設置標題
gtk_window_set_title (GTK_WINDOW (window), "Window");
// 設置默認大小
gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
//将button放置到window容器中
gtk_container_add(GTK_CONTAINER(window),fixed);
// 處理 "destroy" 信號,當窗口被關閉時退出程序
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
g_signal_connect (button, "pressed", G_CALLBACK (button_on_clicked), NULL);
// 顯示窗口和所有子組件
gtk_widget_show_all (window);
// 開始事件循環
gtk_main ();
// gtk_main_quit 會導致 gtk_main 退出,於是程序結束
return 0;
}

白浪 发表于 2013-9-19 17:13:10

Entry获取不到焦点,还有就是点击了button之后 entry就再也获取不到焦点了,有知道的TX说一下哈

白浪 发表于 2013-9-19 17:13:17

占楼

qzuser 发表于 2015-5-26 12:12:00

qzuser 发表于 2015-5-28 07:16:54

页: [1]
查看完整版本: 2.5 录入控件