Gtk miscellaneous widget出自TechWiki
[編輯] Miscellaneous Widgets[編輯] Label以下為如何宣告 Label: GtkWidget *gtk_label_new( const char *str ); GtkWidget *gtk_label_new_with_mnemonic( const char *str ); 參數為在 label 中欲顯示的字串,若要在 label 產生後修改其字串,則: void gtk_label_set_text( GtkLabel *label, const char *str ); 參數為欲修改的 label 及新字串。 要取得該 label 的字串,使用: const gchar* gtk_label_get_text( GtkLabel *label ); label 中的字串可以調整位置,使用: void gtk_label_set_justify( GtkLabel *label, GtkJustification jtype ); /* jtype 包括: GTK_JUSTIFY_LEFT GTK_JUSTIFY_RIGHT GTK_JUSTIFY_CENTER (the default) GTK_JUSTIFY_FILL */ label 字串會自動被格線圍繞,也可以自己設定: void gtk_label_set_line_wrap (GtkLabel *label, gboolean wrap); /* 參數wrap 可設為 TRUE 換 FALSE */ 你也可以設定字串的底線格式: void gtk_label_set_pattern (GtkLabel *label, const gchar *pattern);
[編輯] ArrowArrow widget 會畫出一個箭頭,它不會發送訊號,通常和 button 一起使用。 以下為如何宣告 Arrow: GtkWidget *gtk_arrow_new( GtkArrowType arrow_type, GtkShadowType shadow_type ); /* 參數 arrow_type 設定箭頭的方向: GTK_ARROW_UP GTK_ARROW_DOWN GTK_ARROW_LEFT GTK_ARROW_RIGHT 參數 shadow_type 設定箭頭的外觀: GTK_SHADOW_IN GTK_SHADOW_OUT (the default) GTK_SHADOW_ETCHED_IN GTK_SHADOW_ETCHED_OUT */ 或者於 arrow 宣告後改變其設定: void gtk_arrow_set( GtkArrow *arrow, GtkArrowType arrow_type, GtkShadowType shadow_type );
[編輯] TooltipTooltip 是當你將游標移動至某個 widget 上會彈跳出一段字串。 以下為如何宣告 Tooltip: GtkTooltips *gtk_tooltips_new( void ); 當產生一個 tooltip 後,將它附著在某個 widget 上: void gtk_tooltips_set_tip( GtkTooltips *tooltips, GtkWidget *widget, const gchar *tip_text, const gchar *tip_private ); /* 參數 tooltips 為之前產生的 tooltip,參數 widget 為欲附著此 tooltip 的 widget, 參數 tip_text 為 toolitip 欲顯示的文字,參數 tip_private 為一字串,是當要使用 GtkTipsQuery 時,可做為識別之用,可先設為 NULL。 */ 與 tooltips 相關的還有兩個 functions,用來設定 tooltips 顯示與否: void gtk_tooltips_enable( GtkTooltips *tooltips ); void gtk_tooltips_disable( GtkTooltips *tooltips );
[編輯] Progress BarProgress bar 用來表示目前工作執行的狀態。 以下為如何宣告 Progress bar: GtkWidget *gtk_progress_bar_new( void ); 使用 _set_fraction 設定 progress bar 的進度: void gtk_progress_bar_set_fraction ( GtkProgressBar *pbar, gdouble fraction ); /* 參數 pbar 為欲設定的 progress bar 參數 fraction 為從0~100%,已完成多少進度,數值範圍從 0~1。 */ 使用 _set_orientation 設定 progress bar 的方向: void gtk_progress_bar_set_orientation( GtkProgressBar *pbar, GtkProgressBarOrientation orientation ); /* 參數 orientation 為 progress bar 數值變動的方向,可為以下四個其中之一: GTK_PROGRESS_LEFT_TO_RIGHT GTK_PROGRESS_RIGHT_TO_LEFT GTK_PROGRESS_BOTTOM_TO_TOP GTK_PROGRESS_TOP_TO_BOTTOM */ Progress bar 也可以用動態移動的方式來表現,設定一個 progress bar 使其能動態移動: void gtk_progress_bar_pulse ( GtkProgressBar *progress ); 設定動態移動的距離: void gtk_progress_bar_set_pulse_step( GtkProgressBar *pbar, gdouble fraction ); 另外,在非動態移動下,可以設定文字字串顯示於 progress bar 上: /* 使用 _set_text 設定文字字串 */ void gtk_progress_bar_set_text( GtkProgressBar *progress, const gchar *text ); /* 使用 _get_text 取得文字字串 */ const gchar *gtk_progress_bar_get_text( GtkProgressBar *pbar );
[編輯] DialogDialog 如同 window 一樣,並包裝了一個 vbox、separator 及一個 hbox(action_area)。 Dialog 的架構如下: struct GtkDialog { GtkWindow window; GtkWidget *vbox; GtkWidget *action_area; }; 以下為如何宣告一個 dialog: GtkWidget *gtk_dialog_new( void ); 依上述產生一個空的 dialog 後,使用這個 dialog 的方法如下: /* 將 label 加入 dialog 中 */ label = gtk_label_new ("this is dialog"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label, TRUE, TRUE, 0); gtk_widget_show (label); /* 將 button 加入 dialog 中 */ button = gtk_button_new (); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button, TRUE, TRUE, 0); gtk_widget_show (button);
[編輯] RulerRuler 用來標示游標所在的位置。又分為垂直和水平兩種尺標,對應 window 的高度與寬度,並用一個三角形標識指出游標的正確位置。 以下為如何宣告 ruler: /* 垂直尺標 */ GtkWidget *gtk_hruler_new( void ); /* 水平尺標 */ GtkWidget *gtk_vruler_new( void ); 使用 _set_metric 定義其測量單位: void gtk_ruler_set_metric( GtkRuler *ruler, GtkMetricType metric ); /* 參數 metric 可以是: GTK_PIXELS GTK_INCHES GTK_CENTIMETERS */ 使用 _set_range 定義尺標的初始位置及範圍: void gtk_ruler_set_range( GtkRuler *ruler, gdouble lower, gdouble upper, gdouble position, gdouble max_size ); /* 參數 lower 與 upper 定義尺標的範圍 參數 max_size 定義最大可顯示的數值 參數 position 定義三角形標識的初始位置 */
[編輯] StatusbarStatusbar 用來顯示文字訊息,並以堆疊的方式(push/pop)儲存訊息。 以下為如何宣告一個 statusbar: GtkWidget *gtk_statusbar_new( void ); 為了讓其它的 functions 呼叫,需要一個 context id 做識別: guint gtk_statusbar_get_context_id( GtkStatusbar *statusbar, const gchar *context_description ); statusbar 提供三種操作方式: /* _push() 將訊息加入 statusbar,並傳回一 message_id。 */ guint gtk_statusbar_push( GtkStatusbar *statusbar, guint context_id, const gchar *text ); /* _pop() 移除堆疊中位置最高的訊息。 */ void gtk_statusbar_pop( GtkStatusbar *statusbar) guint context_id ); /* _remove() 根據 message_id,移除特定的訊息。 */ void gtk_statusbar_remove( GtkStatusbar *statusbar, guint context_id, guint message_id );
[編輯] Text EntryEntry widget 允許在單行的 text box 中輸入和顯示文字。 以下為如何宣告一個 entry : GtkWidget *gtk_entry_new( void ); 使用 _set_text 改變文字內容: void gtk_entry_set_text( GtkEntry *entry, const gchar *text ); 使用 _get_text 取得文字內容: const gchar *gtk_entry_get_text( GtkEntry *entry ); 使用 _set_editable 設定文字是否可以被修改: void gtk_editable_set_editable( GtkEditable *entry, gboolean editable ); /* 參數 editable 可為 TRUE 或 FALSE */ 使用 _set_visibility 設定文字內容是否公開,常用於密碼輸入: void gtk_entry_set_visibility( GtkEntry *entry, gboolean visible ); /* 參數 visible 設為 FALSE 時,文字以 '*' 號取代 */ 使用 _select_region 設定選取文字: void gtk_editable_select_region( GtkEditable *entry, gint start, gint end ); /* 參數 start 和 end 設定欲選取文字的起點與終點 */
[編輯] Spin ButtonSpin Button widget 讓使用者在一定的範圍內選取數值,它包含一個 text entry box 以及 up、down arrow buttons。選擇某一個 arrow button 會改變 text entry 中的數值,text entry 也允許直接修改。 Spin Button 使用 Adjustments 物件以存取 spin button 的資訊: GtkObject *gtk_adjustment_new( gdouble value, gdouble lower, gdouble upper, gdouble step_increment, gdouble page_increment, gdouble page_size ); /* 各參數意義為: value: Spin Button 的起始值 lower: 範圍的最小數值 upper: 範圍的最大數值 step_increment: 按下滑鼠 button 1 時遞增/遞減的數值 page_increment: 按下滑鼠 button 2 時遞增/遞減的數值 page_size: 未使用 */ 以下為如何宣告一個 spin button: GtkWidget *gtk_spin_button_new( GtkAdjustment *adjustment, gdouble climb_rate, guint digits ); /* 參數 climb_rate 定義 spin button 數值增加的幅度,數值範圍是 0.0~1.0 參數 digits 定義小數點後有幾位 */ 於產生一個 spin button 後,重新配置它: void gtk_spin_button_configure( GtkSpinButton *spin_button, GtkAdjustment *adjustment, gdouble climb_rate, guint digits ); /* 參數定義同上 */ 使用以下兩個 functions 設定及取得 Adjustments : void gtk_spin_button_set_adjustment( GtkSpinButton *spin_button, GtkAdjustment *adjustment ); GtkAdjustment *gtk_spin_button_get_adjustment( GtkSpinButton *spin_button ); 設定小數點後的位數: void gtk_spin_button_set_digits( GtkSpinButton *spin_button, guint digits) ; 設定 spin button 目前顯示數值: void gtk_spin_button_set_value( GtkSpinButton *spin_button, gdouble value ); 以浮點數或整數的方式取得目前 spin button 的數值: /* 以浮點數方式取得目前 spin button 的數值 */ gdouble gtk_spin_button_get_value ( GtkSpinButton *spin_button ); /* 以整數方式取得目前 spin button 的數值 */ gint gtk_spin_button_get_value_as_int( GtkSpinButton *spin_button ); 根據 spin button 目前的顯示數值,相對修改其數值: void gtk_spin_button_spin( GtkSpinButton *spin_button, GtkSpinType direction, gdouble increment ); /* 參數 direction 可為以下其中之一 GTK_SPIN_STEP_FORWARD GTK_SPIN_STEP_BACKWARD GTK_SPIN_PAGE_FORWARD GTK_SPIN_PAGE_BACKWARD GTK_SPIN_HOME GTK_SPIN_END GTK_SPIN_USER_DEFINED GTK_SPIN_STEP_FORWARD 和 GTK_SPIN_STEP_BACKWARD : 根據參數 increment 修改 spin button 的數值,若 increment = 0,則根據 Adjestment 中的參數 step_increment 做修改。 GTK_SPIN_PAGE_FORWARD 和 GTK_SPIN_PAGE_BACKWARD : 修改 spin button 的參數 increment。 GTK_SPIN_HOME : 設定 spin button 的範圍最小數值。 GTK_SPIN_END : 設定 spin button 的範圍最大數值。 GTK_SPIN_USER_DEFINED : 依特定值修改 spin button 的數值 */ 其他相關 functions: /* 設定 psin button text 只允許輸入數值 */ void gtk_spin_button_set_numeric( GtkSpinButton *spin_button, gboolean numeric ); /* 設定 spin button 是否包函範圍內最高與最低數值 */ void gtk_spin_button_set_wrap( GtkSpinButton *spin_button, gboolean wrap ); /* 設定 spin button 的數值至最接近的 step_increment*/ void gtk_spin_button_set_snap_to_ticks( GtkSpinButton *spin_button, gboolean snap_to_ticks ); /* 設定 spin button 的 update policy policy 有兩種 GTK_UPDATE_ALWAYS 或 GTK_UPDATE_IF_VALID GTK_UPDATE_IF_VALID 依 text 中數入的數值做修改,且數值必須在 Adjustment 範圍內,否則保持原值 GTK_UPDATE_ALWAYS 忽視 text 中的內容轉換為數值時所產生的錯誤 */ void gtk_spin_button_set_update_policy( GtkSpinButton *spin_button, GtkSpinButtonUpdatePolicy policy ); /* 要求 spin button 使用 update policy */ void gtk_spin_button_update( GtkSpinButton *spin_button );
[編輯] Combo BoxCombo box 可視為其它 widgets 的集合,它包含一個 text entry box 和 pull down menu。 Combo box 的架構如下: struct _GtkCombo { GtkHBox hbox; GtkWidget *entry; GtkWidget *button; GtkWidget *popup; GtkWidget *popwin; GtkWidget *list; ... }; 以下為如何宣告一個 combo box: GtkWidget *gtk_combo_new( void ); 使用 _set_text 設定 combo box 中 entry 的字串: gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (combo)->entry), "My String."); 使用 _set_popdown_strings 設定 popdown list 中的值: void gtk_combo_set_popdown_strings( GtkCombo *combo, GList *strings ); ..........
[編輯] CalendarCalendar widget 能顯示每月日期等資訊。 以下為如何宣告一個 calendar: GtkWidget *gtk_calendar_new( void ); 使用 _display_options 改變 calendar 的樣式與操作方式: void gtk_calendar_display_options( GtkCalendar *calendar, GtkCalendarDisplayOptions flags ); /* 參數 flags 可為下列5個選項的組合,使用 '|' 來進行 GTK_CALENDAR_SHOW_HEADING 指定 calendar 會顯示年、月 GTK_CALENDAR_SHOW_DAY_NAMES 指定星期會以縮寫的三個字元表示(eg Mon,Tue, etc.) GTK_CALENDAR_NO_MONTH_CHANGE 指定使用者不能改變目前顯示的月份 GTK_CALENDAR_SHOW_WEEK_NUMBERS 指定該週的週數於 calendar 的左下方顯示(eg. Jan 1 = Week 1,Dec 31 = Week 52). GTK_CALENDAR_WEEK_START_MONDAY 指定每週的第一天是星期一,預設是星期日 */ 下面兩個 functions 用來設定目前顯示的日期: /* 回傳一 boolean 值指示選擇是否成功 */ gint gtk_calendar_select_month( GtkCalendar *calendar, guint month, guint year ); /* 指定選擇目前月份的某一天,day = 0 時則取消選取目前選擇的日期 */ void gtk_calendar_select_day( GtkCalendar *calendar, guint day ); 當某個日期被選取,該日期會以反背景色標示出來,以下 functions 提供被選取日期的操作: gint gtk_calendar_mark_day( GtkCalendar *calendar, guint day); gint gtk_calendar_unmark_day( GtkCalendar *calendar, guint day); void gtk_calendar_clear_marks( GtkCalendar *calendar); 被選取的日期以陣列的方式儲存於 GtkCalendar 中,該陣列共有31個元素,透過比對陣列中的元素來判斷日期是否被選取,範例如下: GtkCalendar *calendar;
calendar = gtk_calendar_new ();
...
/* Is day 7 marked? */
if (calendar->marked_date[7-1])
/* day is marked */
使用 _get_date 取得目前選取日期的年、月、日: void gtk_calendar_get_date( GtkCalendar *calendar, guint *year, guint *month, guint *day );
[編輯] Color SelectionColor selection widget 讓使用者經由操作RGB (Red, Green, Blue) 和 HSV (Hue, Saturation, Value)的方式改變顏色,並於顏色改變發送 "color_changed" 訊號。 建立一個新的 color selection 有兩種方法,GtkColorSelection 和 GtkColorSelectionDialog,使用 GtkColorSelection 方法,還需要繼承 VBOX 才能正確的被使用,因此較常用的方法為 GtkColorSelectionDialog。 以下為使用 GtkColorSelectionDialog 宣告一個 color selection: GtkWidget *gtk_color_selection_dialog_new( const gchar *title ); 使用 _set_has_opacity_control 設定顏色是否以透明的方式顯示: void gtk_color_selection_set_has_opacity_control( GtkColorSelection *colorsel, gboolean has_opacity ); /* 參數 has_opacity 預設為關閉 FALSE */
/* 設定目前顏色,透過一個 GdkColor 指標 */ void gtk_color_selection_set_current_color( GtkColorSelection *colorsel, GdkColor *color ); /* 設定目前透明度,範圍從0~65535 */ void gtk_color_selection_set_current_alpha( GtkColorSelection *colorsel, guint16 alpha ); /* 取得目前顏色 */ void gtk_color_selection_get_current_color( GtkColorSelection *colorsel, GdkColor *color ); /* 取得目前透明度 */ void gtk_color_selection_get_current_alpha( GtkColorSelection *colorsel, guint16 *alpha );
[編輯] File SelectionFile selection widget 包含 Ok、Cancel、Help 等 button,並顯示一個 File dialog box 以提供檔案存取操作。 以下為如何宣告一個 file selection box: GtkWidget *gtk_file_selection_new( const gchar *title ); 下列 functions 用來設定或取得檔案名稱: /* 設定預設的檔案名稱 */ void gtk_file_selection_set_filename( GtkFileSelection *filesel, const gchar *filename ); /* 取得使用者輸入的檔案名稱 */ gchar *gtk_file_selection_get_filename( GtkFileSelection *filesel ); |
