亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
查看: 7999 | 回復(fù): 10
打印 上一主題 下一主題

用Glade2開(kāi)發(fā)圖形用戶(hù)界面 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2005-11-24 19:00 |只看該作者 |倒序?yàn)g覽
用Glade2開(kāi)發(fā)圖形用戶(hù)界面
http://www.gd-linux.org/bbs/show ... amp;p=4126#post4126
--------------------------------------------------------------------------------
如果你不想看這個(gè)文本模式的文章,你可以下載本貼下面的附件的html文檔 (下載后請(qǐng)用tar jxvf glade2-devel.tar.bz2 解壓)
http://blog.chinaunix.net/resserver.php?blogId=6198&resource=glade2-devel.tar.bz2

用Glade2開(kāi)發(fā)圖形用戶(hù)界面

作者: Rikke D. Giles 版權(quán): 2003, Rikke D. Giles
Glade由Damon Chaplin編寫(xiě) 感謝hulihutu翻譯



源碼:
* 介紹:
o 什么是Glade?
o 哪里可以得到Glade?
o Glade如何使用?
o Glade能做什么不能做什么
o 基本術(shù)語(yǔ)
* Glade快速瀏覽
o Glade界面
+ 主窗口
+ 調(diào)色板窗口
+ 屬性窗口
+ 控件樹(shù)窗口
o Glade生成的文件
+ 保存一個(gè)工程時(shí)
+聯(lián)編一個(gè)工程時(shí)
*GUI: 一些需要考慮的事情
o 設(shè)計(jì)時(shí)需決定的事
o Gnome相關(guān)的設(shè)計(jì)
o KDE相關(guān)的設(shè)計(jì)
o 一致性
o 簡(jiǎn)潔
* 范例: GTemp
o 目標(biāo)
o 創(chuàng)建GUI
o 創(chuàng)建第一個(gè)窗口
o 填滿(mǎn)主程序窗口
o 加入隨后一些的窗口
o 加入信號(hào)和回調(diào)函數(shù)
* 最后: 與GUI相互連接
o 庫(kù)和APIS
o 控件附注
o 調(diào)出新窗口
o 當(dāng)不再使用窗口時(shí)銷(xiāo)毀它
o 下一步?
* 編寫(xiě)代碼: Gtemp Redux
o 第一次編譯
o 程序開(kāi)始時(shí)只打開(kāi)一個(gè)窗口
o 使Gtemp主窗口右上角的X圖標(biāo)起作用
o 使“退出”菜單項(xiàng)和“退出”按鈕起作用
o 當(dāng)選擇“關(guān)于”菜單項(xiàng)調(diào)出“關(guān)于”窗口
o 使Gtemp能夠轉(zhuǎn)換溫度值
o 此時(shí),我們有一個(gè)可用的程序了
o 加入錯(cuò)誤信息
* 控件的詳細(xì)信息
o Gtk+基本控件
o Gtk+容器控件
o Gtk+附加的控件
o Gnome控件
o 不推薦使用的控件
o Glade1中有但Glade2中沒(méi)有的控件
* 總結(jié)及資源
* 作者, 感謝, 版權(quán)


英文版在http://glade.gnome.org




介紹

介紹:
什么是Glade?
Glade用來(lái)為GTK+和GNOME程序快速地設(shè)計(jì)圖形用戶(hù)界面。如果安裝了GTK+和/或GNOME庫(kù),也可用在Linux下任何桌面環(huán)境中。

哪里可以獲得Glade?
Glade可以從glade.gnome.org上下載。它也在包含不同格式的所有Linux主要發(fā)行版中。到2003年4月,最新版本是1.1.3,它可能是Glade2.0之前最后的版本。

Glade如何使用?
Glade有兩種使用方法:
用Glade創(chuàng)建GUI
用libglade打開(kāi)*.glade文件(xml),創(chuàng)建GUI on the fly

Glade能做什么不能做什么:

Glade可以開(kāi)發(fā)GUI界面及相關(guān)代碼
它可以在程序的最后,創(chuàng)建連接到前端GUI的空的callbacks和signal。
Glade不能用來(lái)開(kāi)發(fā)程序的內(nèi)部代碼
Glade不是一個(gè)完整IDE,換句話(huà)說(shuō)它并不包含編譯器,編輯器和調(diào)試器。 它可以連接這些程序,比如用gvim做為編輯器,gcc做為編譯器以及gdb做為 調(diào)試器。Linux下有一些IDEs可以或即將可以與Glade協(xié)同工作,Anjuta就是其中一個(gè)。

基本術(shù)語(yǔ):

前端/Gui: 在窗口環(huán)境下,用戶(hù)能夠看到及互動(dòng)的圖形界面。The 'eye candy'.
后端/內(nèi)容: 程序中確實(shí)能干事情的部分,處理用戶(hù)輸入,提供輸出,計(jì)算等。 基本上程序的這部分對(duì)用戶(hù)是不可見(jiàn)的。
控件:用來(lái)創(chuàng)建窗口的幾個(gè)或多個(gè)部件。簡(jiǎn)單的可以是一個(gè)標(biāo)簽,復(fù)雜的可以是 一個(gè)數(shù)據(jù)多叉樹(shù)。
回調(diào)/信號(hào)處理器/信號(hào): 控件針對(duì)特定的用戶(hù)動(dòng)作發(fā)出一個(gè)信號(hào)(比如,在窗口右上角的"X"按下鼠標(biāo)鍵)。信號(hào)處理器或回調(diào)是一個(gè)響應(yīng)這個(gè)信號(hào)的函數(shù)。gtk_main()負(fù)責(zé)管理它。對(duì)于Glade開(kāi)發(fā)者來(lái)說(shuō),要做的就是告訴回調(diào)函數(shù)信號(hào)發(fā)生后做什么。注意這個(gè)并不象聽(tīng)上去那么簡(jiǎn)單。




2.Glade快速瀏覽

用Glade2開(kāi)發(fā)圖形用戶(hù)界面
作者: Rikke D. Giles, 版權(quán) Rikke D. Giles 2003

Glade快速瀏覽
Glade界面
主窗口
主窗口如右圖所示。在這里,你可以指定關(guān)于工程的選項(xiàng),保存工程,打開(kāi)工程 以及聯(lián)編工程。它還包含有你所創(chuàng)建每個(gè)獨(dú)立窗口的列表

"工程"菜單及"編輯"菜單含義比較明顯。通過(guò)"查看"菜單你可以打開(kāi)幾個(gè) 窗口來(lái)查看工程的幾個(gè)不同方面。Glade運(yùn)行后自動(dòng)打開(kāi)調(diào)色板窗口和屬性窗口。 同時(shí)打開(kāi)控件樹(shù)窗口會(huì)比較有用。

"設(shè)置"菜單能夠改變Glade幾個(gè)方面?梢試L試改一下看哪種你更喜歡。最后的 "幫助"菜單含義也明顯。

調(diào)色板窗口
調(diào)色板包含了Glade可用的控件。共幾頁(yè)控件,可以點(diǎn)擊'Gtk+ Basic'、 'Gtk+ Additional'、' Gnome'和'Deprecated'按鈕來(lái)切換。"不推薦"頁(yè)包含了 那些用的較少的控件,有老的Gtk1樣式的"list and tree"控件以及不同的多余 Gnome控件。
根據(jù)Glade的安裝,可能會(huì)發(fā)現(xiàn)其它可用的控件。如果Glade安裝有定制控件, 調(diào)色板上就會(huì)有這些頁(yè)。如果安裝了Gnome-DB支持,就會(huì)有額外的"Gnome-DB"頁(yè)

點(diǎn)擊調(diào)色板上的控件就會(huì)選擇它,然后再次點(diǎn)擊你希望把它加入程序界面的位置。 必須先選一個(gè)窗口做為容納其它控件的地方。

屬性窗口
在屬性窗口可以調(diào)節(jié)和設(shè)置程序里不同控件的屬性。最少給每個(gè)主要輸入/輸出 控件一個(gè)名字。還可以設(shè)置缺省大小,確定能否編輯(如果它是一個(gè)文本類(lèi)型 的控件), 確定是否能被鼠標(biāo)點(diǎn)擊,改變?nèi)萜骺丶拇笮〖捌渌。你也可以設(shè)置每 個(gè)控件的標(biāo)題和headers。
這個(gè)窗口有好幾個(gè)標(biāo)簽頁(yè): Widget, Packing, Common, Signals and Accessibility (有國(guó)際通行的殘疾人士標(biāo)志)。每個(gè)標(biāo)簽頁(yè)的細(xì)節(jié)根據(jù)控件類(lèi)型有所不同,因而不再細(xì)說(shuō)。 "Widget"標(biāo)簽頁(yè)下可以設(shè)置控件的名稱(chēng)和基本外觀(guān)。"Packing"標(biāo)簽頁(yè)能讓控件在容器內(nèi)移動(dòng),以及設(shè)置當(dāng)改變窗口尺寸時(shí)控件如何擴(kuò)展和縮短。 "Common"標(biāo)簽頁(yè)可以設(shè)置更多的的細(xì)節(jié)參數(shù),比如如果你必須有一個(gè)固定尺寸的窗口及其它。"Signals"標(biāo)簽頁(yè)很重要,可以為每一個(gè)希望捕獲的信號(hào)設(shè)置回調(diào)函數(shù)或信號(hào)處理器。"accessibility"標(biāo)簽頁(yè)在 Glade2第一次出現(xiàn),允許設(shè)置參數(shù)以符合GNOME易用指導(dǎo)方針。這會(huì)使人通過(guò)發(fā)音合成器 更容易使用你的程序,等等。

控件樹(shù)窗口
在主窗口的"查看"菜單中可以找到控件樹(shù)窗口。它列出程序使用的所有控件,它們的名稱(chēng)和從屬關(guān)系樹(shù)。右鍵點(diǎn)擊樹(shù)中的任何控件可以選擇它,它的父控件,剪切、復(fù)制、刪除等等。如果程序需要重建,這樣可以很簡(jiǎn)單地移動(dòng)控件,而不需要重做名稱(chēng)、信號(hào)處理器、尺寸選項(xiàng)等等。注意如果把控件從一個(gè)地方拷到另一個(gè)地方,新控件將有缺省的名字和值。因?yàn)槊恳粋(gè)控件必須有一個(gè)唯一的名字。



用Glade2開(kāi)發(fā)圖形用戶(hù)界面

作者: Rikke D. Giles, 版權(quán) Rikke D. Giles 2003
Glade快速瀏覽: 第2頁(yè)
Glade生成的文件
保存工程時(shí)

當(dāng)你在glade主窗口按下保存時(shí),glade將會(huì)在工程選項(xiàng)中指定的目錄下保存兩個(gè)文件。如果沒(méi)有指定任何工程名字,glade將會(huì)保存在個(gè)人目錄下面的/Projects子目錄下。工程名為'Project#',#是一個(gè)數(shù)字,與你所建工程數(shù)量相關(guān)。給工程/程序命名時(shí)最好避免歧義。如果命名了工程,用你程序的名字替換下面的project#。

保存時(shí)創(chuàng)建的兩個(gè)文件是:

* Project1.glade
* Project1.gladep

'Project1'是你選項(xiàng)中給出的名字,等等。

這兩個(gè)文件含有xml代碼,glade或libglade用來(lái)調(diào)出你所創(chuàng)的程序。如果聯(lián)編了工程,*.glade文件將會(huì)被libglade調(diào)用。如果你想在程序中調(diào)用libglade 那就直接使用*.glade文件。
聯(lián)編工程時(shí)

當(dāng)按下主窗口的聯(lián)編時(shí),Glade產(chǎn)生用來(lái)生成程序GUI的所有文件。這些文件有時(shí)很難理解,特別是當(dāng)你對(duì)Linux下編譯程序了解很少的時(shí)候。下面會(huì)深入介紹它們。

* 在 project# 目錄
o acconfig.h/autogen.sh/configure.in/Makefile.am/stamp-h.in
這些文件是autoconf/autogen/automake系統(tǒng)所必須的,在Linux下這個(gè)系統(tǒng)能夠自動(dòng)編譯并檢查庫(kù)依賴(lài)性。通常Glade用戶(hù)只需輸入./autogen.sh來(lái)配置他們的程序以及生成所需的Makefiles文件。如果工程需要一個(gè)特定的庫(kù),這個(gè)庫(kù)將會(huì)加入配置文件或生成的Makefiles文件中。
o AUTHORS/ChangeLog/README/NEWS
當(dāng)程序發(fā)布將會(huì)用到這些文件。它們是標(biāo)準(zhǔn)分發(fā)文件,與具體的程序相關(guān)。
o macros子目錄
這個(gè)子目錄保存了autoconf和autogen等系統(tǒng)所需的宏。一定不要把它弄亂了。
o po子目錄
存有po翻譯文件。如果不用gettext來(lái)使你的程序國(guó)際化,就不用管它。
o src 子目錄
看下面。
* I在 project#/src 目錄
o main.c
這個(gè)文件包含了main(), main()是所有C程序的初始化函數(shù)。只有當(dāng)這個(gè)文件不存在時(shí)Glade才創(chuàng)建,因此你可以隨意編輯。當(dāng)Glade第一次生成main.c文件時(shí),它允許顯示所有創(chuàng)建的窗口。如果想在程序開(kāi)始時(shí)只顯示一個(gè)窗口需要編輯這個(gè)文件。
o support.c
包含glade支持函數(shù),不能編輯。里面最有用的函數(shù)是lookup_widget(),允許通過(guò)另一個(gè) 控件的名字查找特定控件(假定它們?cè)谝粋(gè)控件樹(shù)中,比如在同一個(gè)窗口里等)。
o callbacks.c
有g(shù)lade所寫(xiě)的所有回調(diào)函數(shù)和信號(hào)處理器。Glade不重寫(xiě)這個(gè)文件,不過(guò)當(dāng)需要更多的 回調(diào)函數(shù)會(huì)向其中追加。Glade只寫(xiě)出了空的回調(diào)函數(shù),需要你自己加入內(nèi)容。
o interface.c
很象support.c,也不能編輯。Glade在里面寫(xiě)了生成GUI的函數(shù)。沒(méi)有必要編輯它,如果編輯 過(guò),下次聯(lián)編程序時(shí)Glade又會(huì)重寫(xiě)。
o Makefile.am/Makefile.in/Makefile
這些文件由automake/autoconf包創(chuàng)建,為gcc編譯程序提供指導(dǎo)。在這里可以加入包含的庫(kù)、 新的資源文件等等。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2005-11-24 19:01 |只看該作者
基本GUI
設(shè)計(jì)方案
輸入/輸出哪種數(shù)據(jù)?
每種數(shù)據(jù)是什么類(lèi)型?
如何讀入數(shù)據(jù)?
從磁盤(pán)
用戶(hù)輸入
從串口輸入
等等
如何輸出數(shù)據(jù)?
到文件
到屏幕
到串口
到數(shù)據(jù)庫(kù)
等等
誰(shuí)會(huì)使用這個(gè)程序?
作者:
如果設(shè)計(jì)的程序只是為自己使用,而不需要分發(fā)軟件,你可以忽略一 大堆大多數(shù)軟件所需要的錯(cuò)誤處理、時(shí)鐘和whistles及niceties。界面可以比較粗糙, 忽略所有相關(guān)的設(shè)計(jì)規(guī)范。
有特定技能的用戶(hù)群:
設(shè)計(jì)錯(cuò)誤處理時(shí)要考慮到用戶(hù)的技能等等。比如, 針對(duì)專(zhuān)業(yè)技術(shù)人員軟件可以更簡(jiǎn)潔,錯(cuò)誤信息更直接等等。針對(duì)辦公人員的軟件則不能 這樣。盡管對(duì)于特定用戶(hù)普通的設(shè)計(jì)規(guī)范不太適用,但界面還是要很好地推敲。
普通用戶(hù):
應(yīng)該有很多的錯(cuò)誤處理,內(nèi)容豐富并一致。界面應(yīng)遵循所在窗口系統(tǒng) 的設(shè)計(jì)規(guī)范。嘗試遵循易用的設(shè)計(jì)規(guī)范(下面有很多)。
程序是怎樣的外觀(guān)?
某些情況下,這是個(gè)人愛(ài)好的問(wèn)題。
最大的功能也是最重要的。
Sticking within the guidelines/framework is important as well
如果可能,讓它更直觀(guān)一些。
如果你為其它人設(shè)計(jì)程序,讓他們看一看,從技術(shù)和非技術(shù)的角度考慮一下。
Gnome特定的設(shè)計(jì)規(guī)范
Gnome程序有相應(yīng)的設(shè)計(jì)規(guī)范, 它使桌面風(fēng)格更統(tǒng)一,當(dāng)然你可以不遵循它。也有易用的設(shè)計(jì)規(guī)范,如果 你的程序有殘疾用戶(hù),這對(duì)你很重要。

KDE特定的設(shè)計(jì)規(guī)范
KDE同樣也有設(shè)計(jì)標(biāo)準(zhǔn)。在這兒可以找到。.

一致性
程序里出現(xiàn)的東西、如何出現(xiàn)應(yīng)保持一致,并與桌面環(huán)境設(shè)計(jì)規(guī)范保持一致。處理錯(cuò)誤保持一致并遵循可預(yù)見(jiàn)的風(fēng)格。顯示數(shù)據(jù)也是如此。

簡(jiǎn)易
做為一個(gè)程序編寫(xiě)者,本能地使GUI跟著代碼走。比如,當(dāng)決定什么時(shí),代碼會(huì)包含一個(gè)分支。這個(gè)不需要用戶(hù)知道,但代碼必須這樣來(lái)走,于是我們會(huì)把它包含在GUI里。盡量避免這樣使事情復(fù)雜化。



范例:用Glade2開(kāi)發(fā)圖形用戶(hù)界面
目標(biāo)

某個(gè)講師很討厭換算攝氏(Celsus)和華氏溫度。于是她寫(xiě)一個(gè)程序幫她來(lái)做這件事。這個(gè)程序也可以做為許多Linux發(fā)行版中單位轉(zhuǎn)換程序的不錯(cuò)的前端。(注意單位轉(zhuǎn)換程序只能做直接的乘法轉(zhuǎn)換(如線(xiàn)性的),而不能象 C到 F 或 F 到 C 的轉(zhuǎn)換那樣)

向這個(gè)程序輸入一個(gè) C或 F的數(shù)值,并轉(zhuǎn)換成另一種單位。 It will do so without any other user input, but a carriage return.

如果輸入的不是數(shù)字,會(huì)在程序狀態(tài)欄上顯示錯(cuò)誤信息,這是唯一可預(yù)知的用戶(hù)錯(cuò)誤。
創(chuàng)建GUI
從主菜單的程序項(xiàng)目上選擇Glade來(lái)啟動(dòng)(Redhat下)。

按'new'鍵,會(huì)彈出一個(gè)窗口詢(xún)問(wèn)是gtk工程還是gnome工程, 選擇Gnome。這樣可以使用易用的gnome控件,并至少滿(mǎn)足gnome設(shè)計(jì)規(guī)范第一 部分的要求。


按glade主窗口的'options'鍵,會(huì)打開(kāi)一個(gè)象右邊那樣的窗口。要注意幾個(gè) 標(biāo)簽頁(yè),缺省是'general'頁(yè)。清除工程目錄里的"project1"部分,改為gtemp。 同時(shí)其它工程名稱(chēng)部分會(huì)自動(dòng)改為gtemp。

根據(jù)需要改變source和pixmaps的子目錄名,并選擇想要的語(yǔ)言。Glade自帶 C和C++,其它語(yǔ)言通過(guò)插件實(shí)現(xiàn)。轉(zhuǎn)到C選項(xiàng)頁(yè)。

在C選項(xiàng)頁(yè),關(guān)閉gettext支持。Gettext提供國(guó)際化支持,不過(guò)根據(jù)我的經(jīng)驗(yàn), 它導(dǎo)致Glade的auotgen和configur經(jīng)常出問(wèn)題。對(duì)于這個(gè)教程,我們不需要它。 其它選項(xiàng)不變。如果程序用到多個(gè)不同的glade文件,最好根據(jù)需要改變一下。

檢查libglade頁(yè)。這個(gè)頁(yè)允許保存供翻譯用的字符串,這對(duì)國(guó)際化程序很重要。 對(duì)于本范例不用改變它的。
Glade Options

建立第一個(gè)窗口
Gtemp's main window, under Glade

轉(zhuǎn)到Glade的調(diào)色板,按"Gnome"切換到gnome控件頁(yè),點(diǎn)擊左上角第一個(gè)控件。 這個(gè)是gnome程序窗口控件。它會(huì)建立一個(gè)空的窗口,帶有所有標(biāo)準(zhǔn)的gnome菜單、 工具條和其它。這個(gè)控件應(yīng)該是左圖那個(gè)樣子。

在屬性窗口,當(dāng)選擇程序窗口控件時(shí),把它的名字改為'gtemp_app'。其它地方不變。

你可以瀏覽菜單上的菜單項(xiàng)及查看工具條的按鈕。Gtemp程序很簡(jiǎn)單,不需要其它大多數(shù)選項(xiàng)。實(shí)際上,目前的設(shè)計(jì)中只會(huì)用到文件菜單下的"退出",幫助菜單,還需要在在工具條上有一個(gè)"退出"按鈕。沒(méi)有什么要保存,因?yàn)榻Y(jié)果會(huì)立即顯示在窗口里。也沒(méi)有文件需要打開(kāi),因?yàn)橹苯釉诖翱诶镙斎。沒(méi)有什么要編輯和查看..。因此我們將去掉那些永遠(yuǎn)不會(huì)用到的命令,設(shè)置為不響應(yīng)。(不活動(dòng)/灰色)。如果后面要用的話(huà),會(huì)把 它們?cè)O(shè)為活動(dòng)狀態(tài)。


首先高亮(點(diǎn)擊)工具條。那些系統(tǒng)按鈕(New, Open和Save)在長(zhǎng)方形的部分里。屬性窗口顯示名字為"toolbar1"。注意工具條的尺寸設(shè)為3。我們只需要一個(gè)按鈕,一個(gè)"退出"按鈕,把尺寸設(shè)為1,這時(shí)工具條上只有一個(gè)"新建"按鈕,F(xiàn)在,高亮 (點(diǎn)擊)"新建"按鈕。屬性窗口中名字應(yīng)該是'button1',把名字改為'quit_button'。向下找到系統(tǒng)按鈕選擇,點(diǎn)向下的箭頭,會(huì)打開(kāi)一個(gè)系統(tǒng)按鈕選擇菜單,選擇"退出" 圖標(biāo)。設(shè)置按鈕邊緣寬度,5或3看上去不錯(cuò)。點(diǎn)主窗口"保存"保存已做的工作。


現(xiàn)在回到gtemp程序窗口,點(diǎn)'文件'菜單,菜單條會(huì)高亮顯示,屬性窗口顯示 'menubar1'。在屬性窗口里點(diǎn)編輯按鈕,出一個(gè)象右邊一樣的新窗口-菜單編輯 器。

注意菜單條與菜單編輯器的布局及書(shū)寫(xiě)方式一致。'文件'是菜單條的第一項(xiàng)。 點(diǎn)擊它打開(kāi)一個(gè)子菜單,列有'new', 'open', 'save', 'save as', 菜單分割線(xiàn)和'quit'。 我們只需要'退出'。選擇不需要的項(xiàng)目,點(diǎn)擊右邊的刪除鍵去掉它們。

"編輯"菜單中有一些是我們需要的。不過(guò)后面還可能加入"偏好"和"屬性",現(xiàn) 在就不改動(dòng)了。Delete everything ele under 'edit'.點(diǎn)擊"應(yīng)用",回到gtemp程序窗口 看一下剛才工作的結(jié)果。

我們完全不需要"查看"項(xiàng),刪掉它。保留幫助菜單和'about'項(xiàng),因?yàn)閷?huì)放入 一個(gè)"About"彈出窗口。每個(gè)人創(chuàng)造的東西應(yīng)該受到表?yè)P(yáng)。
The Glade Menu Editor

對(duì)gtemp程序窗口還要做另一個(gè)更改。我們不需要進(jìn)度條,不過(guò)狀態(tài)條可以用來(lái)顯示信息。選擇窗口的中狀態(tài)條。它的名字是'appbar1',愿意的話(huà)改個(gè)名字,通常沒(méi)有必要因?yàn)槌绦蛑兄挥幸粋(gè)狀態(tài)條,而且這種情況下它的系統(tǒng)名稱(chēng)不 不引起混淆。在屬性窗口,設(shè)置'progress'為'no'。

完成后gtemp程序窗口應(yīng)該象左圖那樣。我們還沒(méi)有設(shè)置數(shù)據(jù)及程序應(yīng)該做什么,不過(guò)希望你已經(jīng)學(xué)會(huì)了如何調(diào)出菜單編輯器,通過(guò)屬性窗口如何設(shè)置一些參數(shù),以及在glade中自由瀏覽。如果你對(duì)所做的不滿(mǎn)意,可以備份每次glade保存所寫(xiě)的 *.glade文件,或重新載入程序,或從頭開(kāi)始。




Gtemp:用Glade創(chuàng)建界面的范例
填充主程序窗口
象任何程序一樣,在Gtemp中有很多種方法來(lái)檢查和顯示數(shù)據(jù)。 present the data in Gtemp. 我們可以在"edit"菜單->properties下設(shè) 一人菜單,讓用戶(hù)選擇是從 C 轉(zhuǎn)換到 F ,還是從 F 轉(zhuǎn)換到 C 。可以在主窗口下設(shè)置選項(xiàng)菜單讓用戶(hù)選擇是哪種轉(zhuǎn)換。另一個(gè)方法更有用些,它只需要很少的幾步就能得到正確結(jié)果。這個(gè)方法還可以擴(kuò)展,這樣我們能加入英里轉(zhuǎn)公里、公里轉(zhuǎn)英里等等。不過(guò),這個(gè)程序我們只做溫度單位的轉(zhuǎn)換。輸入數(shù)據(jù)最簡(jiǎn)單的方法是從一個(gè)文本框里獲得。在C文本框里輸入數(shù)值,就是從C轉(zhuǎn)換到F。 在F文本框里輸入數(shù)值,就是從F轉(zhuǎn)換到C。沒(méi)有用到的文本框返回結(jié)果。

我們需要兩個(gè)溫度單位標(biāo)簽,兩個(gè)輸入/結(jié)果的文本框。不需要設(shè)個(gè)按鈕來(lái) 開(kāi)始運(yùn)算,在文本框按下回車(chē)鍵就會(huì)發(fā)出信號(hào)來(lái)開(kāi)始。

每個(gè)窗口組件象文本框和標(biāo)簽需要放到容器里,F(xiàn)在,gtemp程序中空窗口就 是一個(gè)容器,不過(guò)它只能放入一個(gè)控件,因此我們需要在其中放入一個(gè)容器控件。 可以橫向或縱向盒子容器,不過(guò)表容器更適合些。

在調(diào)色板里選擇gtk+基本,點(diǎn)表容器控件。它在第7行從右數(shù)第2個(gè)。樣子象:

在gtemp窗口,點(diǎn)空陰影部分。會(huì)彈出一個(gè)窗口,詢(xún)問(wèn)表有多少行和列。設(shè)行和 列為2,因?yàn)槲覀冃枰獌蓚(gè)標(biāo)簽和兩個(gè)文本框。如果需要后面可以在屬性窗口中改變 它。gtemp窗口看上去應(yīng)該象右圖那樣。

現(xiàn)在加入標(biāo)簽。點(diǎn)調(diào)色板的標(biāo)簽控件,它在gtk+ basic頁(yè)下,第2行第1個(gè)控件, 樣子是。點(diǎn)gtemp程序窗口中表的左上 角部分,標(biāo)簽放進(jìn)窗口,名字叫'label1'。

在屬性窗口把標(biāo)簽的名字改為fahr_label。標(biāo)簽內(nèi)容改為'Fahrenheit'。它看 上去好象被壓扁了,是不是?讓我們擴(kuò)展一下。在標(biāo)簽的屬性菜單的主頁(yè)面上有 X和Y排列文本框。把它們從0改為5,F(xiàn)在標(biāo)簽看上去好看些了。

創(chuàng)建另一個(gè)標(biāo)簽,放在表的右上角。名字叫做cel_label,內(nèi)容為'Celsius'。 把它的排列改成與fahr_label一致。gtemp程序窗口看上去象左圖那樣。

下一步加入文本框控件。調(diào)色板中選擇文本框控件。它在第2行每2列,樣子是 。在gtemp程序 窗口點(diǎn)表的右下角放入文本框控件。

這個(gè)控件還需要改名并排列。改名為'fahr_entry',切換到屬性窗口的第2頁(yè) (packing),設(shè) h padding 和 v padding 為5。在這頁(yè)點(diǎn)"yes"按鈕,關(guān)閉 x expand屬性。

表的右下角加入另一個(gè)文本框,名字是'cel_entry',排列改為跟上面那個(gè)一 樣,記住關(guān)閉 x expand屬性。

glade窗口按"save"保存你的工作。看上去應(yīng)該是右圖那樣。

調(diào)整一下窗口,拖窗口的角來(lái)擴(kuò)大和縮小窗口。你可能不喜歡它擴(kuò)大和縮小、或是它的樣子。這4個(gè)我們需要的小控件占了很大的地方。你可以在屬性窗口設(shè)置所有控件的排列和擴(kuò)展屬性,包括容器控件。作者喜歡表的邊設(shè)為5,打開(kāi)homogenous 屬性?赡苣阆矚g另一種外觀(guān)。

本節(jié)學(xué)會(huì)了如何在容器控件里放入控件,如何設(shè)置排列和擴(kuò)展屬性,以及如何 設(shè)置控件的名字。你應(yīng)該很熟悉屬性窗口。你可以在控件上點(diǎn)右鍵來(lái)選擇同一個(gè)父, as well as 控件樹(shù)上的其它控件,并可以復(fù)印、剪切、粘貼或刪除。



Gtemp: 用Glade創(chuàng)建界面的范例
加下一個(gè)窗口
Gtemp程序用狀態(tài)條來(lái)顯示錯(cuò)誤信息,因此不需要彈出的對(duì)話(huà)框或錯(cuò)誤窗口。 不過(guò),需要一個(gè)"關(guān)于"窗口,下一步我們加入它。

我們可以從gtk+基本控件中創(chuàng)建這個(gè)窗口,不過(guò)既然我們已創(chuàng)建了一個(gè)glade程序,就用glade的"關(guān)于"控件來(lái)代替。在調(diào)色板窗口點(diǎn)gnome按鈕進(jìn)入gnome控件頁(yè)。 選擇第1行第2列的'gnome about dialog'控件,這會(huì)創(chuàng)建一個(gè)"關(guān)于"窗口。

在屬性窗口改名為gtemp_about。gtemp沒(méi)有圖標(biāo)或標(biāo)識(shí),就讓它們空著。 把想寫(xiě)的內(nèi)容加入到版權(quán)和作者窗口。記住,初版gtemp由Rikke D. Giles編寫(xiě), 做為一個(gè)教程練習(xí)。原始的版權(quán)是GNU copyleft。完成后看上去如右圖。



加入信號(hào)和回調(diào)函數(shù)
作者趨向于立刻加入全部信號(hào)處理同時(shí)進(jìn)行后端編程。 Gtemp只有很少幾個(gè)信號(hào),現(xiàn)在我們開(kāi)始加入它們。點(diǎn)擊窗口右上角的x關(guān)閉"關(guān)于" 對(duì)話(huà)框。注意"關(guān)于"對(duì)話(huà)框已經(jīng)加入到glade主窗口的控件列表中。

在gtemp程序窗口點(diǎn)退出按鈕,在屬性窗口會(huì)顯示它的屬性。點(diǎn)signals頁(yè),來(lái)設(shè)置signals頁(yè)。信號(hào)文本框旁邊是一個(gè)標(biāo)有"..."的按鈕,點(diǎn)它會(huì)出現(xiàn)這個(gè)控件信號(hào)的列表。信號(hào)根據(jù)控件的不同而不同,不過(guò)所有控件通常都有一些基本的信號(hào),因?yàn)樗鼈兌际荊tkWidget和 GtkContainer的子類(lèi)。對(duì)于退出按鈕,在GtkButton信號(hào)中選擇'clicked',點(diǎn)OK,彈出的信號(hào)列表會(huì)消失。這個(gè)信號(hào)及句柄已寫(xiě)入正確的文本框內(nèi)。點(diǎn)擊"add",這個(gè)信號(hào)句柄會(huì)加入到信號(hào)句柄的列表中。加入一個(gè)信號(hào) 就是這么簡(jiǎn)單。

菜單編輯器已經(jīng)自動(dòng)地加入信號(hào),因此我們不需要對(duì)gtemp中的主菜單做任何事情。不過(guò),我們需要捕獲當(dāng)文本框使用時(shí)的活動(dòng)信號(hào)。高亮 fahr_entry控件。屬性窗口還顯示在signals頁(yè),點(diǎn)"..."鍵,從GtkEntry信號(hào)中選擇"activate"。右圖是這個(gè)列表。注意它如何從按鈕控件變化的。選擇"activate"后,點(diǎn)擊"ok"再點(diǎn)擊 "add"把信號(hào)加入信號(hào)句柄列表中。對(duì)cel_entry控件做同樣的工作。這是目前gtemp 所需加入的所有信號(hào)。

"關(guān)于"窗口有什么信號(hào)呢? 由于這是一個(gè)系統(tǒng)gnome對(duì)話(huà)框,已經(jīng)設(shè)好了信號(hào)句 柄。我們沒(méi)有理由去動(dòng)它們,除非想要做的與系統(tǒng)設(shè)置的不同(為什么要這樣?)。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2005-11-24 19:04 |只看該作者
后端: 與GUI互動(dòng)
庫(kù)和API
當(dāng)編寫(xiě)GTK+和GNOME程序時(shí),需要注意幾個(gè)不同的庫(kù)和工具。以下是它們的列表,并帶有簡(jiǎn)短的介紹。

Glib:
Glib提供了一些函數(shù),用來(lái)替代基本的C函數(shù)特別是具有緩沖區(qū)溢出危險(xiǎn)的函數(shù)。如果你正在進(jìn)行g(shù)nu,gtk+和gnome程序的編寫(xiě),Glib很值得學(xué)習(xí);続PI在這里。許多先進(jìn)的控件,比如列表和選項(xiàng)菜單用到了Glib中的鏈表,這也是需要熟悉它的另一個(gè)原因。
GDK:
GDK是一個(gè)基本的庫(kù),把GTK和窗口系統(tǒng)的細(xì)節(jié)隔離開(kāi)。它面對(duì)窗口管 理器,比如metacity, sawfish或其它東西。它提供了很基本的畫(huà)圖工具及可能用在 callbacks.c里的函數(shù),大多數(shù)函數(shù)用來(lái)隱藏和擴(kuò)大窗口。API在這里。
Gtk+:
Gtk+是Gimp工具箱。版本1.* 與版本2.*不一致。Glade2使用2.*, Glade使用1.*。這個(gè)教程使用Gtk2。你可以在這里找到這些 API。Gtk+很重要,它提供了為Gtk+控件改變屬性、捕獲信號(hào)、獲得并放置數(shù)據(jù)等等的所有函數(shù)。每個(gè)控件及其相關(guān)函數(shù)在API有描述,這是用 Glade編程的主要參考手冊(cè)。
Libgnome和libgnomeui:
這些庫(kù)包含了額外的gnome庫(kù)。 如果你用glade開(kāi)發(fā)gnome程序,需要安裝它們。我們用在gtemp中的gnome控件也在這些庫(kù) 里,APIs提供了使用這些控件的細(xì)節(jié)。查看libgnome文檔 和libgnomeui文檔。
Libglade:
glade用Libglade從*.glade文件中創(chuàng)建代碼。 開(kāi)發(fā)者可以用來(lái)做同樣的事,載入一個(gè)*.glade xml文件來(lái)創(chuàng)建界面代碼。參考手冊(cè)在這里。
其它庫(kù):
還有一些可用的其它庫(kù),是gnome/gtk系統(tǒng)的一部分。 它們的API在gnome.org網(wǎng)站上的gnome開(kāi)發(fā)者站點(diǎn)。
指向控件
連接后端和GUI僅僅是顯示和接收來(lái)自控件的數(shù)據(jù)。上面提到的Gtk+和Gnome庫(kù)文件為每一個(gè)控件提供函數(shù),允許你設(shè)置和獲取數(shù)據(jù)。不過(guò)有時(shí)在程序中你還是要指向控件。

最簡(jiǎn)單的方法是使用Glade在support.c里提供的lookup_widget()函數(shù)。這個(gè)函數(shù)以一個(gè)控件和控件名字做參數(shù),返回所要的控件(如果它在參數(shù)控件的樹(shù)里)。例如,Gtemp界面里創(chuàng)建了一個(gè)控件叫做fahr_entry,它在主程序窗口樹(shù)中。如果我們正在處理fahr_entry的一個(gè)活動(dòng)回調(diào)函數(shù),不過(guò)想找到控件 cel_entry,把數(shù)據(jù)放進(jìn)去,可以用 GtkWidget *cel_entry = lookup_widget(GTK_WIDGET(fahr_entry), "cel_entry")。這個(gè)看上去有點(diǎn)糊涂,不過(guò)基本上它是一個(gè)聲明為GtkWidget類(lèi)型 (cel_entry)的指針,與控件自己指的是同樣一個(gè)東西。

另一個(gè)指向一個(gè)控件的方法是使用gtk_widget_get_toplevel()。參數(shù)是子控件。例如,找出cel_entry最上層的容器控件(通常是gtemp程序窗口)可以這樣做 ... GtkWidget *gtemp_app = gtk_widget_get_toplevel(GTK_WIDGET(cel_entry));.

你也可以使用靜態(tài)或全局變量來(lái)聯(lián)系控件。經(jīng)常這是從子窗口(如彈出窗口和對(duì)話(huà)框)指向主窗口是最簡(jiǎn)單的方法。不過(guò),使用太多的全局變局會(huì)被認(rèn)為是糟糕的編碼,鼓勵(lì)限制使用這它們。如果我們使用gtemp_app做為一個(gè)全局變量,并在main.c里實(shí)現(xiàn)它,那么在callbacks.c或其它需要用到的地方中把它聲明為外部變量。從這個(gè)角度, Gtemp不需要做這些。

Glib提供了一種方法,可以將任何g_object和gtk+對(duì)象關(guān)聯(lián)到一個(gè)關(guān)鍵字符串上。注意Gtk+小于2.0時(shí),有一個(gè)gtk_object類(lèi),現(xiàn)在包含在g_object下。任何時(shí)候你可以使用指向設(shè)在一個(gè)對(duì)象上的數(shù)據(jù)。例如,這段代碼設(shè)置一個(gè)指向cel_entry的標(biāo)志并連接到 fahr_entry。
static gchar *my_key_string = "my_key_string";

cel_entry = lookup_widget(GTK_WIDGET(fahr_entry), "cel_entry");
g_object_set_data(G_OBJECT(fahr_entry), my_key_string, cel_entry);

程序的后面我們可以直接從fahr_entry獲得cel_entry :
GtkWidget *cel_entry;

cel_entry = g_object_get_data(G_OBJECT(fahr_entry), my_key_string);

當(dāng)然, 當(dāng)指向的控件在同一個(gè)控件樹(shù)中(如它們?cè)谕粋(gè)窗口)這個(gè)方法不太有用處。 lookup_widget函數(shù)會(huì)更好些。不過(guò),這個(gè)技術(shù)很適合從一個(gè)窗口指向另一個(gè)窗口,而且不會(huì)用到全局變量。這樣你可以從一個(gè)彈出窗口獲得數(shù)據(jù)并輸入到主窗口,比如不需要使主窗口全局化。

調(diào)出新窗口或菜單
Glade在interface.c里寫(xiě)入每個(gè)設(shè)計(jì)出來(lái)的窗口或彈出菜單的創(chuàng)建函數(shù)。通常使用這些函數(shù)沒(méi)有必要編輯interface.c文件。這些函數(shù)叫做create_windowname(), 沒(méi)有參數(shù),返回一個(gè)指向?qū)嶋H窗口或彈出菜單控件的指針。例如,下面這段代碼為 Gtemp創(chuàng)建"關(guān)于"窗口:
GtkWidget *about;

about = create_gtemp_about();

是,就是這么簡(jiǎn)單。

當(dāng)窗口不再使用時(shí)銷(xiāo)毀它
如果你已經(jīng)創(chuàng)建了一個(gè)彈出窗口或?qū)υ?huà)框,再也不會(huì)用到它,你可以用gtk_widget_destroy() 銷(xiāo)毀它。參數(shù)是想要銷(xiāo)毀的GtkWidget。通常這個(gè)函數(shù)會(huì)被要銷(xiāo)毀窗口的"ok"或"cancel"鍵調(diào)用。例如,從一個(gè)名叫 'which_file'的彈出窗口上的"ok"按鈕銷(xiāo)毀這個(gè)窗口,只需要在這個(gè)按鈕的回調(diào)函數(shù)中調(diào)用上面那個(gè)函數(shù)。:
gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(ok_button)));

注意我們沒(méi)有把這個(gè)按鈕自己傳入這個(gè)函數(shù),這只會(huì)銷(xiāo)毀這個(gè)按鈕。我們 把按鈕的上層父控件(窗口)傳入函數(shù)。

下一步?
現(xiàn)在你知道了庫(kù)的參考手冊(cè)在哪兒,如何指向程序中的控件,是時(shí)候轉(zhuǎn)向編寫(xiě)代碼了。程序的內(nèi)容通常包含收到數(shù)據(jù)如何處理,或顯示之前如何處理。Glade這方面不做任何事情,程序開(kāi)發(fā)變成了一個(gè)編碼問(wèn)題,而不是一個(gè)界面問(wèn)題。想知道一個(gè)簡(jiǎn)單的界面如何連接到一個(gè)一個(gè)簡(jiǎn)單的后端,我們將轉(zhuǎn)入到Gtemp程序。



后端編程: 回到Gtemp
第一次編譯
如果沒(méi)有保存,就在glade的主窗口保存你的程序。點(diǎn)聯(lián)編按鈕來(lái)生成程序代碼。 如果你想的話(huà),可以檢查一下gtemp子目錄看生成些什么。


打開(kāi)一個(gè)終端窗口
在gtemp目錄,輸入autogen.sh
你可以看到一長(zhǎng)列autogen和autoconf的信息。除非 配置突然跳出,否則不用管它。
當(dāng)autogen結(jié)束輸入'make'。
進(jìn)入/src子目錄。列文件可以看到已經(jīng)有一個(gè)gtemp的可執(zhí)行文件。
輸入./gtemp運(yùn)行這個(gè)可執(zhí)行文件。

gtemp程序開(kāi)始運(yùn)行?梢钥吹轿覀儎(chuàng)建的所有窗口--主程序窗口和"關(guān)于"對(duì)話(huà)框都打開(kāi)了。你可以關(guān)閉"關(guān)于"窗口,象前面所討論的那樣它已經(jīng)設(shè)好了信號(hào)和回調(diào)函數(shù)。不過(guò),我們不希望一下子打開(kāi)兩個(gè)窗口,這是我們要修改的第一件事情。

點(diǎn)窗口右上角X關(guān)閉程序。注意命令行并沒(méi)有返回到開(kāi)始運(yùn)行g(shù)temp的終端窗口。這是因?yàn)闉榇翱趫D標(biāo)自動(dòng)創(chuàng)建的回調(diào)函數(shù)(最小化、最大化和關(guān)閉)沒(méi)有完全關(guān)閉程序。這顯示得很愚蠢,同時(shí)你在一個(gè)程序里使用多個(gè)窗口。用戶(hù)關(guān)閉彈出窗口,程序應(yīng)該結(jié)束。我們將來(lái)設(shè)置回調(diào)函數(shù)以便點(diǎn)擊X時(shí)程序關(guān)閉。這是我們要修改的第二件事情。

我們需要當(dāng)按下"退出"按鈕或選擇菜單條"文件"下的退出時(shí)程序能夠退出。這是加入 第三件事情。還要當(dāng)選擇"幫助"菜單下"關(guān)于"菜單項(xiàng)時(shí)彈出"關(guān)于"窗口。還剩最后一個(gè) 事情, C 到 F 或 F 到 C 的實(shí)際轉(zhuǎn)換。

程序開(kāi)始時(shí)只打開(kāi)一個(gè)窗口
打開(kāi)一個(gè)編輯窗口。本教程作者使用Gvim,不過(guò)Emacs、gedit或一個(gè)字處理軟件也 可以。Gvim和Emacs很適合,因?yàn)槟芙o代碼加顏色。打開(kāi)gtemp的main.c文件。它在 /src子目錄下。

main.c文件開(kāi)頭幾行說(shuō)明了glade不會(huì)改寫(xiě)這個(gè)文件,可以根據(jù)需要來(lái)修改它。記住, 如果你打開(kāi)的glade生成文件沒(méi)有這樣說(shuō),就不要編輯它。來(lái)到main()函數(shù),找到聲明 GtkWidget *gtemp_about,刪掉它。

向下翻找到
gtemp_about = create_gtemp_about ();
gtk_widget_show (gtemp_about);
刪掉它們。

Glade為每一個(gè)設(shè)計(jì)的窗口生成create_xxx()函數(shù)比如create_gtemp_about()。當(dāng)需要時(shí)可以用在你的代碼中來(lái)創(chuàng)建它們。每一個(gè)窗口創(chuàng)建后用with gtk_widget_show()來(lái)顯示。 現(xiàn)在我們刪掉了這些行,不過(guò)很快會(huì)把它們加入到"關(guān)于"菜單項(xiàng)的回調(diào)函數(shù)中。

使Gtemp主窗口右上角的X工作
首先,我們需要加入另一個(gè)回調(diào)函數(shù)。在Glade選擇Gtemp程序窗口,進(jìn)入屬性窗口。 在signals頁(yè),選擇GtkWidget信號(hào)下的delete_event信號(hào),把這個(gè)信號(hào)句柄加入列表,保存,重建程序。

用你選擇的編輯器打開(kāi)callbacks.c文件。你可以看到前面我們加入的所有信號(hào)句柄或 回調(diào)函數(shù),剛才加入的delete event在文件的最下面。轉(zhuǎn)到這兒。

加入
gtk_main_quit();

return FALSE;
在on_gtemp_app_delete_event()函數(shù)里。 想知道gtk_main_quit()函數(shù)的更多信息,你可以查詢(xún) gtk+ API在 gtk-General部分.

使"退出"菜單項(xiàng)和"退出"按鈕工作
在on_quit1_activate()函數(shù)加入
gtk_main_quit()
函數(shù)調(diào)用。就做這么多。 on_quit_button_clicked()函數(shù)也這樣處理。

選擇"關(guān)于"菜單項(xiàng)時(shí)載入"關(guān)于"窗口
查找函數(shù)名為on_about1_activate()在這兒加入從main.c文件刪 掉的創(chuàng)建窗口的代碼。把下面的代碼加進(jìn)去:

GtkWidget *about

about = create_gtemp_about();
gtk_widget_show(about);

這就可以了。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2005-11-24 19:04 |只看該作者
現(xiàn)在可以測(cè)試剛才所做的工作。在/src輸入make重新編譯。如果沒(méi)有打字或其它錯(cuò)誤, make不會(huì)顯示任何錯(cuò)誤信息。運(yùn)行g(shù)temp檢查我們所做的工作。

現(xiàn)在我們開(kāi)始編寫(xiě)后端。這個(gè)很簡(jiǎn)單,不過(guò)在一個(gè)復(fù)雜的程序里,可能有幾個(gè)輔助的 文件,絕大多數(shù)后端不會(huì)放在callbacks.c,比如在gtemp里.

最后使Gtemp能夠轉(zhuǎn)換溫度單位
目前在callbacks.c里應(yīng)該有四個(gè)空的回調(diào)函數(shù)。其中兩個(gè)on_properties1_activate() 和on_preferences1_activate(),現(xiàn)在用不到。使用剩下的 on_fahr_entry_activate()和on_cel_entry_activate()。

我們將要編寫(xiě)一個(gè)函數(shù)叫做compute_temp(),它將被這兩個(gè) entry_activate回調(diào)函數(shù)調(diào)用。定義兩個(gè)標(biāo)志, C_TO_F和F_TO_C以便我們知道正在進(jìn)行哪種轉(zhuǎn)換。 Compute_temp()以調(diào)用的控件、用戶(hù)輸入的溫度和轉(zhuǎn)換類(lèi)型做為參數(shù)。

在文件頭部,在其它#define下面加入這幾行

#define C_TO_F 0
#define F_TO_C 1

void compute_temp(GtkWidget *this_widget, float temperature, int type);

這是這些函數(shù)和標(biāo)志的聲明。

在文件尾部,所有回調(diào)函數(shù)的下面,加入這個(gè)函數(shù):

void compute_temp(GtkWidget *this_widget, float temperature, int type)
{
GtkWidget *other_entry = NULL;
float result = 0.0;
gchar *result_string = NULL;
switch(type) {
case C_TO_F:
result = ((9.0 / 5.0) * temperature) + 32.0;
other_entry = lookup_widget(this_widget, "fahr_entry");
break;
case F_TO_C:
result = (5.0 / 9.0) * (temperature - 32.0);
other_entry = lookup_widget(this_widget, "cel_entry");
break;
}
result_string = g_strdup_printf("%5.2f", result);
gtk_entry_set_text(GTK_ENTRY(other_entry), result_string);
g_free(result_string);
}

單步執(zhí)行這個(gè)函數(shù),它聲明了正確的變量,進(jìn)入了一個(gè)分支語(yǔ)句,在這個(gè)語(yǔ)句中溫度單位的轉(zhuǎn)換取決于傳入了哪個(gè)文本框:other_entry = lookup_widget(this_widget, "cel_entry"); and other_entry = lookup_widget(this_widget, "fahr_entry"); 使用glade支持函數(shù)lookup_widget() 找到?jīng)]有用戶(hù)輸入的那個(gè)文件框。Gtk_entry只接收文本,因此我們把浮點(diǎn)數(shù)通過(guò) g_strdup_printf()轉(zhuǎn)換成文本。這個(gè)功能很象printf() 函數(shù),不管字符串有多長(zhǎng)都能確保分配了足夠的內(nèi)存。接下來(lái)用gtk_entry_set_text() 把結(jié)果寫(xiě)入gtk_entry控件。用g_free()釋放我們用 g_strdup_printf()創(chuàng)建的結(jié)果字符串。

所有的這些函數(shù)都可以在gnome.org上API部分查到。GtkEntry詳細(xì)信息請(qǐng)看 這頁(yè)。 你可以在這里 查到Glib字符串功能。

還需要在entry_activate里寫(xiě)入代碼來(lái)實(shí)際運(yùn)行compute_temp函數(shù)。找到回調(diào)函數(shù)名為 on_fahr_entry_activate() 加入以下代碼:

gchar *fahr = NULL;

fahr = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);

compute_temp(GTK_WIDGET(entry), atof(fahr), F_TO_C);

這兒我們沒(méi)有做 任何錯(cuò)誤檢查,只是用atof()把字符串fahr轉(zhuǎn)換成浮點(diǎn)數(shù)。后面我們會(huì)加入錯(cuò)誤檢查。找到on_cel_entry_activate()函數(shù),加入以下代碼:

gchar *celsius = NULL;

celsius = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);

compute_temp(GTK_WIDGET(entry), atof(celsius), C_TO_F);

同樣,我們后面會(huì)加入錯(cuò)誤檢查。注意在每一個(gè)代碼片斷我們使用GtkEditable代替GtkEntry。這是因?yàn)镚tkEntry某些方面不推薦使用(在 Gtk+-1.0,不過(guò)在2.0中以恢復(fù)了entry_get_text 函數(shù)),特別是gtk_entry_get_text()函數(shù)。由于GtkEntry是GtkEditable的一個(gè)子類(lèi),用GtkEditable函數(shù)是比較有效的。我們只要記住用GTK_EDITABLE()轉(zhuǎn)換宏把它 轉(zhuǎn)換成一個(gè)新類(lèi)。

現(xiàn)在,我們有一個(gè)可用的程序
重新編譯看看。在/src子目錄輸入make,修改任何可能的打字錯(cuò)誤,運(yùn)行程序。如果你在文本框只輸入數(shù)字,它會(huì)運(yùn)行得很好。試著在其中一個(gè)文本框里輸入'abc'。它給出了一個(gè)結(jié)果,因?yàn)閍tof()函數(shù)強(qiáng)行把"abc"轉(zhuǎn)換成一個(gè)浮點(diǎn)數(shù),不過(guò)我們知道結(jié)果是錯(cuò)的。如果這個(gè)程序只是自己用,而且你知道輸入什么才能得到正確結(jié)果(象大多數(shù)編程者那樣),那我們現(xiàn)在就停下來(lái)。不過(guò)讓我們更進(jìn)一小步,加入 簡(jiǎn)單的錯(cuò)誤檢查和提示。

加入錯(cuò)誤提示
我們要寫(xiě)另一個(gè)函數(shù)check_temperature_value(),它將檢查以確保輸入的數(shù)值是數(shù)值型而不是其它。這個(gè)函數(shù)同樣也被兩個(gè)entry_activate函數(shù)調(diào)用,向程序 狀態(tài)條輸出一條錯(cuò)誤信息。

在callbacks.c文件的底部加入函數(shù):

gint check_temperature_value(GtkWidget *this_widget, gchar *value)
{
GtkWidget *appbar;
gint num = 0;
gchar this_char = '';

this_char = *value;

if (!this_char)
return 0;

while (this_char != '') {
if (!isdigit(this_char)) {
/* set up the error message */
appbar = lookup_widget(GTK_WIDGET(this_widget), "appbar1");
gnome_appbar_push(GNOME_APPBAR(appbar), "Please enter numbers only");
return 0;
} else {
num++;
this_char = value[num];
}
}
return 1;
}



我們需要在entry_activate回調(diào)函數(shù)調(diào)用這個(gè)函數(shù)。加入以下這些行到 on_cel_entry_activate()中,在compute_temp() 函數(shù)調(diào)用之前:

if (!check_temperature_value(GTK_WIDGET(entry), celsius))
return;
clear_appbar(GTK_WIDGET(entry));

把同樣的行加入到 on_fahr_entry_activate()中,在 compute_temp()函數(shù)調(diào)用之前:

if (!check_temperature_value(GTK_WIDGET(entry), fahr))
return;
clear_appbar(GTK_WIDGET(entry));



最后我們需要clear_appbar()函數(shù)。它只是在輸入是個(gè)正確的數(shù)字時(shí)從狀態(tài)條上消除 錯(cuò)誤信息。把它加入callbacks.c文件的最后:

void clear_appbar(GtkWidget *this_widget)
{
GtkWidget *appbar;

appbar = lookup_widget(GTK_WIDGET(this_widget), "appbar1");
gnome_appbar_clear_stack(GNOME_APPBAR(appbar));
}

不要忘了在文件頭部附近加入兩個(gè)函數(shù)頭。編譯程序,現(xiàn)有你有一個(gè)能工作、錯(cuò)誤檢查并發(fā)出信息的Gtemp版本!

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2005-11-24 19:06 |只看該作者
控件的更多細(xì)節(jié)

接下來(lái)是一些常用的控件列表,及它們所用的一些gtk函數(shù)。沒(méi)有列出函數(shù) 參數(shù),也沒(méi)有列出每個(gè)控件的所有函數(shù)。如果需要這些信息請(qǐng)到這個(gè)教程的 庫(kù)部分。

注意下面并不是控件的詳細(xì)列表。 在Glade沒(méi)有包含的庫(kù)里有很多可用的控件。還有一些Gtk+控件比較容易理解 (如垂直和水平分隔線(xiàn))也沒(méi)有列在這里。
Gtk+基本控件
Image 名稱(chēng) 目標(biāo) 函數(shù)及參考
gtk window icon 窗口 基本Gtk窗口 編程者不需要注意什么特別的函數(shù),不過(guò)如果這是主窗口,你需要把gtk_exit()與delete_event信號(hào)關(guān)聯(lián)(比如當(dāng)點(diǎn)擊右上角的X時(shí))。
Gtk Dialog Window 對(duì)話(huà)框窗口 創(chuàng)建一個(gè)基本的對(duì)話(huà)盒/窗口 它沒(méi)有什么特別的函數(shù)。你需要向按鈕條加入按鈕和其它你想要的東西。
Gtk File Selection 文件選擇對(duì)話(huà)框 創(chuàng)建一個(gè)標(biāo)準(zhǔn)化的文件選擇對(duì)話(huà)框窗口 內(nèi)部工作由控件來(lái)處理。你需要連接按鈕的信號(hào)(如clicked信號(hào)),及獲得選擇結(jié)果。
Gtk Color Selection Dialog 顏色選擇對(duì)話(huà)框 選擇顏色的對(duì)話(huà)框窗口 創(chuàng)建一個(gè)標(biāo)準(zhǔn)化的顏色選擇對(duì)話(huà)框盒/窗口。你需要使按鈕工作,并用 gtk_color_selection_get_color()獲得顏色選擇結(jié)果。
Gtk Font Selection Dialog 字體選擇對(duì)話(huà)框選擇字體的對(duì)話(huà)框窗口這是一個(gè)標(biāo)準(zhǔn)化的字體選擇對(duì)話(huà)框盒/窗口。通常你需要設(shè)置按鈕并獲取選擇結(jié)果。使用 gtk_get_font_selection_dialog_get_font() 做這件事。還有其它的函數(shù)來(lái)獲取字體的名字及其它。查看列在本教程幫助部分的GTK+參考手冊(cè)。
gtk menubar 菜單條 創(chuàng)建一個(gè)菜單條 你需要為所有下拉菜單的activate信號(hào)創(chuàng)建句柄。在Glade中有菜單編輯器來(lái)幫你做這個(gè)。參考本教程菜單編輯器部分。
gtk toolbar 工具條 創(chuàng)建一個(gè)工具條 你需要為按鈕設(shè)置句柄。(通常是clicked 信號(hào))。你還得在屬性窗口里為一個(gè)按鈕提供圖標(biāo)(或使用標(biāo)準(zhǔn)圖標(biāo))及命名。
gtk label 標(biāo)簽 創(chuàng)建一個(gè)標(biāo)簽控件 它通常沒(méi)有信號(hào)。這允許你在程序中放入一個(gè)標(biāo)簽。
gtk entry widget 文本框允許輸入單行文本使用gtk_entry_set_text()、gtk_editable_get_chars()、 gtk_entry_set_editable() 有其它函數(shù)來(lái)操作這個(gè)單行文本。通常使用activate和changed信號(hào)。使用changed信號(hào),設(shè)置一個(gè)標(biāo)志,其后獲得框內(nèi)數(shù)據(jù) (比如當(dāng)按下OK鍵時(shí))。
gtk Combo Box 下拉框 創(chuàng)建一個(gè)下拉框 使用這個(gè)控件或Gnome文本框創(chuàng)建一個(gè)下拉的框列表。 Gnome文本框自己管理這個(gè)列表,而ComboBox需要你自己來(lái)處理。它可以使用文本框的函數(shù),獨(dú)有的函數(shù)有: gtk_combo_set_value_in_list()等。
gtk text box 文本視圖 多行文本編輯器 這個(gè)控件與Gtk+ 1.*相比有很大的變化。先創(chuàng)建一個(gè)GtkTextBuffer,在這里編輯文本,并在GtkTextView顯示它。在一個(gè)很簡(jiǎn)單的程序中,可以用 gtk_text_view_get_buffer() 得到緩沖區(qū),并用gtk_text_view_set_buffer()設(shè)置它。緩沖區(qū)自己發(fā)出信號(hào),比如changed,insert_text等。視圖本身了發(fā)出copy_clipboard, move_focus等信號(hào)。
Gtk Button 按鈕 一個(gè)基本的按鈕 所有按鈕最常用的信號(hào)是clicked信號(hào),也可以用enter, leave, pressed, released等。沒(méi)有用來(lái)獲得數(shù)據(jù)的特別函數(shù),不過(guò)你可能經(jīng)常會(huì)想讓按鈕最后銷(xiāo)毀它的父窗口,用 gtk_widget_destroy()函數(shù)。
Gtk Toggle Button 切換按鈕 一個(gè)基本的切換按鈕 這個(gè)按鈕用來(lái)代表有兩種狀態(tài)(開(kāi)/關(guān),0/1等)的變量和實(shí)體。它有一個(gè)特別的信號(hào)toggled,其它與普通按鈕信號(hào)一樣。
Gtk Check Button 多選按鈕 一個(gè)多選按鈕(用標(biāo)簽切換) 這是一個(gè)切換按鈕,它也有兩個(gè)狀態(tài)(開(kāi)/關(guān)等)。這種按鈕也有標(biāo)簽,使它是一個(gè)有標(biāo)簽的切換按鈕。你可以使用 toggled 信號(hào)。
Gtk Radio Button 單選按鈕 一個(gè)單選切換按鈕 它是一種特殊的多選按鈕。單行按鈕組成一組,當(dāng)點(diǎn)擊一個(gè)時(shí)其它都變成"關(guān)"或未被選擇。這允許編程者從許多項(xiàng)目中選擇一項(xiàng)。它的信號(hào)當(dāng)然是toggled。在屬性窗口中,可以設(shè)置單選按鈕的組和標(biāo)簽。
Gtk Option Menu 選項(xiàng)菜單 創(chuàng)建一個(gè)菜單,用戶(hù)可以選擇一項(xiàng)。 常用的信號(hào)是clicked, enter, leave, pressed等。函數(shù)有g(shù)tk_option_menu_get_menu(), gtk_option_menu_set_menu()等。本教程后面有一個(gè)例子,說(shuō)明如何把句柄聯(lián)接到這個(gè)控件。
Gtk Spin Button 滾動(dòng)按鈕增加數(shù)字的按鈕這是個(gè)有用的方法,可以從用戶(hù)獲取數(shù)字。數(shù)字在一個(gè)范圍內(nèi),而且一直是數(shù)字型(如果你在屬性窗口設(shè)數(shù)字型為T(mén)RUE)。也可以設(shè)范圍、增幅和開(kāi)始的數(shù)字。使用changed 和 activate 信號(hào)可以從滾動(dòng)按鈕獲得數(shù)據(jù)。例如gtk_spin_button_get_value_as_float()或 gtk_spin_button_get_value_as_int ()。(記住用changed 信號(hào)設(shè)置一個(gè)標(biāo)志,以后接收數(shù)據(jù)(如當(dāng)按下OK鍵時(shí)))。
Gtk Status Bar 狀態(tài)欄顯示狀態(tài)信息的地方它通常放在程序的底部,顯示程序在做什么。比如,用戶(hù)按下一個(gè)按鈕來(lái)保存一個(gè)文件時(shí),你可以在這兒顯示"文件已保存"。使用 gtk_statusbar_push(), gtk_statusbar_pop()及其它函數(shù)。
Gtk List or Tree View 列表或樹(shù)視圖 顯示樹(shù)和列表的控件 這是Gtk+ 2.0中新控件, 代替ctree,clist,list和tree控件。理論上它有點(diǎn)復(fù)雜,不過(guò)使用起來(lái)很簡(jiǎn)單。更多信息請(qǐng)看AP,不過(guò)基本上你可以創(chuàng)建一個(gè)列表或樹(shù)模型,并用列表或樹(shù)方式來(lái)瀏覽。
Gtk Image Gtk圖像控件 顯示一幅圖像 這是一個(gè)沒(méi)有窗口的控件,它不接收事件,只是簡(jiǎn)單地用來(lái)顯示 圖像/動(dòng)畫(huà)/其它。
Gtk Drawing Area 畫(huà)圖區(qū) 創(chuàng)建custom控件的地方 使用這個(gè)控件來(lái)創(chuàng)建custom控件,可以畫(huà)東西(比如圖像)等

Gtk容器
gtk handle box 帶柄盒子(譯注:就是浮動(dòng)工具條) 創(chuàng)建一個(gè)盒狀容器,可以通過(guò)柄來(lái)移動(dòng)。 它沒(méi)有信號(hào),內(nèi)部自帶柄。這個(gè)容器是'rip away'盒子之一, 你可以創(chuàng)建菜單并能把它移動(dòng)到屏幕上想到的位置。
Horizontal Box Widget 橫向盒子 放置控件的一系列盒子這是一個(gè)容器,如果愿意也可以連接信號(hào),不過(guò)不需要的。不,我并知道當(dāng)它垂直排列是為什么叫水平盒子,除非numerically it runs horizontally (比如一串?dāng)?shù)字,one for each box).
Gtk Vertical Box 垂直盒子 這是一個(gè)容器,如果愿意也可以連接信號(hào),不過(guò)不需要的。
Gtk Table Box 表狀盒子 在一個(gè)表格式中創(chuàng)建一系列盒子 這是一個(gè)容器,如果愿意也可以連接信號(hào),不過(guò)不需要的。
Gtk Fixed Gtk Fixed 允許你在容器里固定控件的位置。 這個(gè)控件不應(yīng)該在實(shí)際中使用。它對(duì)那些從VB背景轉(zhuǎn)來(lái)的人比較適合, 但會(huì)妨礙你學(xué)習(xí)在Gtk+里如何正確地使用容器。盡量避免使用。
Gtk Horizontal ButtonBox 水平按鈕盒 一個(gè)水平地放置按鈕的盒子 這個(gè)盒子用來(lái)包含按鈕。
Gtk Vertical ButtonBox 垂直按鈕盒 一個(gè)垂直地放置按鈕的盒子 這個(gè)盒子用來(lái)包含按鈕。
Gtk Horizontal Pane 水平面板 創(chuàng)建一個(gè)面板,用戶(hù)可以放大或縮小在一個(gè)窗口里的部件。 這是一個(gè)容器,如果愿意也可以連接信號(hào),不過(guò)不需要的。 可改變大小的部件是其內(nèi)置的。
Gtk Vertical Pane 垂直面板 創(chuàng)建一個(gè)面板,用戶(hù)可以放大或縮小在一個(gè)窗口里的部件。 這是一個(gè)容器,如果愿意也可以連接信號(hào),不過(guò)不需要的。 可改變大小的部件是其內(nèi)置的。
Gtk Notebook Widget 標(biāo)簽頁(yè)創(chuàng)建一系列"文件夾"盒子,如果用戶(hù)點(diǎn)擊標(biāo)題,可以改變頁(yè)內(nèi)容。這是一系列的容器,如果愿意也可以連接信號(hào),不過(guò)不需要的。你想要做的一件事是命名標(biāo)題,或希望用這個(gè)控件來(lái)創(chuàng)建一個(gè)容易"改變"的布局,注意不要顯示標(biāo)題。
Gtk Frame 框架 創(chuàng)建一個(gè)框架,可以命名 這是一個(gè)容器,如果愿意也可以連接信號(hào),不過(guò)不需要的。 如果你想,記住命名框架。
Gtk Scrolled Window 滾動(dòng)窗口 一個(gè)滾動(dòng)窗口控件 這是一個(gè)容器,如果愿意也可以連接信號(hào),the scrolling should be taken care of automatically.
Gtk Viewport Gtk視角 創(chuàng)建一個(gè)視角 作者對(duì)這個(gè)控件不是很熟,看API。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2005-11-24 19:07 |只看該作者
控件更多的細(xì)節(jié): Gtk+附加

注意下面沒(méi)有列出全部控件,在Glade未包含的庫(kù)里也有可用的控件。沒(méi)有列出每個(gè)控件的所有函數(shù)。如果需要這些信息請(qǐng)到這個(gè)教程的 庫(kù)部分。
Gtk+附加
Image 名稱(chēng) 目標(biāo) 函數(shù)及參考
Gtk Horizontal Scale 水平刻度 創(chuàng)造一個(gè)水平滑塊 使用它可以允許通過(guò)滑動(dòng)刻度條來(lái)選擇一定范圍的數(shù)字。很象滾動(dòng)按鈕(spin button),你可以設(shè)最小值、最大值、最初數(shù)值,單步增幅及其它。
Gtk Vertical Scale 垂直刻度 創(chuàng)造一個(gè)垂直滑塊 和水平刻度一樣,只不過(guò)是垂直的。
Gtk Horizontal Ruler 水平尺子 創(chuàng)造一把水平尺子 只是簡(jiǎn)單地放置一把水平尺子。可以根據(jù)自己的意愿設(shè)置尺子的刻度。
Gtk Vertical Ruler 垂直尺子 創(chuàng)造一把垂直尺子 很象水平尺子,只是垂直放置。
Gtk Alignment Widget 排列控件 創(chuàng)造一個(gè)控件,在它里面可以設(shè)置子控件的排列。 這是一個(gè)容器控件,在里面你可以準(zhǔn)確地設(shè)置子控件的位置。 (基于容器控件的尺寸)。
Gtk Event Box 事件盒 這個(gè)控件可以捕獲事件 這個(gè)控件允許你為另一個(gè)沒(méi)有窗口的控件捕獲事件。
Gtk Calendar 日歷 創(chuàng)造一個(gè)日歷控件 你可以用 gtk_calender_get_date()來(lái)獲得用戶(hù)選擇的日期。你也可以用不同的信號(hào)如day_selected等來(lái)標(biāo)記日期及其它。
Gtk Progress Bar 進(jìn)度條 顯示事件進(jìn)度的條 可以設(shè)為顯示動(dòng)態(tài)事件(如前后移動(dòng)的條)或事情完成百分率。如果設(shè)為百分比模式,用gtk_progress_set_percentage()或gtk_progress_set_value()來(lái)更新。.
Gtk Layout 布局 創(chuàng)造一個(gè)布局控件 這是一個(gè)容器控件,你可以布置其它控件。我自己對(duì)它不熟悉。
Gtk Aspect Frame 方向框架 創(chuàng)造一個(gè)框架,里面的子控件可以保持它的方向 這是一個(gè)容器控件,可以控制子控件(如放在里面的控件) 的方向。可以設(shè)置在Glade屬性窗口設(shè)置方向比率。
Popup Menu Icon 彈出菜單 創(chuàng)造一個(gè)彈出菜單 典型地用在當(dāng)用戶(hù)在什么上面點(diǎn)擊右鍵。至少?gòu)腉lade角度,這個(gè)菜單很象菜單條上的下拉菜單。
Gtk Arrow 箭頭 創(chuàng)造一個(gè)箭頭 只是顯示一個(gè)指向四個(gè)基本方向其中之一的箭頭。
Gtk Curve Gtk曲線(xiàn) 能被用戶(hù)改變的曲線(xiàn) 更多信息請(qǐng)看文檔,這是一個(gè)專(zhuān)業(yè)控件,將來(lái)會(huì)被移出gtk+庫(kù)。
Gamma Curve Gamma曲線(xiàn) 可編輯的gamma曲線(xiàn) 更多信息請(qǐng)看文檔。它被用來(lái)在GIMP里編輯 gamma曲線(xiàn),是一個(gè)專(zhuān)業(yè)控件。最終它會(huì)被移出gtk+到另一個(gè)庫(kù)。
Horizontal Scrollbar 水平滾動(dòng)條 一個(gè)水平排列的滾動(dòng)條 沒(méi)有什么可說(shuō)的,它是一個(gè)滾動(dòng)條。
Vertical Scrollbar 垂直滾動(dòng)條 一個(gè)垂直排列的滾動(dòng)條 另一個(gè)滾動(dòng)條。
Gtk Color Selection Widget 顏色選擇 控制顏色選擇的控件 這是顏色選擇對(duì)話(huà)框的核心(見(jiàn)教程 Gtk+基本控件)。你可以使用color_changed信號(hào),gtk_color_selection_get_color()及其它函數(shù)。
Gtk Font Selection Widget 字體選擇控制字體選擇的控件這是字體選擇對(duì)話(huà)框的核心(見(jiàn)Gtk+基本控件)。使用gtk_font_selection_get_font(), gtk_font_selection_get_font_name()及其它。
Input Dialog 輸入對(duì)話(huà)框 允許配置為XInput擴(kuò)展設(shè)備的控件 見(jiàn)gtk+文檔。
Custom Widget 定制控件 定制控件放置的地方 如果你在使用不是Glade一部分的定制控件,可以用它為你的控件插入一個(gè)放置的地方。


控件更多的細(xì)節(jié):Gnome

Gnome控件用于標(biāo)準(zhǔn)化gnome界面。如果你正在創(chuàng)建一個(gè)Gnome程序最好使用它們。同Gtk+控件相比,它們簡(jiǎn)化一些東西,允許你把你的程序與Gnome資源及其它東西連接起來(lái)。

注意下面并不是控件完整的列表。 在Glade未包含的庫(kù)里也有可用的控件。沒(méi)有列出函數(shù) 參數(shù),也沒(méi)有列出每個(gè)控件的所有函數(shù)。如果需要這些信息請(qǐng)到這個(gè)教程的 庫(kù)部分。
Gnome
圖像 名稱(chēng) 目標(biāo) 函數(shù)及參考
Gnome Application Window 程序窗口 創(chuàng)建一個(gè)標(biāo)準(zhǔn)化的gnome程序窗口 你需要連接菜單和工具條上部件的信號(hào)到處理函數(shù)。詳見(jiàn)以上關(guān)于菜單和工具條部分。
Gnome About Dialog 關(guān)于對(duì)話(huà)框 創(chuàng)建一個(gè)gnome關(guān)于對(duì)話(huà)框 不需要做任何事情,只要填上內(nèi)容(版權(quán)、作者等)。按鈕信號(hào)已被自動(dòng)處理。
Gnome App Bar Gnome程序條創(chuàng)建一個(gè)標(biāo)準(zhǔn)gnome程序條這是一個(gè)程序條,把stock載入到Gnome程序窗口底部。在Glade屬性窗口你可以設(shè)為顯示一個(gè)進(jìn)度條和一個(gè)狀態(tài)消息的區(qū)域。這個(gè)區(qū)域可以用來(lái)給用戶(hù)狀態(tài)信息。函數(shù)中的gnome_appbar_push()和gnome_appbar_pop()處理這個(gè)。它也有小緩沖區(qū),更多信息見(jiàn)Gnome參考手冊(cè)。
Gnome Druid Gnome Druid 創(chuàng)建gnome druid系列的控件 當(dāng)程序第一次運(yùn)行時(shí),Gnome Druid用來(lái)使用用戶(hù)按他們的喜好定制程序。你需要指定需要多少頁(yè),再用屬性窗口為每個(gè)頁(yè)設(shè)置屬性及其它。需要連接到finish、prepare、 cancel等信號(hào)。同時(shí)在druid控件里加入標(biāo)準(zhǔn)頁(yè)里你所需要的文本框。
Gnome Color Picker Gnome顏色選擇器創(chuàng)建一個(gè)能打開(kāi)gtk顏色選擇對(duì)話(huà)框控件的按鈕這個(gè)控件是一個(gè)按鈕,能顯示已選擇的顏色和缺省顏色。使用不同的 gnome_color_picker_get_*()和 gnome_color_picker_set_*()函數(shù)來(lái)處理這個(gè)控件里的顏色。連接到本控件的信號(hào)是color_set。
Gnome Font Picker Gnome字體選擇器創(chuàng)建一個(gè)能打開(kāi)gtk字體選擇對(duì)話(huà)框控件的按鈕這個(gè)控件創(chuàng)建一個(gè)按鈕,能打開(kāi)字體選擇對(duì)話(huà)框。它同時(shí)也顯示當(dāng)前的字體。使用 gnome_font_picker_get_font()、 gnome_font_picker_get_font_name()等。連接到本控件的信號(hào)是 font_set。
Gnome Icon Entry Gnome圖標(biāo)輸入框 創(chuàng)建一個(gè)'圖標(biāo)選擇器'按鈕 這個(gè)控件創(chuàng)建一個(gè)按鈕,能顯示當(dāng)前圖標(biāo),點(diǎn)擊能打開(kāi)一個(gè)圖標(biāo)選擇器。使用gnome_icon_entry_get_filename()等函數(shù)來(lái)控制這個(gè)控件。
Gnome Href Button Gnome超級(jí)連接 創(chuàng)建一個(gè)連接到網(wǎng)頁(yè)的按鈕 這個(gè)控件是一個(gè)按鈕,當(dāng)點(diǎn)擊會(huì)運(yùn)行用戶(hù)缺省瀏覽器并打開(kāi)一個(gè)網(wǎng)頁(yè)。你可以用gnome_href_set_url(), gnome_href_set_label()改變標(biāo)簽及地址。
Gnome Entry Box Gnome輸入框 創(chuàng)建一個(gè)下拉輸入框,并自動(dòng)管理"歷史"。 這是一個(gè)標(biāo)準(zhǔn)下拉框,不過(guò)輸入歷史記錄被Gnome資源管理及維護(hù)。可以使用標(biāo)準(zhǔn)下拉框信號(hào)及函數(shù),也可以使用任何 gnome_entry_*()函數(shù)之一。
Gnome File Entry Gnome文件輸入框 創(chuàng)建一個(gè)下拉框,'瀏覽'鍵用來(lái)查找文件 有一個(gè) browse_clicked信號(hào),可以用來(lái)改變通常打開(kāi)的文件選擇對(duì)話(huà)框。你也需要連接到gtk_entry信號(hào)(當(dāng)改變了一些東西)及其它。
Gnome PixMap Entry Gnome位圖輸入框 創(chuàng)建一個(gè)位圖預(yù)覽和輸入控件來(lái)選擇位圖 這個(gè)控件顯示一個(gè)所選位圖的預(yù)覽,需要的話(huà)輸入框部分返回一個(gè)文件名(它是一個(gè)簡(jiǎn)單的gnome文件輸入控件)。
Gnome Date Edit Gnome日期編輯創(chuàng)建一個(gè)可處理的日期和時(shí)間控件可以連接到date_changed和time_changed信號(hào)。注意它有一個(gè)彈出日歷按鈕(內(nèi)部管理)及一個(gè)下拉時(shí)間選項(xiàng)菜單(也是內(nèi)部管理)。選擇結(jié)果會(huì)顯示在日期和時(shí)間輸入框中。gnome_date_edit_get_date() 函數(shù)返回控件里輸入的時(shí)間。記住它是C中的time_t類(lèi)型。
Gnome Canvas Gnome畫(huà)布 創(chuàng)建一個(gè)可畫(huà)圖的控件 我對(duì)這個(gè)控件不熟悉,它的文檔需要被完成。對(duì)不起,我知道這兒有幾個(gè)界面需要的控件庫(kù),當(dāng)你需要這個(gè)控件它們值得一看。
Gnome Icon List 圖標(biāo)列表 創(chuàng)建一個(gè)圖標(biāo)列表控件 詳見(jiàn)gnome參考手冊(cè)。
Gnome Icon Selection 圖標(biāo)選擇 創(chuàng)建一個(gè)圖標(biāo)選擇控件 詳見(jiàn)gnome參考手冊(cè)。
Gnome Bonobo Control Bonobo控制 執(zhí)行一個(gè)眼鏡蛇控制控件 詳見(jiàn)bonoboui文檔,在這里。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2005-11-24 19:08 |只看該作者
控件更多的細(xì)節(jié):不推薦和已改變

這些控件要么是gtk+/gnome開(kāi)發(fā)者不推薦使用,因此在新代碼不會(huì)再用,要么是在 Glade1和Glade2之間逐漸消失。當(dāng)我發(fā)現(xiàn)消失的控件已被移動(dòng)到新庫(kù),我會(huì)注明的。
Deprecated
圖像 名稱(chēng) 目標(biāo) 函數(shù)和參考
Gtk List Widget 列表 創(chuàng)建一個(gè)列表,列表中的每一行都可以被處理。 常用信號(hào)是select_child、 selection_changed, unselect_child。函數(shù)包括 gtk_list_insert_items(), gtk_list_append_items(), gtk_list_remove_items(), gtk_list_select_item(),等。
Gtk Columned List 柱狀列表 一個(gè)多列的列表這個(gè)控件允許縱向排列列表(如一個(gè)文件選擇列表,可以同時(shí)顯示文件名、所有者和創(chuàng)建時(shí)間。).你需要在屬性窗口里指定選擇模式。這種模式表示在窗口里能否一次性選擇一個(gè)或多個(gè)條目(缺省是一個(gè))。GtkCList有很多信號(hào),是一個(gè)復(fù)雜的控件。詳見(jiàn) Gtk+參考手冊(cè)。
Gtk Columned Tree 柱狀樹(shù) 一個(gè)多列的樹(shù) 如果熟練掌握,這個(gè)控件確實(shí)很有用。但它很復(fù)雜,如果你需要在老 軟件里使用它,請(qǐng)看指南。
Preview 預(yù)覽 一個(gè)預(yù)覽控件 在不推薦使用它之前我從未使用過(guò)它,因此請(qǐng)查看指南。
Gnome Dialog Box 對(duì)話(huà)框 用預(yù)制gnome標(biāo)準(zhǔn)的按鈕創(chuàng)建一個(gè)對(duì)話(huà)框 需要連接句柄到按鈕,你也可以改變按鈕的標(biāo)簽和圖標(biāo),或根據(jù)需要 刪掉一二個(gè)。
Gnome Message Box 消息盒子 創(chuàng)建一個(gè)標(biāo)準(zhǔn)化的消息盒子 需要加入消息,選擇消息的類(lèi)型(警告、信息等),處理"ok"按鈕信號(hào)。
Gnome Property Box 屬性盒子 創(chuàng)建一個(gè)標(biāo)準(zhǔn)化窗口來(lái)處理不同的編程屬性 需要處理盒子底部的按鈕及其它在盒子里所創(chuàng)建控件的信號(hào)。 它由gtk控件創(chuàng)建,請(qǐng)看上述關(guān)于按鈕等控件的部分。
Gnome Pixmap Gnome位圖 從不同的資源載入和顯示位圖 這個(gè)控件能正確地載入、改變大小和創(chuàng)建不同類(lèi)型的圖片。
消失
Gtk Label with Accelerator 帶快捷鍵的標(biāo)簽 創(chuàng)建一個(gè)快捷鍵的標(biāo)簽 標(biāo)簽顯示一個(gè)快捷鍵在右邊(如Save Ctrl-S)。它用在菜單之類(lèi)中。
Gtk Image Widget 圖片控件 創(chuàng)建一個(gè)可以放一幅圖片的控件 這個(gè)控件內(nèi)有一個(gè)圖片,可以被一個(gè)程序處理。
Gnome Number Entry Gnome數(shù)字輸入框 用計(jì)算器按鈕創(chuàng)建一個(gè)數(shù)字輸入框 這個(gè)控件有一個(gè)計(jì)算器按鈕,讓用戶(hù)把計(jì)算結(jié)果直接加入輸入框中。 它不作任何限制檢查。用gnome_number_entry_get_number()來(lái)獲取數(shù)字
Gnome Dial 撥號(hào) 創(chuàng)建一個(gè)撥號(hào)控件 這是一個(gè)類(lèi)例撥號(hào),象一個(gè)老式收音機(jī)調(diào)諧器撥號(hào)。 它只能被設(shè)為查看,或把它轉(zhuǎn)為一個(gè)數(shù)值。使用 gtk_dial_get_percentage(), gtk_dial_set_percentage(), gtk_dial_set_value(), and gtk_dial_get_value()來(lái)處理數(shù)字。
Gtk Clock 時(shí)鐘 創(chuàng)建一個(gè)數(shù)字時(shí)鐘計(jì)數(shù)或顯示準(zhǔn)確時(shí)間你可以在Glade屬性窗口來(lái)設(shè)置顯示格式。要用它做為計(jì)時(shí)器,在屬性窗口設(shè)置秒和時(shí)間間隔。Gtk_clock_start() 使時(shí)鐘運(yùn)行,你需要在一些事件中調(diào)用它(如一個(gè)ok按鈕或其它),gtk_clock_stop()停止。
Gnome Calculator Gnome計(jì)算器 創(chuàng)建一個(gè)計(jì)算器控件 你可以用result_changed信號(hào)來(lái)獲得結(jié)果。 使用gnome_calculator_get_result()函數(shù)來(lái)實(shí)際獲取它。
Gnome Less Gnome Less 創(chuàng)建一個(gè)控件來(lái)顯示一個(gè)文件或流。這個(gè)控件象unix的'more'命令。用戶(hù)可以瀏覽一個(gè)文本文件?梢栽贕lade屬性窗口指定字體,用gnome_less_show_file() 來(lái)顯示文件, gnome_less_show_filestream()來(lái)顯示文件流等等。
Gnome Paper Selector Gnome紙張選擇器 為打印創(chuàng)建一個(gè)紙張選擇控件 在你的代碼中,找到這個(gè)控件,用不同的 gnome_paper_selector_get_*()函數(shù)來(lái)把選擇結(jié)果傳到你的打印代碼中。
Gnome Animator Gnome動(dòng)畫(huà) 創(chuàng)建一個(gè)控件,可以把動(dòng)畫(huà)加入到程序 查看文檔,因?yàn)槲覍?duì)它不熟。




摘要和資源: 用Glade2開(kāi)發(fā)圖形用戶(hù)界面

希望這個(gè)教程會(huì)讓你朝正確的方向來(lái)學(xué)習(xí)使用Glade。對(duì)下一步,對(duì)一個(gè)初學(xué)者我建議以下資源。
網(wǎng)上有一些Glade, Gtk+和Gnome資源。 需要幫助請(qǐng)看以下:

* Glade主頁(yè)
* Gnome開(kāi)發(fā)者的資源
* Gtk+ 參考手冊(cè)
* Gdk 參考手冊(cè)
* Glib 參考手冊(cè)
* Libglade 參考手冊(cè)
* Gnome用戶(hù) 界面庫(kù)參考指南

glade郵件列表在http://lists.ximian.com/mailman/listinfo/glade-users. 它是一個(gè)很好的資源。

Havoc Pennington寫(xiě)了一本《Gtk+/Gnome Application Development》。這本書(shū)是另一個(gè)關(guān)于Gtk+開(kāi)發(fā)的很好的信息資源。雖然它完全沒(méi)有提到Glade,它闡述了控件如何工作,參數(shù)是什么,如何設(shè)計(jì)及實(shí)現(xiàn)一個(gè)復(fù)雜的程序,glib 提供什么及其它有趣的內(nèi)容。我強(qiáng)力推薦它。如果可以就買(mǎi)它,如果不行這兒有一個(gè)開(kāi)源的html版本在這里。



作者:

這個(gè)教程由Rikke D. Giles編寫(xiě),是KPLUG的一部分,是在Linuxnorthwest上禮物的一部分,也是為更多寫(xiě)作準(zhǔn)備工作的一部分。
版權(quán):

這個(gè)教程一系列網(wǎng)頁(yè)版權(quán)歸Rikke D. Giles所有。教程的任何故障和問(wèn)題請(qǐng)通知她到rgiles@users.sourceforge.net.
Glade:

Glade由Damon Chaplin編寫(xiě)和維護(hù),加油!
致謝:

控件圖片來(lái)自Glade的截圖和Glade提供的png文件。其它圖片由作者截圖。

我使用gvim來(lái)做所有的編碼工作。在www.gvim.org能找到它。

我使用blufish來(lái)作html編輯。它是一個(gè)很好的編輯器,在bluefish.openoffice.nl。
Insipiration:

感謝KPLUG的支持。You guys ROCK! 感謝我的 sig_other,能夠容忍家里這樣一個(gè)geek。還要感謝我的媽媽?zhuān)m然她不懂一點(diǎn)編程或計(jì)算機(jī),從頭到尾是個(gè)geek。She _gets_ why I do this.

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2005-11-24 19:10 |只看該作者
10000字限制,真煩人,累死俺了

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2005-11-24 21:18 |只看該作者
正在學(xué)GTK  謝謝樓主了

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2005-11-24 22:57 |只看該作者
原帖由 elechi 于 2005-11-24 21:18 發(fā)表
正在學(xué)GTK  謝謝樓主了



去俺Blog上有很多Gtk+的入門(mén)教程,當(dāng)然更詳細(xì)的參考http://www.gtk.org/
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP