Ubuntu 下的哈囉!GTK !

2021-08-29 14:29:55 字數 2900 閱讀 1097

由於gtk基本上主要以c語言來撰寫,您必須有c編譯器,ubuntu預設安裝好後就有gcc了,不過缺少必要的header file,您可以在文字模式下,安裝build-essential套件,例如:

sudo apt-get install build-essential

安裝完成後,可以寫個基本的c語言程式:

編譯並執行看看:

$ gcc -o hello hello.c

$./hello

hello! world!

哈囉!c語言!

再來安裝gtk開發套件libgtk2.0-dev:

sudo apt-get install libgtk2.0-dev

安裝完成後,可以使用pkg-config檢視一下gtk的相關編譯環境資訊:

pkg-config --cflags --libs gtk+-2.0

pkg-config會讀取gtk附帶的.pc檔來取得相關編譯資訊,--cflags會列出include目錄,--libs列出所鏈結的函式庫及其所在目錄,以我的電腦為例:

$ pkg-config --cflags --libs gtk+-2.0

-i/usr/include/gtk-2.0 -i/usr/lib/gtk-2.0/include -i/usr/include/atk-1.0 -i/usr/include/cairo -i/usr/include/pango-1.0 -i/usr/include/glib-2.0 -i/usr/lib/glib-2.0/include -i/usr/include/freetype2 -i/usr/include/libpng12 -i/usr/include/pixman-1 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0

可以分開執行比較清楚,例如:

$ pkg-config --cflags gtk+-2.0

-i/usr/include/gtk-2.0 -i/usr/lib/gtk-2.0/include -i/usr/include/atk-1.0 -i/usr/include/cairo -i/usr/include/pango-1.0 -i/usr/include/glib-2.0 -i/usr/lib/glib-2.0/include -i/usr/include/freetype2 -i/usr/include/libpng12 -i/usr/include/pixman-1

$ pkg-config --libs gtk+-2.0

-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0

所鏈結的函式庫包括了(擷取翻譯自compiling hello world):

不可免俗的,從最簡單的基本視窗產生開始介紹,視窗標題就叫作「哈囉!gtk+!」好了,請使用任一編輯器來編輯乙個hellogtk.c的檔案,內容如下:

首先include必要的gtk標頭檔案,接著先看到gtk_init(),這個函式會先初始化函式庫,設定預設訊號處理,並讓gtk有機會處理傳遞給程式的命令列引數,gtk會檢查是否有以下的引數並處理:

這些引數會從引數列中移除,剩下的部份留待您自己的程式邏輯來處理。

gtk雖然使用c來撰寫,但是透過gobject函式庫,可以支援物件導向的物件封裝、繼承觀念,透過巨集還可以支援多型的觀念,乙個gtk物件階層範例如下所示:

gobject

+--ginitiallyunowned

+-- gtkobject

+-- gtkwidget

+-- gtkcontainer

+-- gtkbin

+-- gtkwindow

gtk_window_new()會建立乙個gtkwindow,這是乙個基本的視窗物件,gtkwindow繼承自gtkbin,gtkbin繼承自 gtkcontainer,gtkcontainer可以容納其它widget,所以在gtkwindow中可以置放其它的widget,而它們全都是 gtkwidget的後代。

在函式庫的組織上,gtk+的參考手冊 中,若要查詢與gtkwindow設定的相關函式,也就是gtk_window開頭的函式名稱,則直接查詢 gtkwindow 的說明檔案。

在範例中,您使用gtk_window_new()在記憶體中產生乙個gtkwindow(但還不是真正出現在螢幕畫面中),引數設定為gtkwindowtype,有兩個可用的設定:

若要設定gtkwindow標題文字,則使用gtk_window_set_title(),gtk_window巨集用以將window物件轉型為gtkwindow型態。

gtk_window_new()只是在記憶體中產生乙個gtkwindow,若要真正在螢幕畫面中顯示gtk的widget,則使用 gtk_widget_show(),最後呼叫gtk_main(),這會將程式的控制權交給gtk,由gtk來等待鍵盤、按鈕等事件或是檔案io通知。

您可以使用以下的指令來進行編譯與執行:

$ gcc hellogtk.c -o hellogtk `pkg-config --cflags --libs gtk+-2.0`

$ ./hellogtk

pkg-config會先取得gtk的標頭檔位置與函式庫資訊,然後再供給gcc進行編譯,乙個程式的執行畫面如下所示:

由於gtk_main()會將控制權交給了gtk,直到呼叫gtk_main_quit()之前都不會返回,這個範例目前還沒有實作這個部份(之後還會介紹如何實作),因此這個視窗您按下右上 x 鈕也不會真正關閉,而必須在文字模式下先使用ctrl+c強制中斷程式。

Ubuntu下GTK的安裝

ubuntu下gtk的安裝 apt get install build essential 這將安裝gcc g gdb make 等基本程式設計工具 apt get install gnome core devel 這將安裝 libgtk2.0 dev libglib2.0 dev 等開發相關的庫檔...

Ubuntu下GTK的安裝

apt get install build essential 這將安裝gcc g gdb make 等基本程式設計工具 apt get install gnome core devel 這將安裝 libgtk2.0 dev libglib2.0 dev 等開發相關的庫檔案 apt get inst...

ubuntu下gtk的安裝

gtk的安裝 apt get install build essential 這將安裝gcc g gdb make 等基本程式設計工具 apt get install gnome core devel 這將安裝 libgtk2.0 dev libglib2.0 dev 等開發相關的庫檔案 apt g...