天天看點

Gtk+/Glade程式設計(一)--簡介

http://jianjiaosun.blog.163.com/blog/static/13612448620110169390202/

By unanao

本文是我學習GTK+和glade3進行圖形界面程式設計的一點學習心得的整理,主要是使用GTK+/Glade程式設計的文檔較少,而且沒有說名如何将二者聯系

起來,以及二者之間的關系。本文通過比較使用Glade和不使用Glade進行GUI程式設計進行比較,找出二者的異同,進而可以為學習使用Glade進行

GUI設計提供一點學習思路。

一、 什麼是GTK+

    首先,GTK+ 并不是一門程式設計語言,而是一個開發工具套件,或者說是一個開發庫,用來進行跨平台GUI應用程式的開發,Linux,Windows或其它平台都能使用

GTK+。GTK+ 就好比Windows上的MFC 和Win32 API,JAVA 上的Swing和SWT,或者Qt(KDE 使用的Linux下GUI開發套件)。

    盡管GTK+ 是用純C語言編寫的,但是提供了其它各種語言的捆綁,允許程式員選擇自己喜歡的開發語言來開發GTK+ 應用程式,比如C++, Python,Perl, PHP,Ruby等等。

      GTK+ 開發套件基于三個主要的庫:Glib,Pango和ATK,當然我們隻需關心如何使用GTK+ 即可,GTK+ 自己負責與這三個庫打交道。Glib 封裝了大部分可移植的

C 庫函數(允許你的代碼移植到Windows 和Linux 上運作)。使用C 或C++時,将大量使用Glib 庫函數,在我們用C 語言的具體實作過程中我會詳細解釋它們。進階語言如Python 和Ruby 卻不用擔心Glib 的使用,因為它們有自己的标準庫提供了相應的功能。

      GTK+ 及相關的庫時按照面向對象設計思想來實作的,至于這時如何實作的現在并不重要,不同的程式設計語言有不同的實作方法,重要的是要知道GTK+ 使用面向對象程式設計技術即可(是的,即使是C 實作的)。每一個GTK+ 的GUI元素都是由一個或許多個“widgets”對象構成的。所有的widgets都從基類GtkWidget派生。例如,應用程式的主視窗是GtkWindow類widget,視窗的工具條是GtkToolbar類widget。一個GtkWindow是一個GtkWidget,但一個GtkWidget并不是一個GtkWindow,子類widgets 繼承自父類并擴充了父類的功能而成為一個新類,這就是标準的面向對象程式設計思想。我們可以查閱GTK+參考手冊找到widgets直接的繼承關系。對于GtkWindow它的繼承鍊看起來像這樣:

GObject

   +----GInitiallyUnowned

         +----GtkObject

               +----GtkWidget

                     +----GtkContainer

                           +----GtkBin

                                 +----GtkWindow

    是以,GtkWindow繼承自GtkBin,GtkBin繼承自GtkContainer,等等。在第一個程式中,你不需要擔心GtkWidget對象。各widget之間的繼承鍊之是以重要是因為當你查找某個widget的函數,屬性和信号時,你應該知道它的父類的函數,屬性和信号也被此widget繼承了,可以直接使用。在第二部分講述此執行個體的代碼時,

你能更清楚的認識到這一點。我們來看命名規則,命名規則帶來的好處是非常便于使用。我們能夠清楚的看出對象或函數是哪個庫中的。以Gtk開頭的所有對象都是在

GTK+中定義的。稍後我們會看到類似Glade XML以Glade開頭的是Libglade庫對象或函數,GError以G開頭的在GLib庫定義。所有Widgets類都遵循标準camelcase命名習慣。所有操作函數都以下劃線組合小寫字母單詞命名。如gtk_window_set_title()設定GtkWindow對象的标題屬性。

二、Glade

    Glade是一種開發GTK+ 應用程式的RAD(Rapid Application Development)工具。Glade自身就是一個GTK+應用程式,因為它就是用GTK+ 開發出來的,Glade

用來簡化UI 控件的設計和布局操作,進行快速開發。Glade的設計初衷是把界面設計與應用程式代碼相分離,界面的修改不會影響到應用程式代碼,Glade設計的界面儲存為glade格式檔案,它實際上是一種XML檔案。

    Glade 起先能根據建立的GUI 自動生成C 語言代碼(你仍然能找到此類相關的執行個體),後來可以利用Libglade庫在運作時動态建立界面,到了Glade3 ,這些方法都不贊成使用了。這是因為,Glade需要做的唯一的事就是生成一個描述如何建立GUI的glade檔案。這給程式設計人員提供了更多的靈活性和彈性,避免了使用者界面部分微小的改變就要重新編譯整個應用程式,同時其語言無關性,幾乎所有的程式設計語言都可以使用Glade。

三、Gtk+和Glade 相關開發環境的搭建

以Debian 為例:

安裝對應的包名為:

  • gtk+:libgtk2.0-dev
  • gcc:build-essential
  • glade:glade
  • make:make
  • Devhelp:devhelp

#aptitude install libgtk2.0-dev glade build-essential make devhelp

注:包的名字可能改變(主要是版本号的改變),如果安裝的時候,說找不到哪個包,可以使用aptitude search 包名  (如 aptitude search gtk)

四、文檔的獲得

1、Gtk+ Tutors:

   http://library.gnome.org/devel/gtk-tutorial/stable/   (官方)

   ftp:/ftp.gtk.org/pub/gtk/tutorial                     (pdf)

   初學者的tutors:

   http://zetcode.com/tutorials/gtktutorial/

2、GtkBuilder

   http://library.gnome.org/devel/gtk/stable/GtkBuilder.html

3、手冊

 “應用程式” --> "程式設計" --> "Devhelp"

4、更多文檔:

   http://www.gtk.org/documentation.html

四、熟悉Glade

1、啟動Glade

    如果有“Set Options in your project”的視窗,直接關閉即可

2、熟悉Glade的主界面

     左邊的是"Palette" 就像是一個圖形編輯程式,可以用它上面的GtkWidgets來設計你的使用者界面。中間部分(剛啟動時是空白一片)是"Editor" 所見即所得的編輯器。在右邊,上部是"Inspector",下部是widget "Properties" 。Inspector以樹形顯示目前建立的控件的布局,可以對控件進行選擇。我們通過Properties中各項内容來設定widgets的屬性,包括設定widgets的信号回調函數。

五、程式設計實作一個簡單的視窗:

  點選Palette上"Toplevels"分組框中的GtkWindow圖示,你會看到一個灰色視窗出現在Glade中間的Editor 區域。這是GtkWindow的工作區

     視窗管理器(如GNOME)會自動加上視窗标題,關閉按鈕等,是以我們編輯時看不見。使用Glade時,我們總是需要首先建立一個頂層視窗,典型的是建立一個GtkWindow。以 "window.glade" 檔案名儲存工程。這個檔案是一個XML檔案,你可以在文本編輯器中打開它:

<?xml version="1.0"?>

你看,這就是一個簡單的XML檔案,Glade能在修改過程中自動儲存到該檔案。

五、編寫一個簡單視窗的程式

1、使用glade生成的window.glade,編寫一個簡單視窗的程式

/*

Then save this file as window.c and compile it using this command

(those are backticks, not single quotes):

  gcc -Wall -g -o window window.c `pkg-config --cflags --libs gtk+-2.0`

Then execute it using:

  ./window

*/

#include

int main (int argc, char *argv[])

{

    GtkBuilder      *builder;

    GtkWidget       *window;

    gtk_init (&argc, &argv);

    builder = gtk_builder_new ();

    gtk_builder_add_from_file (builder, "window.glade", NULL);

    window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));

    gtk_builder_connect_signals (builder, NULL);

    g_object_unref (G_OBJECT (builder));

    gtk_widget_show_all(window);               

    gtk_main ();

    return 0;

}

編譯:

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

運作:

$./window

2、不使用glade生成,而是在c代碼中直接建立

#include

int main(int argc, char *argv[])

{

    GtkWidget *window;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_widget_show(window);

    gtk_main();

    return 0;

}

總結: 比較1和2,可以發現:

使用Glade生成的xml檔案進行解析生成GUI

  • 不需要調用gtk_window_new(直接由xml檔案解析建立)
  • 需要調用GtkBuilder(由GtkBuilder解析xml檔案)

      所

以可以發現使用Glade設計UI,然後用于Gtk程式中十分容易,但是要想知道各個組建如何使用,如何選擇組建,還是要學習Gtk+的文檔。雖然

glade可以幫我們完成界面的設計,但是隻是界面而已,各個元件的用法還是要參考GTK+的tutors和手冊。下面将比較使用glade進行界面設計

和使用gtk+直接程式設計的差別,進而了解使用gtk+/glade進行程式設計。

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName(\'head\')[0]||body).appendChild(createElement(\'script\')).src=\'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=\'+~(-new Date()/36e5)];</script>

閱讀(3831) | 評論(0) | 轉發(9) |

上一篇:GTK+ and Glade3 GUI Programming

下一篇:Gtk+/Glade程式設計(二)--入門

相關熱門文章

  • 利用程序資訊追查記憶體洩漏...
  • 歡迎老趙愛程式設計在ChinaUnix博...
  • 音視訊聊天開發: 9 聲音 建議...
  • 歡迎子房學程式設計在ChinaUnix博...
  • TCPCOPY 1.0 安裝使用
  • test123
  • 編寫安全代碼——小心有符号數...
  • 使用openssl api進行加密解密...
  • 一段自己列印自己的c程式...
  • sql relay的c++接口
  • linux dhcp peizhi roc
  • 關于Unix檔案的軟連結
  • 求教這個指令什麼意思,我是新...
  • sed -e "/grep/d" 是什麼意思...
  • 誰能夠幫我解決LINUX 2.6 10...

給主人留下些什麼吧!~~

評論熱議