<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # GTK+ 中的第一個程序 > 原文: [http://zetcode.com/gui/gtk2/firstprograms/](http://zetcode.com/gui/gtk2/firstprograms/) 在 GTK+ 編程教程的這一部分中,我們在 GTK+ 中創建第一個程序。 我們在屏幕上居中放置一個窗口,在標題欄中顯示一個圖標,顯示一個小的工具提示,并為按鈕小部件創建一個助記符。 ## 簡單的例子 我們的第一個示例顯示了一個基本窗口。 `simple.c` ```c #include <gtk/gtk.h> int main(int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_main(); return 0; } ``` 本示例在屏幕上顯示一個基本窗口。 ```c GtkWidget *window; ``` `GtkWidget`是 GTK+ 中所有小部件都派生的基類。 它管理小部件的生命周期,狀態和樣式。 ```c gtk_init(&argc, &argv); ``` `gtk_init()`函數初始化 GTK+ 并解析一些標準命令行選項。 在使用任何其他 GTK+ 函數之前,必須先調用此函數。 ```c window = gtk_window_new(GTK_WINDOW_TOPLEVEL); ``` `gtk_window_new()`函數創建一個新的`GtkWindow`,這是一個可以包含其他窗口小部件的頂層窗口。 窗口類型為`GTK_WINDOW_TOPLEVEL`; 頂層窗口具有標題欄和邊框。 它們由窗口管理器管理。 ```c gtk_widget_show(window); ``` `get_widget_show()`標記要顯示的小部件。 任何未顯示的小部件都不會出現在屏幕上。 ```c g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); ``` `g_signal_connect()`函數將回調函數連接到特定對象的信號。 默認情況下,該窗口不響應`destroy`信號。 我們必須通過將`destroy`信號連接到內置的`gtk_main_quit()`函數來顯式終止應用,該函數會終止應用。 ```c gtk_main(); ``` 該代碼進入 GTK+ 主循環。 從這一點開始,應用就坐下來等待事件發生。 ```c $ gcc -o simple simple.c `pkg-config --libs --cflags gtk+-2.0` ``` 這就是我們編譯示例的方式。 ![Simple](https://img.kancloud.cn/2c/e4/2ce48651f36f8022a6301aa6881101f9_202x226.jpg) 圖:簡單 ## 使窗口居中 如果我們不自己定位窗口,則窗口管理器將為我們定位。 在下一個示例中,我們將窗口居中。 `center.c` ```c #include <gtk/gtk.h> int main(int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Center"); gtk_window_set_default_size(GTK_WINDOW(window), 230, 150); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_widget_show(window); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_main(); return 0; } ``` 在示例中,我們將窗口居中,設置標題,并調整窗口大小。 ```c gtk_window_set_title(GTK_WINDOW(window), "Center"); ``` `gtk_window_set_title()`函數設置窗口標題。 如果我們自己不設置標題,則 GTK+ 將使用源文件的名稱作為標題。 ```c gtk_window_set_default_size(GTK_WINDOW(window), 230, 150); ``` 此`gtk_window_set_default_size()`將窗口的大小設置為`230x150`。 請注意,我們談論的是客戶區域,不包括窗口管理器提供的裝飾。 ```c gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); ``` 將`GTK_WIN_POS_CENTER`常量傳遞給`gtk_window_set_position()`函數,使程序在屏幕上居中。 ## 應用圖標 在下一個示例中,我們顯示應用圖標。 大多數窗口管理器在標題欄的左上角以及任務欄上都顯示圖標。 `icon.c` ```c #include <gtk/gtk.h> GdkPixbuf *create_pixbuf(const gchar * filename) { GdkPixbuf *pixbuf; GError *error = NULL; pixbuf = gdk_pixbuf_new_from_file(filename, &error); if (!pixbuf) { fprintf(stderr, "%s\n", error->message); g_error_free(error); } return pixbuf; } int main(int argc, char *argv[]) { GtkWidget *window; GdkPixbuf *icon; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Icon"); gtk_window_set_default_size(GTK_WINDOW(window), 230, 150); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); icon = create_pixbuf("web.png"); gtk_window_set_icon(GTK_WINDOW(window), icon); gtk_widget_show(window); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_object_unref(icon); gtk_main(); return 0; } ``` 該代碼示例顯示了一個應用圖標。 ```c pixbuf = gdk_pixbuf_new_from_file(filename, &error); ``` `gdk_pixbuf_new_from_file()`函數通過從文件加載圖像來創建新的`pixbuf`。 自動檢測文件格式。 如果返回`NULL`,則將設置錯誤。 ```c if (!pixbuf) { fprintf(stderr, "%s\n", error->message); g_error_free(error); } ``` 如果無法加載該圖標,則會顯示一條錯誤消息。 ```c icon = create_pixbuf("web.png"); gtk_window_set_icon(GTK_WINDOW(window), icon); ``` `gtk_window_set_icon()`顯示窗口的圖標。 `create_pixbuf()`從 PNG 文件創建`GdkPixbuf`。 ```c g_object_unref(icon); ``` `g_object_unref()`減少 pixbuf 對象的引用計數。 當其引用計數降至 0 時,該對象將被終結(即釋放其內存)。 ![Icon](https://img.kancloud.cn/da/07/da075a570004319c6962ea143f1c51ca_232x176.jpg) 圖:圖標 ## 工具提示 工具提示是一個小的矩形窗口,它提供有關對象的簡短信息。 它通常是一個 GUI 組件。 它是應用幫助系統的一部分。 `tooltip.c` ```c #include <gtk/gtk.h> int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *button; GtkWidget *halign; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Tooltip"); gtk_window_set_default_size(GTK_WINDOW(window), 300, 200); gtk_container_set_border_width(GTK_CONTAINER(window), 15); button = gtk_button_new_with_label("Button"); gtk_widget_set_tooltip_text(button, "Button widget"); halign = gtk_alignment_new(0, 0, 0, 0); gtk_container_add(GTK_CONTAINER(halign), button); gtk_container_add(GTK_CONTAINER(window), halign); gtk_widget_show_all(window); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_main(); return 0; } ``` 該示例顯示了按鈕小部件上的基本工具提示。 ```c gtk_container_set_border_width(GTK_CONTAINER(window), 15); ``` `gtk_container_set_border_width()`在窗口邊緣周圍設置一些邊框空間。 ```c gtk_widget_set_tooltip_text(button, "Button widget"); ``` `gtk_widget_set_tooltip_text()`設置給定窗口小部件的基本工具提示。 ```c halign = gtk_alignment_new(0, 0, 0, 0); gtk_container_add(GTK_CONTAINER(halign), button); ``` `GtkAlignment`是一個基本容器,可用于將其子控件與窗口的側面對齊。 在我們的例子中,該按鈕位于窗口的左上角。 該函數的第一個參數是`xalign`和`yalign`。 `xalign`的值為 0 表示左對齊; `yalign`的值為 0 表示頂部對齊。 第三和第四參數是縮放值。 將兩個參數都傳遞 0 表示小部件不會在兩個方向上展開。 ```c gtk_container_add(GTK_CONTAINER(window), halign); ``` `GtkAlignment`被設置為窗口的主要容器。 ```c gtk_widget_show_all(window); ``` 當我們處理多個窗口小部件時,在容器上調用`gtk_widget_show_all()`比單獨顯示所有窗口小部件容易。 在我們的例子中,窗口和按鈕都顯示在一個鏡頭中。 ![Tooltip](https://img.kancloud.cn/72/db/72dbcbed1422dd5ef3d0a41b69cab7ab_302x226.jpg) 圖:工具提示 ## 助記符 助記符是用于激活支持助記符的窗口小部件的快捷鍵。 它們可以與標簽,按鈕或菜單項一起使用。 助記符是通過在小部件的標簽上添加字符來創建的。 它使下一個字符成為助記符。 字符與無鼠標修飾符(通常為 `Alt` )結合在一起。 選擇的字符帶有下劃線,但是可以以平臺特定的方式強調。 在某些平臺上,僅在按下無鼠標修飾符后才對字符加下劃線。 `mnemonic.c` ```c #include <gtk/gtk.h> void print_msg(GtkWidget *widget, gpointer window) { g_printf("Button clicked\n"); } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *button; GtkWidget *halign; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Mnemonic"); gtk_window_set_default_size(GTK_WINDOW(window), 300, 200); gtk_container_set_border_width(GTK_CONTAINER(window), 15); button = gtk_button_new_with_mnemonic("_Button"); g_signal_connect(button, "clicked", G_CALLBACK(print_msg), NULL); halign = gtk_alignment_new(0, 0, 0, 0); gtk_container_add(GTK_CONTAINER(halign), button); gtk_container_add(GTK_CONTAINER(window), halign); gtk_widget_show_all(window); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_main(); return 0; } ``` 我們為按鈕小部件設置了助記符。 可以使用 `Alt + B` 鍵盤快捷鍵激活。 ```c button = gtk_button_new_with_mnemonic("_Button"); ``` `gtk_button_new_with_mnemonic()`函數創建一個包含標簽的新`GtkButton`。 如果標簽中的字符前面帶有下劃線,則會在其下劃線。 ```c g_signal_connect(button, "clicked", G_CALLBACK(print_msg), NULL); ``` 當我們觸發按鈕時,一條消息會打印到控制臺上。 通過`g_signal_connect()`函數,我們將`clicked`信號連接到`print_msg`函數。 目前,有三種激活按鈕的方式:單擊鼠標左鍵, `Alt + B` 快捷方式以及`空格鍵` 按鈕具有焦點)。 ![Mnemonic](https://img.kancloud.cn/02/3a/023a8bec36fc8f35975821f601f2690d_302x226.jpg) 圖:助記符 在本章中,我們創建了一些簡單的 GTK+ 程序。
                  <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>

                              哎呀哎呀视频在线观看