Панель меню GTK + выглядит ужасно - PullRequest
3 голосов
/ 07 августа 2011

Я пишу строку меню Gtk +, следуя инструкции здесь .

При упаковке бара на VBox с

// "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

Итак, как сделать так, чтобы на панели инструментов выделялось меньше места?

1 Ответ

9 голосов
/ 07 августа 2011

Если я правильно понимаю ваш вопрос, вы хотите:

  1. Избавиться от светло-серого отступа вокруг строки меню.
  2. Выполните вышеизложенное, не раскрывая строку меню дозаполните доступное пространство.

Поэтому режим упаковки вашего другого виджета (а именно панель кнопок под строкой меню) вступает в игру (для ясности, я буду ссылатьсядля них как button_hbox и menu_bar, соответственно, поскольку оба могут квалифицироваться как «панели инструментов».)

Понимание логических аргументов макета, передаваемых в gtk_box_pack_start () , имеет первостепенное значение здесь:

  • Первый, expand, равен TRUE, если виджет должен занимать пустое пространство, оставленное в его контейнере после вычисления макета.Упакованные таким образом виджеты в равной степени конкурируют за оставшееся пространство.

  • Второй, fill, равен TRUE, если виджет должен заполнять пространство макета, которое он использует, а не центрироваться внутриэто (прибывает светло-серый отступ).

Идея состоит в том, что у вас есть один (или более, но давайте сейчас придерживаться одного) главный виджет в main_vbox, и этоВиджет упакован с expand и fill, установленными на TRUE.Спутниковые виджеты вокруг него упакованы с expand, установленным на FALSE и fill, установленным на 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);
...