2011-08-07 116 views
3

我正在按照指令here寫一個Gtk +菜單欄。GTK +菜單欄看起來很糟糕

// "FALSE, TRUE" and "FALSE, FALSE" actually makes no difference 
gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, 
        TRUE, FALSE, 0); 

包裝酒吧到垂直框菜單欄看起來很可怕,就像這樣:

slim menu bar

當我更改爲:

gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, 
        TRUE, TRUE, 0); 

它看起來像:

enter image description here

那麼,如何讓工具欄獲得更小的空間分配?

+0

這豈不有一個特殊的位置把它?我對GTK的這方面並不熟悉,但我知道Qt的QMainWindow有一個菜單欄的特定位置;它有三個位置 - 菜單欄,中央小部件和狀態欄。 –

+0

@FrédéricHamidi:哎呀。我犯了一個錯誤。抱歉。我修改了我的問題。 – wecing

回答

9

如果我正確理解你的問題,你想:

  1. 擺脫周圍的菜單欄中的淺灰色填充。
  2. 在不擴展菜單欄來填充可用空間的情況下執行上述操作。

因此,您其他部件(即按鈕,您的菜單欄下方欄)的包裝方式進場(爲了清楚起見,我將把它們分別button_hboxmenu_bar,因爲兩者可以符合「工具欄」)。

理解傳遞給gtk_box_pack_start()布爾佈局的論點是這裏最重要的:

  • 第一個,expand,是TRUE如果佈局計算後的部件要消耗留在容器中的空白區域。以這種方式包裝的小部件在剩餘空間中平等競爭。

  • 第二個,fill,是TRUE如果小部件應該填充它消耗的佈局空間而不是居中放置(出現淺灰色填充)。

的想法是,你有一個(或更多,但我們堅持一個現在)主要部件在main_vbox,並且部件是擠滿了兩個expandfill設置爲TRUE。其周圍的衛星小部件與expand設置爲FALSEfill設置爲TRUE。例如:

+-------------------------------------------+ 
| Menu bar: expand = FALSE, fill = TRUE | 
+-------------------------------------------+ 
| Toolbar: expand = FALSE, fill = TRUE  | 
+-------------------------------------------+^
|           | | 
|           | | The height of this widget 
| Main widget: expand = TRUE, fill = TRUE | | varies depending on the 
|           | | height of its container. 
|           | | 
+-------------------------------------------+ v 
| Status bar: expand = FALSE, fill = TRUE | 
+-------------------------------------------+ 

在你的情況,因爲你不想menu_bar填補了可用空間,button_hbox應該這樣做:

// Menu bar: satellite widget, expand = FALSE, fill = TRUE 
gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0); 

// Button bar: main widget, expand = TRUE, fill = TRUE 
gtk_box_pack_start(GTK_BOX(main_vbox), button_hbox, TRUE, TRUE, 0); 
+2

爲醜陋的ASCII藝術道歉,我是老派:) –

+2

我喜歡ASCII藝術:-P – wecing

+2

非常漂亮的寫作,額外的ASCII藝術:) – kalev

相關問題