文本输入构件 (二)
一、用glade设计界面 1、新建glade工程 2、放置各种构件:新建window构件(window1),在window1上放置固定容器构件(fixed positions),在固定容器构件上放置文本输入构件(entry1)。 3、为文本输入构件entry1添加changed信号响应(其它程序设计语言中为事件响应)on_entry1_changed,一定注意在signals选项卡中把object设置为entry1。 4、单击Build按钮生成源代码。 二、添加代码 只需在callbacks.c中添加三行代码 Callbacks.c void on_entry1_changed (GtkEditable *editable, gpointer user_data) { const gchar *text1; text1 = gtk_entry_get_text(GTK_ENTRY(editable)); printf("text entry : %s/n",text1); } 三、运行程序 在编译程序之前,在devcpp中设置工程属性为“win32控制台程序” 步骤:1、单击“工程”菜单下的“工程属性”子菜单。 2、在“普通”选项卡中的“类型”中单击“win32控制台程序”。 3、单击“确定”。 编译、运行程序,在文本输入框内随变输入几个英文字母,看看运行效果。
注:在linux下,操作很简单,点击 glade 的 build 就会自动产生代码,然后运行改目录下的autogen.sh运行make ,就会在
src 目录下产生可执行的程序. 组合框构件的常用函数: 新建组合框构件: comboboxentry1 = gtk_combo_box_entry_new_text (); 给组合框构件的下拉列表添加一个新的项目: gtk_combo_box_append_text (GTK_COMBO_BOX (comboboxentry1), _("one")); 读取组合构件里的文本内容: text1 = gtk_combo_box_get_active_text(combobox); 例子: 一、用Glade设计界面 步骤:1、新建Glade工程 2、依次放置window构件(大小:400,300)、fixed positions(固定容器)构件、comboboxentry(组合框)构件。 3、在属性面板中,设置comboboxentry1的Item属性为:one (按回车)、two (按回车)、three (按回车)、 4、为comboboxentry1构件添加changed信号响应(注意:object后的文本框里填写comboboxentry1)。 5、保存项目,生成代码。 二、编写代码 编写代码以前,参照上节内容,设置工程属性为“win32控制台程序”。 callbacks.h void on_comboboxentry1_changed (GtkComboBox *combobox, gpointer user_data); callbacks.c void on_comboboxentry1_changed (GtkComboBox *combobox, gpointer user_data) { gchar *text1; text1 = gtk_combo_box_get_active_text(combobox); printf("The combo text is : %s /n",text1); } 三、运行程序,观看运行效果 开关按钮(toggle button)构件 常用函数: 创建一个新的开关按钮构件 GtkWidget *togglebutton1; togglebutton1 = gtk_toggle_button_new(); togglebutton1 = gtk_toggle_button_new_with_label(“toggle button”); togglebutton1 = gtk_toggle_button_new_with_mnemonic(“toggle button”); 读取开关按钮的状态 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)) 设置开关按钮的状态 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE) 例子: 一、设计界面 步骤:1、新建Glade工程 2、依次放置window构件(大小:300,200)、fixed positions(固定容器)构件、toggle button(开关按钮)构件。 3、在属性面板中,设置togglebutton1的 label 属性为“开关按钮” 。 4、为togglebutton1构件添加clicked信号响应(注意:object后的文本框里填写togglebutton1)。 5、保存项目,生成代码。 二、编写代码 运行以前,设置工程属性为“win32控制台程序”。 callbacks.c void on_togglebutton1_clicked (GtkButton *button, gpointer user_data) { if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) { printf("toggle button is on /n"); } else { printf("toggle button is off /n"); } } 三、运行调试 单选按钮Radio Buttons构件 单选按钮构件的常用函数: 创建单选按钮构件的代码: /*以下代码节选自interface.c*/ /*定义构件*/] GtkWidget *radiobutton1; GSList *radiobutton1_group = NULL; GtkWidget *radiobutton2; GtkWidget *radiobutton3; /* 创建构件的步骤,先定义一个radiobutton构件, 再把这个radiobutton构件添加到组(radiobutton1_group)中, 这样,所有的radiobutton构件才能关联成一个整体。*/ (注:该文写的不详细,应该是:1.创建一个radiobutton1. 2.在 radiobutton1的属性栏中的最下方有个 编组 项,选择 radiobutton1. 3.创建新的radiobutton,按照上面操作,加入 radiobutton1. ) radiobutton1 = gtk_radio_button_new_with_mnemonic (NULL, _("radiobutton1")); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton1), radiobutton1_group); radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton1)); radiobutton2 = gtk_radio_button_new_with_mnemonic (NULL, _("radiobutton2")); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton2), radiobutton1_group); radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton2)); radiobutton3 = gtk_radio_button_new_with_mnemonic (NULL, _("radiobutton3")); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton3), radiobutton1_group); radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton3)); 判断单选按钮构件状态的函数(同开关按钮): gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton1)) 一、用Glade设计界面 步骤:1、新建glade工程 2、依此放置 窗口(400,300)、固定位置、三个单选按钮构件。 3、为三个单选按钮构件,分别添加toggled信号响应,object后分别填写:radiobutton1,radiobutton2,radiobutton3。 4、保存工程,并生成代码。 二、修改代码 Interface.c g_signal_connect_swapped ((gpointer) radiobutton1, "toggled", G_CALLBACK (on_radiobutton1_toggled), GTK_OBJECT (radiobutton1)); g_signal_connect_swapped ((gpointer) radiobutton2, "toggled", G_CALLBACK (on_radiobutton2_toggled), GTK_OBJECT (radiobutton2)); g_signal_connect_swapped ((gpointer) radiobutton3, "toggled", G_CALLBACK (on_radiobutton3_toggled), GTK_OBJECT (radiobutton3)); Callbacks.h void on_radiobutton1_toggled (GtkToggleButton *radiobutton1, gpointer user_data); void on_radiobutton2_toggled (GtkToggleButton *radiobutton2, gpointer user_data); void on_radiobutton3_toggled (GtkToggleButton *radiobutton3, gpointer user_data); Callbacks.c void on_radiobutton1_toggled (GtkToggleButton *radiobutton1, gpointer user_data) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton1))) { printf("radiobutton1 is True/n"); } } void on_radiobutton2_toggled (GtkToggleButton *radiobutton2, gpointer user_data) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton2))) { printf("radiobutton2 is True/n"); } } void on_radiobutton3_toggled (GtkToggleButton *radiobutton3, gpointer user_data) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton3))) { printf("radiobutton3 is True/n"); } }