组合框 Combo Box@GTK+ 2.0 中文教程连载
2010-12-21 15:05
204 查看
组合框 Combo Box
组合框(combo box)是另一个很简单的构件,实际上它仅仅是其它构件的集合。从用户的观点来说,这个构件是由一个文本输入构件和一个下拉菜单组成的,用户可以从一个预先定义的列表里面选择一个选项,同时,用户也可以直接在文本框里面输入文本。下面是从定义组合框构件的结构里面摘取出来的,从中可以看到组合框构件是由什么构件组合形成的:
struct _GtkCombo { GtkHBox hbox; GtkWidget *entry; GtkWidget *button; GtkWidget *popup; GtkWidget *popwin; GtkWidget *list; ... }; |
用下面的函数创建组合框构件:
GtkWidget *gtk_combo_new( void ); |
构件:
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (combo)->entry), "My String."); |
void gtk_combo_set_popdown_strings( GtkCombo *combo, GList *strings ); |
GLib
的一部分,而GLib是 GTK 的基础。暂时你可以先设置一个GList指针,其值设为 NULL,然后用下面的函数将字符串追加到链表当中:
GList *g_list_append( GList *glist, gpointer data ); |
下面是一段典型的代码,用于创建一个选项列表:
GList *glist = NULL; glist = g_list_append (glist, "String 1"); glist = g_list_append (glist, "String 2"); glist = g_list_append (glist, "String 3"); glist = g_list_append (glist, "String 4"); gtk_combo_set_popdown_strings (GTK_COMBO (combo), glist); /* 现在可以释放glist了,组合框已经复制了一份 */ |
到这里为止,你已经有了一个可以使用的组合框构件了。有几个行为是可以改变的。下面是相关的函数:
void gtk_combo_set_use_arrows( GtkCombo *combo, gboolean val ); void gtk_combo_set_use_arrows_always( GtkCombo *combo, gboolean val ); void gtk_combo_set_case_sensitive( GtkCombo *combo, gboolean val ); |
让用户用上/下方向键改变文本输入构件你的值。这并不会弹出列表框,只是用列表中的下一个列表项替换了文本输入框中的文本(向上则取上一个值,向下则取下
一个值)。这是通过搜索当前项在列表中的位置并选择前一项/下一项来实现的。通常,在一个输入框中方向键是用来改变焦点的(也可以用TAB键)。注意,如
果当前项是列表的最后一项,按向下的方向键会改变焦点的位置(这对当前项为列表的第一项时按向上方向键也适用)。
如果当前值并不在列表中,则 gtk_combo_set_use_arrows() 函数的功能会失效。
同
样地,gtk_combo_set_use_arrows_always()允许使用上/下方向键在下拉列表中选取列表项,但是它在列表项中循环,也就是
当列表项位于第一个表项时按向上方向键,会跳到最后一个,当列表项位于最后一个表项时按向下方向键,会跳到第一个。这样可以完全禁止使用方向键改变焦点。
gtk_combo_set_case_sensitive()
函数 切换 GTK
是否以大小写敏感的方式搜索其中的列表项。这在组合框根据内部文本输入构件中的文本查找列表值时使用。可以将其设置为大小写敏感或不敏感。如果用户同时按
下MOD-1和“Tab”键,组合框构件还可以简单地补全当前输入。MOD-1一般被 xmodmap
工具映射为“Alt”键。注意,一些窗口管理器也要使用这种组合键方式,这将覆盖 GTK 中这个组合键的使用。
注意,我们使用的是组合框构件,它能够为我们从一个下拉列表中选择一个选项。这一点是很直截了当的。大多数时候,你可能很关心怎样从其中的文本输入构件中获取数据。组合框构件内部的文本输入构件可以用GTK_ENTRY (GTK_COMBO (combo)->entry)
访问。一般你想要做的两件主要工作一个是连接到activate信号,当用户按回车键时就能够进行响应,另一个就是读出其中的文本。第一件工作可以用下面的方法实现:
g_signal_connect (G_OBJECT (GTK_COMBO (combo)->entry), "activate", G_CALLBACK (my_callback_function), my_data); |
gchar *gtk_entry_get_text( GtkEntry *entry ); |
gchar *string; string = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (combo)->entry)); |
void gtk_combo_disable_activate( GtkCombo *combo ); |
<<< Previous | Home | Next >>> |
微调按钮 Spin Buttons | Up | 日历 Calendar |
相关文章推荐
- 容器构件 Container Widgets 事件盒 The EventBox@GTK+ 2.0 中文教程连载
- 改进了的 Hello World@GTK+ 2.0 中文教程连载
- 示例程序代码Scribble@GTK+ 2.0 中文教程连载
- 对齐构件 The Alignment widget@GTK+ 2.0 中文教程连载
- 使用套件示例@GTK+ 2.0 中文教程连载 现在我们已经介绍了难的办法,这里介绍怎样用 gtk_item_factory 调用来做。
- 固定容器 Fixed Container@GTK+ 2.0 中文教程连载
- 杂项构件/ 标签 Labels@GTK+ 2.0 中文教程连载
- 布局容器 Layout Container@GTK+ 2.0 中文教程连载
- 编写 GTK 应用程序的技巧 @GTK+ 2.0 中文教程连载
- 杂项构件/箭头 Arrows@GTK+ 2.0 中文教程连载
- 框架 Frames@GTK+ 2.0 中文教程连载
- 超时、IO 和 Idle 函数/超时 Timeouts@GTK+ 2.0 中文教程连载
- 比例框架 Aspect Frames@GTK+ 2.0 中文教程连载
- GTK 的 rc 文件/rc 文件的功能@GTK+ 2.0 中文教程连载
- 进度条 Progress Bars@GTK+ 2.0 中文教程连载(原文编译时73行有误:default:后应加 ;号做空语句)
- 分栏窗口构件 Paned Window Widgets@GTK+ 2.0 中文教程连载
- 按钮构件 /一般按钮 Normal Buttons@GTK+ 2.0 中文教程连载
- 对话框 Dialogs@GTK+ 2.0 中文教程连载
- 视角 Viewports@GTK+ 2.0 中文教程连载
- 开关按钮 Toggle Buttons@GTK+ 2.0 中文教程连载