文本输入构件 Text Entries@GTK+ 2.0 中文教程连载

文本输入构件 Text Entries

文本输入构件(Entry widget)允许在一个单行文本框里输入和显示一行文本。文本可以用函数进行操作,如将新的文本替换、前插、追加到文本输入构件的当前内容中。

用下面的函数创建一个文本输入构件:

GtkWidget *gtk_entry_new( void );

下面的函数改变文本输入构件当前的文本内容。

void gtk_entry_set_text( GtkEntry    *entry,
const gchar *text );

gtk_entry_set_text() 函数用新的内容(contents)取代文本输入构件当前的内容。你可以注意到文本输入构件的类(class Entry)体现了可编辑的接口(Editable interface)(是的,gobject提供了类似Java的接口),它包含更多的函数来操作内容。

文本输入构件的内容可以用下面的函数获取。这在下面介绍的回调函数中是很有用的。

const gchar *gtk_entry_get_text( GtkEntry *entry );

这个函数返回的值在其内部被使用,不要用free()或g_free()释放它。

如果我们不想用户通过输入文字改变文本输入构件的内容,我们可以改变它的可编辑状态。

void gtk_editable_set_editable( GtkEditable *entry,
gboolean editable );

上面的函数可以让我们通过传递一个TRUE或 FALSE 值作为editable 参数来改变文本输入构件的可编辑状态。

如果想让文本输入构件输入的文本不回显(比如用于接收口令),可以使用下面的函数,它也是取一个布尔值作为参数

void gtk_entry_set_visibility( GtkEntry *entry,
gboolean visible );

文本你的某一部分可以用下面的函数设置为被选中。这个常在为文本输入构件设置了一个缺省值时使用,以方便用户删除它。

void gtk_editable_select_region( GtkEditable *entry,
gint start,
gint end );

如果我们想在用户输入文本时进行响应,可以为activatechanged 信号设置回调函数。当用户在文本输入构件内部按回车键时引发Activate信号;在每次文本输入构件的文本发生变化时引发Changed信号,比如,每输入或删除一个字符。

下面的代码是一个使用文本输入构件的示例。

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

void enter_callback( GtkWidget *widget,
GtkWidget *entry )
{
const gchar *entry_text;
entry_text = gtk_entry_get_text (GTK_ENTRY (entry));
printf("Entry contents: %s/n", entry_text);
}

void entry_toggle_editable( GtkWidget *checkbutton,
GtkWidget *entry )
{
gtk_editable_set_editable (GTK_EDITABLE (entry),
GTK_TOGGLE_BUTTON (checkbutton)->active);
}

void entry_toggle_visibility( GtkWidget *checkbutton,
GtkWidget *entry )
{
gtk_entry_set_visibility (GTK_ENTRY (entry),
GTK_TOGGLE_BUTTON (checkbutton)->active);
}

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

GtkWidget *window;
GtkWidget *vbox, *hbox;
GtkWidget *entry;
GtkWidget *button;
GtkWidget *check;
gint tmp_pos;

gtk_init (&argc, &argv);

/* 创建一个新窗口 */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request (GTK_WIDGET (window), 200, 100);
gtk_window_set_title (GTK_WINDOW (window), "GTK Entry");
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (gtk_main_quit), NULL);
g_signal_connect_swapped (G_OBJECT (window), "delete_event",
G_CALLBACK (gtk_widget_destroy),
window);

vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show (vbox);

entry = gtk_entry_new ();
gtk_entry_set_max_length (GTK_ENTRY (entry), 50);
g_signal_connect (G_OBJECT (entry), "activate",
G_CALLBACK (enter_callback),
entry);
gtk_entry_set_text (GTK_ENTRY (entry), "hello");
tmp_pos = GTK_ENTRY (entry)->text_length;
gtk_editable_insert_text (GTK_EDITABLE (entry), " world", -1, &tmp_pos);
gtk_editable_select_region (GTK_EDITABLE (entry),
0, GTK_ENTRY (entry)->text_length);
gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);
gtk_widget_show (entry);

hbox = gtk_hbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (vbox), hbox);
gtk_widget_show (hbox);

check = gtk_check_button_new_with_label ("Editable");
gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (check), "toggled",
G_CALLBACK (entry_toggle_editable), entry);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
gtk_widget_show (check);

check = gtk_check_button_new_with_label ("Visible");
gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (check), "toggled",
G_CALLBACK (entry_toggle_visibility), entry);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
gtk_widget_show (check);

button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
g_signal_connect_swapped (G_OBJECT (button), "clicked",
G_CALLBACK (gtk_widget_destroy),
window);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_widget_grab_default (button);
gtk_widget_show (button);

gtk_widget_show (window);

gtk_main();

return 0;
}

<<< Previous Home Next >>>
状态栏 StatusbarsUp 微调按钮 Spin Buttons
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值