1. 程式人生 > >GTK3學習筆記2 Hello World in GTK+

GTK3學習筆記2 Hello World in GTK+

例子很簡單,實現了視窗和一個普通按鈕,效果如圖:


原始碼如下,有很簡單的英文註釋,容易看懂,就不翻譯了:

#include <gtk/gtk.h>

/* 下面是兩個回撥函式 */

static void print_hello (GtkWidget *widget,
                         gpointer   data)
{
    g_print ("Hello World\n");
}

static gboolean on_delete_event (GtkWidget *widget,
                                 GdkEvent  *event,
                                 gpointer   data)
{
    /* If you return FALSE in the "delete_event" signal handler,
     * GTK will emit the "destroy" signal. Returning TRUE means
     * you don't want the window to be destroyed.
     *
     * This is useful for popping up 'are you sure you want to quit?'
     * type dialogs.
     */

    g_print ("delete event occurred\n");

    return TRUE;
}

int main (int argc, char *argv[])
{
    /* GtkWidget is the storage type for widgets */
    GtkWidget *window;
    GtkWidget *button;

    /* This is called in all GTK applications. Arguments are parsed
     * from the command line and are returned to the application.
     */
    gtk_init (&argc, &argv);

    /* create a new window, and set its title */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "Hello");

    /* When the window emits the "delete-event" signal (which is emitted
     * by GTK+ in response to an event coming from the window manager,
     * usually as a result of clicking the "close" window control), we
     * ask it to call the on_delete_event() function as defined above.
     *
     * The data passed to the callback function is NULL and is ignored
     * in the callback function.
     */
    g_signal_connect (window, "delete-event", G_CALLBACK (on_delete_event), NULL);

    /* Here we connect the "destroy" event to the gtk_main_quit() function.
     *
     * This signal is emitted when we call gtk_widget_destroy() on the window,
     * or if we return FALSE in the "delete_event" callback.
     */
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

    /* Sets the border width of the window. */
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);

    /* Creates a new button with the label "Hello World". */
    button = gtk_button_new_with_label ("Hello World");

    /* When the button receives the "clicked" signal, it will call the
     * function print_hello() passing it NULL as its argument.
     *
     * The print_hello() function is defined above.
     */
    g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);

    /* The g_signal_connect_swapped() function will connect the "clicked" signal
     * of the button to the gtk_widget_destroy() function; instead of calling it
     * using the button as its argument, it will swap it with the user data
     * argument. This will cause the window to be destroyed by calling
     * gtk_widget_destroy() on the window.
     */
    g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);

    /* This packs the button into the window. A GtkWindow inherits from GtkBin,
     * which is a special container that can only have one child
     */
    gtk_container_add (GTK_CONTAINER (window), button);

    /* The final step is to display this newly created widget... */
    gtk_widget_show (button);

    /* ... and the window */
    gtk_widget_show (window);

    /* All GTK applications must have a gtk_main(). Control ends here
     * and waits for an event to occur (like a key press or a mouse event),
     * until gtk_main_quit() is called.
     */
    gtk_main ();

    return 0;
}

下篇部落格起,文章長度會增加,對於一些函式將會進行相對詳細的中文介紹。

其實GTK3和GTK2的很多基礎的函式沒有變動,可以參照中文的GTK2教程來閱讀官網的GTK3教程,我的部落格只是拋磚引玉哈哈,這篇就寫到這。

相關推薦

GTK3學習筆記2 Hello World in GTK+

例子很簡單,實現了視窗和一個普通按鈕,效果如圖: 原始碼如下,有很簡單的英文註釋,容易看懂,就不翻譯了: #include <gtk/gtk.h> /* 下面是兩個回撥函式 */ static void print_hello (GtkWidget *

機器學習筆記1 - Hello World In Machine Learning

之間 項目 圍棋 gpu 強勁 大量數據 特殊 轉換成 [1] 前言 Alpha Go在16年以4:1的戰績打敗了李世石,17年又以3:0的戰績戰勝了中國圍棋天才柯潔,這真是科技界振奮人心的進步。伴隨著媒體的大量宣傳,此事變成了婦孺皆知的大事件。大家又開始激烈的討論機器人什

【JavaScript學習筆記hello world

div color html pre 學習筆記 bsp body pan class <html> <body> <script language="JavaScript"> al

SpringMVC 學習筆記(一) Hello World

pragma pan 自己掃描 framework print 一個 頁面 poj OS springMVC概述: Spring MVC 是目前最主流的MVC 框架之一 Spring MVC 通過一套 MVC 註解,讓 POJO 成為處理請 求的控制器,而無須實現任何接

CockroachDB學習筆記——[譯]Hello World

eve 尋找 速度 缺失 ogl 集群 創建 缺陷 學習 原文鏈接:https://www.cockroachlabs.com/blog/hello-world/ 原作者:Spencer Kimball 原文日期:Jun 4, 2015 譯:zifeiy 數據庫是世界

python學習筆記01 --------------hello world 與變數。

1.第一個程式: print('hello world')   輸出結果: hello world   2.變數 2.1 變數的作用: 把程式運算的中間結果臨時存到記憶體裡,以備後面的程式碼繼續呼叫。   2.2 變數的宣告方式: 變數名(識別符號) = 值

Swift學習筆記hello world

學習任何語言都是從hello world開始的,哈哈哈 開始我的swift學習之旅 //這個好像就是類似於OC的懶載入 (個人觀點--菜雞觀點) fileprivate var helloB

arduino學習筆記1 hello world和LED燈的使用

ps.每個例程實驗第一組是購買arduino是附贈的例程程式碼,第二組是在原基礎上進行修改的練習 1.Hello World! 只需要arduino uno板一塊 int val;//定義變數val int ledpin=3;//定義數字介面13 void setup() {

Spring 學習筆記hello world

    最近沒事兒可幹,無意中,想學習一下Spring的東西,於是就上網搜資料,找了一堆,結果還是不知道從哪裡開始入手。我想對於我們這些程式設計的孩子們來說,要想學習一個一個新的東西,最難的不是說我應該怎麼去學,而是應該是環境的搭建,對於搭建環境我想對與spring來說網上

spring學習筆記——spring Hello world 普通java專案版 分析類的載入與裝配

上一篇展示了spring的web版hello world,本篇來一個普通java專案中運用spring的demo,裡面有對singleton與prototype的討論,可以很清晰的看到spring對實體的注入策略。 因為是個demo,後來看工廠後處理器以及bean前、bea

Python Flask學習筆記Hello World

bubuko 筆記 out 混亂 name html ctrl 激活 pro Python Flask學習筆記之Hello World 安裝virtualenv,配置Flask開發環境 virtualenv 虛擬環境是Python解釋器的一個私有副本,在這個環境中可以安裝私

python_ 學習筆記hello world

f2c closed false == div end class spl spa python中的循環語句 循環語句均可以尾隨一個else語句塊,該塊再條件為false後執行一次 如果使用break跳出則不執行。 for it in [1,2,3,4]:

Go語言學習筆記(1)——Hello World!

都是 jet 多條語句 Golan 包括 軟件 輸入 大寫字母 引入 第一個go程序——HelloWorld.go   源碼  : package mainimport "fmt" // import ("fmt") f

Android學習筆記2Hello World程式解析

《第一行程式碼——Android》郭霖著 Android Studio入門到精通 Android Studio與Eclipse的一些不同 Android Studio是基於IDEA的,IDEA 全稱IntelliJ IDEA,是java語言開發的整合環境。IDEA

學習筆記2

建議 coo line 長度 cape 發展 div+css 加載 不兼容 雙標簽: <html><head><title><body><table><tr><td><span>

Jmeter學習筆記2-原件作用域與執行順序

校驗 height sse proc tro 有效 收集 技術分享 控制 1.元件的作用域 (1)配置元件(config elements):會影響其作用範圍內的所有元件。 (2)前置處理程序(per-processors):在其作用範圍內的每一個sampler元件之

python學習筆記2:字符串

nbsp 大小 alpha .com format 大小寫 fin 判斷大小 key python學習筆記2:字符串 總結:字符串是不可變變量,不能通過下標修改其值    字符串的方法都不會改變字符串原來的值,而是新生成一個字符串 一、3種寫法——單引號,雙引號,三引號  

java 學習筆記2 面向對象(上)

awr ges abs nal mage 有效 面向對象 ima col 類和對象 類是某一批對象的抽象,可以把類理解成某種概念。對象是一個具體存在的實體。類和對象是面向對象的核心。 類定義的是多個實例的特征,類不是具體存在,實例才是具體存在。 定義類(class)的語法:

Git學習筆記2——Git版本庫的創建

文件添加 不但 提交 linu 記錄 例子 blog 所有 out 創建一個版本庫非常簡單,首先,選擇一個合適的地方,創建一個空目錄: $ cd s: $ cd Git_Learing $ pwd s/Git_Learning pwd命令用於顯示當前目錄。在我的wind

Hadoop 學習筆記 (2) -- 關於MapReduce

規模 pre 分析 bsp 學習筆記 reduce 數據中心 階段 圖例 1. MapReduce 定義: 是一種可用於數據處理的編程的模型 優勢: MapReduce 本質上是並行運行的,因此可以將大規模的數據分析任務,分發給任何一個擁有足夠多機器