<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 狀態欄 Statusbars 狀態欄(Statusbars)是一些簡單的構件,一般用來顯示文本消息。它將文本消息壓入到一個棧里面,當彈出當前消息時,將重新顯示前一條文本消息。看下面具體的代碼實現: ![](https://box.kancloud.cn/2016-08-24_57bd779869703.jpg) ~~~ /*File:statusbar.c *Date:2013-12-22 *Author:sjin *Mail:413977243@qq.com */ #include <gtk/gtk.h> #include <stdlib.h> #include <glib.h> GtkWidget *status_bar; void push_item(GtkWidget *widget,gpointer data) { static int count = 1; char buf[20] = {'\0'}; g_snprintf(buf,20,"Item %d",count++); //將新消息加到狀態欄 gtk_statusbar_push(GTK_STATUSBAR(status_bar),GPOINTER_TO_INT(data),buf); return; } void pop_item(GtkWidget *widget,gpointer data) { //刪除在棧中給定上下文標識符最上面的一個消息 gtk_statusbar_pop(GTK_STATUSBAR(status_bar),GPOINTER_TO_INT(data)); return; } int main(int argc, char*argv[]) { GtkWidget *window; GtkWidget *button; GtkWidget *vbox; gint context_id; //初始化GTK gtk_init(&argc,&argv); //創建最上層主窗口 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //連接信號"delete_event",使得窗口關閉時發生 g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL); //設置窗口標題 gtk_window_set_title(GTK_WINDOW(window),"GTK 狀態欄工具"); //設定窗口的默認寬高 //gtk_window_set_default_size(GTK_WINDOW(window),200,300); //設定窗口的位置,讓窗口總在最前端 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); //設定容器邊框的寬度 gtk_container_set_border_width(GTK_CONTAINER(window),20); vbox = gtk_vbox_new(FALSE,1); gtk_container_add(GTK_CONTAINER(window),vbox); gtk_widget_show(vbox); //創建一個狀態欄 status_bar = gtk_statusbar_new(); gtk_box_pack_start(GTK_BOX(vbox),status_bar,TRUE,TRUE,0); gtk_widget_show(status_bar); //獲得上下文的標識符 context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(status_bar),"Statusbar example"); button = gtk_button_new_with_label("push_item"); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(push_item),GINT_TO_POINTER(context_id)); gtk_box_pack_start(GTK_BOX(vbox),button,TRUE,TRUE,2); gtk_widget_show(button); button = gtk_button_new_with_label("pop last item"); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(pop_item),GINT_TO_POINTER(context_id)); gtk_box_pack_start(GTK_BOX(vbox),button,TRUE,TRUE,2); gtk_widget_show(button); gtk_widget_show_all(window); gtk_main(); return FALSE; } ~~~ ### 文本輸入構件 Text Entries 文本輸入構件(Entry widget)允許在一個單行文本框里輸入和顯示一行文本。文本可以用函數進行操作,如將新的文本替換、前插、追加到文本輸入構件的當前內容中。 ![](https://box.kancloud.cn/2016-08-24_57bd7798801bb.jpg) ~~~ /*File:text_entry.c *Date:2013-12-28 *Author:sjin *Mail:413977243@qq.com */ #include<gtk/gtk.h> #include <stdio.h> #include <stdlib.h> static GtkWidget* entry1; static GtkWidget* entry2; void on_button_clicked (GtkWidget* button,gpointer data) { /*void gtk_entry_set_text(Gtk_Entry *entry,const gchr *text) * 將新的內容取代文本輸入構件當前的內容。 *const gchar *gtk_entry_get_text(GtkEntry *entry) * 獲得當前文本輸入構件的內容 */ if((int)data == 1){ gtk_entry_set_text(GTK_ENTRY(entry1),""); gtk_entry_set_text(GTK_ENTRY(entry2),""); } else if ((int)data == 2){ const gchar* username = gtk_entry_get_text(GTK_ENTRY(entry1)); const gchar* password = gtk_entry_get_text(GTK_ENTRY(entry2)); g_print("用戶名是:%s",username); g_print("\n"); g_print("密碼是:%s\n",password); } else if((int)data == 3){ /*改變文本空的可編輯狀態*/ gtk_editable_set_editable(GTK_EDITABLE(entry1),GTK_TOGGLE_BUTTON(button)->active); gtk_editable_set_editable(GTK_EDITABLE(entry2),GTK_TOGGLE_BUTTON(button)->active); } } int main(int argc,char* argv[]) { GtkWidget* window; GtkWidget* box; GtkWidget* box1; GtkWidget* box2; GtkWidget* box3; GtkWidget* label1; GtkWidget* label2; GtkWidget* button; GtkWidget* sep; //初始化 gtk_init(&argc,&argv); //設置窗口 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL); gtk_window_set_title(GTK_WINDOW(window),"登錄窗口"); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(window),20); box = gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(window),box); box1 = gtk_hbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(box),box1,FALSE,FALSE,5); box2 = gtk_hbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(box),box2,FALSE,FALSE,5); sep = gtk_hseparator_new();//分割線 gtk_box_pack_start(GTK_BOX(box),sep,FALSE,FALSE,5); box3 = gtk_hbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(box),box3,TRUE,TRUE,5); label1 = gtk_label_new("用戶名:"); entry1 = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(box1),label1,FALSE,FALSE,5); gtk_box_pack_start(GTK_BOX(box1),entry1,FALSE,FALSE,5); label2 = gtk_label_new("密 碼:"); entry2 = gtk_entry_new(); /*設置輸入文本不可見*/ gtk_entry_set_visibility(GTK_ENTRY(entry2),FALSE); gtk_box_pack_start(GTK_BOX(box2),label2,FALSE,FALSE,5); gtk_box_pack_start(GTK_BOX(box2),entry2,FALSE,FALSE,5); button = gtk_check_button_new_with_label("Editable"); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)3); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),TRUE); gtk_box_pack_start(GTK_BOX(box3),button,TRUE,TRUE,10); gtk_widget_show(button); button = gtk_button_new_with_label("清空"); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)1); gtk_box_pack_start(GTK_BOX(box3),button,TRUE,TRUE,10); gtk_widget_show(button); button = gtk_button_new_with_label("確認"); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)2); g_signal_connect_swapped(G_OBJECT(button),"clicked",G_CALLBACK(gtk_widget_destroy),window); gtk_box_pack_start(GTK_BOX(box3),button,TRUE,TRUE,5); gtk_widget_show(button); gtk_widget_show_all(window); gtk_main(); return FALSE; } ~~~ ### 組合框 Combo Box 組合框(combo box)是另一個很簡單的構件,實際上它僅僅是其它構件的集合。從用戶的觀點來說,這個構件是由一個文本輸入構件和一個下拉菜單組成的,用戶可以從一個預先定義的列表里面選擇一個選項,同時,用戶也可以直接在文本框里面輸入文本. ![](https://box.kancloud.cn/2016-08-24_57bd7799478b4.jpg) ~~~ #include <gtk/gtk.h> void callback(GtkWidget *button,gpointer data) { printf("組合框發生改變\n"); if((int)data == 1){ gchar *ptr = gtk_entry_get_text(GTK_ENTRY(button)); printf("組合框A發生改變,內容是:%s\n",ptr); }else if((int)data == 2) { gchar *ptr = gtk_entry_get_text(GTK_ENTRY(button)); printf("組合框A發生改變,內容是:%s\n",ptr); } } GtkWidget *create_item (gint i) { GtkWidget *item; GtkWidget *label; GtkWidget *hbox; GtkWidget *image; hbox = gtk_hbox_new(FALSE,0); switch(i){ case 1: image = gtk_image_new_from_stock(GTK_STOCK_YES,GTK_ICON_SIZE_MENU); label = gtk_label_new("列表項一"); break; case 2: image = gtk_image_new_from_stock(GTK_STOCK_NO,GTK_ICON_SIZE_MENU); label = gtk_label_new("列表項二"); break; case 3: image = gtk_image_new_from_stock(GTK_STOCK_HELP,GTK_ICON_SIZE_MENU); label = gtk_label_new("列表項三"); break; case 4: image = gtk_image_new_from_stock(GTK_STOCK_OK,GTK_ICON_SIZE_MENU); label = gtk_label_new("列表項四"); break; case 5: image = gtk_image_new_from_stock(GTK_STOCK_CANCEL,GTK_ICON_SIZE_MENU); label = gtk_label_new("列表項五"); break; } gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,2); gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,2); item = gtk_list_item_new(); gtk_container_add(GTK_CONTAINER(item),hbox); gtk_widget_show_all(item); return item; } int main(int argc,char* argv[]) { GtkWidget *window; GtkWidget *combo; GtkWidget *label; GtkWidget *vbox; GList *items = NULL; GtkWidget *item; items =g_list_append(items,"列表項A"); items =g_list_append(items,"列表項B"); items =g_list_append(items,"列表項C"); items =g_list_append(items,"列表項D"); items =g_list_append(items,"列表項E"); gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL); gtk_window_set_title(GTK_WINDOW(window),"下拉列表框"); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(window),20); vbox = gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(window),vbox); label = gtk_label_new("組合框A"); gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,5); combo = gtk_combo_new(); gtk_box_pack_start(GTK_BOX(vbox),combo,FALSE,FALSE,5); gtk_combo_set_popdown_strings(GTK_COMBO(combo),items); g_signal_connect(G_OBJECT(GTK_COMBO(combo)->entry),"changed",G_CALLBACK(callback),(gpointer)1); /************另一種創建的方式****************/ label = gtk_label_new("組合框B"); gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,5); combo = gtk_combo_new(); gtk_box_pack_start(GTK_BOX(vbox),combo,FALSE,FALSE,5); item = create_item(1); gtk_combo_set_item_string(GTK_COMBO(combo),GTK_ITEM(item),"項目一"); gtk_container_add(GTK_CONTAINER(GTK_COMBO(combo)->list),item); item = create_item(2); gtk_combo_set_item_string(GTK_COMBO(combo),GTK_ITEM(item),"項目二"); gtk_container_add(GTK_CONTAINER(GTK_COMBO(combo)->list),item); item = create_item(3); gtk_combo_set_item_string(GTK_COMBO(combo),GTK_ITEM(item),"項目三"); gtk_container_add(GTK_CONTAINER(GTK_COMBO(combo)->list),item); item = create_item(4); gtk_combo_set_item_string(GTK_COMBO(combo),GTK_ITEM(item),"項目四"); gtk_container_add(GTK_CONTAINER(GTK_COMBO(combo)->list),item); item = create_item(5); gtk_combo_set_item_string(GTK_COMBO(combo),GTK_ITEM(item),"項目五"); gtk_container_add(GTK_CONTAINER(GTK_COMBO(combo)->list),item); g_signal_connect(G_OBJECT(GTK_COMBO(combo)->entry),"changed",G_CALLBACK(callback),(gpointer)2); gtk_widget_show_all(window); gtk_main(); return FALSE; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看