GTK 重拾 10 GTK 中的元件(二)

2021-09-20 00:09:43 字數 4517 閱讀 6152

(一):寫在前面

在上面乙個小節中,我們講解了在gtk+2.0中的一些常用的構件,在這一小節中,我們將繼續學習gtk+中常用的稍微複雜的構件,這裡我們主要是學習gtkcomboboxgtkentrygtkiconview,gtkimage,gtkseparator,gtkstatusbar。好了,現在我們開始我們的學習之旅。

(二):gtkcombobox

gtkcombobox構件的作用是讓程式使用者根據不同的需求從很多選項中進行選擇。

下面我們來看一下如何使用gtkcombobox。

#include void combo_selected(gtkwidget *widget,gpointer window)

int main(int argc,char *ar**)

上面的例子主要是完成了乙個下拉選擇框和乙個標籤。在這裡下拉選擇框有六個選項。標籤中的內容就是我們選擇的那個選項的內容。

combo = gtk_combo_box_new_text();
在上面,我們生成了乙個gtkcombobox構件,然後又把linux發行版本的名字新增進去。

gchar *text = gtk_combo_box_get_active_text(gtk_combo_box(widget));

gtk_label_set_text(gtk_label(window),text);

g_free(text);

上面的**表明,我們從所選的選項中獲得了文字內容,並且把此內容傳遞給了標籤構件。在gtk+的api中,函式gtk_combo_box_get_active_text()的返回值是當前最新啟用選項所對應的內容。同時,我們也有必要釋放對應的記憶體空間。

我們來看一下執行效果:

(三):gtkhseparator

gtkhseparator構件是一條水平分割線。這也屬於一種布局構件。與之對應的豎直分割線構件為gtkvseparator

我們來看一下該構件的使用方法:

#include 

int main(int argc,char *ar**)

在上面的**中,我們展示了兩個label構件,同時這兩個構件被分割線分隔。

gtk_label_set_line_wrap(gtk_label(label2),true);
我們使用上面的方法來使文字換行。

hseparator =gtk_hseparator_new();
通過該方法來生成乙個水平分割線,最後把分割器放置在兩個標籤中間。

我們來看一下程式的執行效果:

(四):gtkentry

gtkentry構件就是乙個只有單行文字輸入框的構件。他主要用來進行單行文字的輸入。

#include 

int main(int argc,char *ar**)

我們先來看一下執行效果:

通過**可以看出,gtkentry的使用方式和常規構件的使用方式是一樣的,使用起來比較簡單,而且使用起來比較方便。

(五):gtkimage

gtkimage構件功能就是用來顯示影象的。

我們來展示一下:

#include int main(int argc,char *ar**)

在這裡我們通過gtkimage來顯示一張。

gtk_container_set_border_width(gtk_container(window),2);
我們給這個設定了2px的邊框大小。

這樣,我們通過該方法來從乙個影象檔案中載入了影象。

(六):gtkstatusbar

gtkstatusbar的功能是用來顯示狀態資訊用的。他通常被自動強制放置於應用程式視窗的底部。

#include 

void button_pressed(gtkwidget *widget,gpointer window)

int main(int argc,char *ar**)

在上面的例子中,我們展示了兩個按鈕和乙個狀態列。當我們單擊按鈕的時候,相關資訊就在狀態列中顯示出來。

str = g_strdup_printf("button %s clicked",gtk_button_get_label(gtk_button(widget)));
這樣我們就生成了一條訊息。

gtk_statusbar_push(gtk_statusbar(window),gtk_statusbar_get_context_id(gtk_statusbar(window),str),str);
接著,通過這個方法將訊息放置在狀態列中。

(七):gtkiconview

gtkiconview的功能是用來在乙個柵格中顯示一系列的圖示。

#include 

#include

enum;

gtktreemodel *init_model(void)

return gtk_tree_model(list_store);

}int main(int argc,char *ar**)

在這裡我們顯示了200個圖示。

p1 = gdk_pixbuf_new_from_file("ubuntu.png",&err);

p2 = gdk_pixbuf_new_from_file("gnumeric.png",&err);

p3 = gdk_pixbuf_new_from_file("blender.png",&err);

p4 = gdk_pixbuf_new_from_file("inkscape.png",&err);

這樣,我們就從磁碟中載入了四個圖示。

list_store =gtk_list_store_new(num_cols,g_type_string,gdk_type_pixbuf);
我們講儲存文字和畫素緩衝區的資料。

gtk_list_store_set(list_store,&iter,col_display_name,"ubuntu",col_pixbuf,p1,-1);

在上面的**中,正是把新圖示新增到準備顯示的緩衝區中。

icon_view = gtk_icon_view_new_with_model(init_model());

gtk_container_add(gtk_container(sw),icon_view);

gtk_icon_view_set_text_column(gtk_icon_view(icon_view),col_display_name);

gtk_icon_view_set_pixbuf_column(gtk_icon_view(icon_view),col_pixbuf);

最後,我們生成乙個gtkiconview構件,然後把圖示和圖示文字整合在一起。

(八):寫在後面

這裡,我們就把很多常用的元件學習完成了,後面我們將要學習使用gtk+中的樹狀列表構件。其實到了這裡,我們就應該能夠使用gtk+來編寫我們的圖形程式了。

GTK 重拾 09 GTK 中的元件(一)

一 寫在前面 在這篇文章中主要介紹了gtk 程式中的各種構件,這是講解構件的第乙個部分,另外一部分將在下乙個小節中講到。構件是建立乙個gui程式的基礎。在gtk 的長期發展過程中,一些特定的構件逐漸成為了大多數程式設計工具集和幾乎所有的作業系統的公用標準了。例如,按鈕,選擇框或者是乙個滑動條。對於g...

GTK 重拾 05 工具欄的使用

一 寫在前面 在我們上乙個小節的學習當中,學習了解了如何使用選單欄來管理我們的視窗,但是相對來說,gtk 2.0在處理選單欄的時候有些小麻煩,很容易使人迷惑,不過大體了解一下這個意思就行,只要能夠會使用選單欄就行,如果真是鬧不明白他們之間的包含關係,就直接使用之前的 進行新增就行。然後就是後面我們會...

指令碼語言的GUI元件 GTK習作

這幾天在學習gtk,順便寫了個習作,用於指令碼語言顯示圖型化介面的元件,目前包含顯示messagebox,checkbox,radiobutton,combobox 及文字框輸入功能,這樣在寫指令碼時,一些簡單的輸入就可以使用圖型化的方式完成了。樣例 指令碼 bin bash rotatedirec...