GTK+菜单栏外观丑陋。

3

我正在按照这里的指导编写一个Gtk+菜单栏。

当将该菜单栏放入VBox时,使用以下代码:

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

菜单栏看起来很糟糕,就像这样:

细菜单栏

当我更改为以下内容时:

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

看起来像这样:

在此输入图片描述

那么,如何使工具栏获得更小的空间?


它没有专门的位置放置吗?我不熟悉GTK的这个方面,但我知道Qt的QMainWindow有一个特定的位置可以放置菜单栏;它有三个位置 - 菜单栏、中央窗口部件和状态栏。 - Chris Morgan
@Frédéric Hamidi:糟糕,我犯了一个错误。抱歉。我修改了我的问题。 - wecing
1个回答

9
如果我正确理解你的问题,你想做以下事情:
  1. 消除菜单栏周围的浅灰色填充。
  2. 在不扩展菜单栏以填充可用空间的情况下实现以上操作。
因此,您的其他窗口小部件(即菜单栏下面的按钮栏)的打包模式发挥了作用(为了清晰起见,我将其分别称为button_hbox和menu_bar,因为两者都可以作为“工具栏”)。了解传递给gtk_box_pack_start()的布尔布局参数至关重要:
  • 第一个参数expand,如果小部件应该在布局计算后占用其容器中剩余的空白空间,则为TRUE。以这种方式打包的窗口小部件平等地竞争剩余空间。

  • 第二个参数fill,如果小部件应该填充它消耗的布局空间而不是居中显示在其中(这就是浅灰色填充的原因)。

这个想法是在 main_vbox 中有一个(或多个,但现在我们先用一个)主要小部件,并且该小部件被打包时设置了 expandfillTRUE。其周围的卫星小部件则被打包时将 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艺术很丑,我是老派的 :) - Frédéric Hamidi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接