2016-01-24 9 views
1

Я новичок в разработке Linux и Vala/Gtk. Я стараюсь учиться, насколько могу, при тестировании различных функций.Vala/GTK3 set widget height

На этот раз я попытался создать приложение графического интерфейса, и я застрял в настройке высоты виджета. Глядя на документы valadoc и gnome, я не мог найти никакого способа сделать это.

Так, например, если у меня есть две кнопки на горизонтальной коробке, как мне изменить размер высоты Box()?

Это код, я прямо сейчас:

var hBox = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 0); 
    hBox.set_spacing(-10); 
    hBox.set_homogeneous(true); // Same width of buttons 

    // Set margins of maim menu icons 
    hBox.set_margin_start(30); 
    hBox.set_margin_end(30); 
    hBox.set_margin_top(10); 

// Top buttons (Main | Notifications) 
var btnMain  = new Gtk.Button.with_label("Main"); 
var btnNotif = new Gtk.Button.with_label("Notifications"); 

nixnMain.add(hBox); 
hBox.pack_start(btnMain); 
hBox.pack_start(btnNotif); 

Я попытался сейчас несколько вариантов, включая set_margin_bottom(), get_request_mode()and size_allocate(), также get_preffered_size() и некоторые другие из страницы Docs.

Кроме того, как я могу указать виджет «класс», например, если мой CSS похож на ниже, как указать кнопку, чтобы иметь класс buttonMain?

#buttonMain { 
    background-color: black; 
} 

Спасибо!

EDIT: изображения при условии
Использование hBox.set_margin_bottom(Screen.height() + 50); я получил результат, как в изображении ниже, но я хочу, высота серых кнопок меньше.
Image

+0

Можете ли вы предоставить скриншоты того, что вы хотите и что получите? Для добавления класса это выполняется через связанный с виджетам GtkStyleContext. – andlabs

+0

Я отредактировал сообщение. Пожалуйста, взгляните сейчас. – sensation

ответ

0

Необходимо установить выравнивание для виджета, который вы добавляете в Gtk.Box

Мой пример:

using Gtk; 

void main (string [] argv) { 
    Gtk.init (ref argv); 

    var window = new Window(); 
    window.border_width = 18; 
    window.destroy.connect (Gtk.main_quit); 

    var hBox = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 12); 

    // Top buttons (Main | Notifications) 
    var btnMain  = new Gtk.Button.with_label("Main"); 
    btnMain.set_valign (Gtk.Align.START); 
    var btnNotif = new Gtk.Button.with_label("Notifications"); 
    btnNotif.set_valign (Gtk.Align.START); 

    window.add(hBox); 
    hBox.pack_start(btnMain, false, false, 0); 
    hBox.pack_start(btnNotif, false, false, 0); 

    window.show_all(); 
    Gtk.main(); 
} 
+0

Вместо того, чтобы просто демонтировать пример, было бы лучше, если бы вы могли объяснить, какие из ваших дополнений достигают результата, которого хочет OP, и как они функционируют. Это не делает ничего, чтобы объяснить, что делает «Align.START», как он отличается от значения по умолчанию и какие добавленные параметры «pack_start()» делают. –

1

Вы не должны установить высоту виджета непосредственно , Вы никогда не знаете, когда пользователь может установить другой размер шрифта (например, для доступной технологии), и ваш рост окажется неправильным. Вместо этого используйте свойства по hexpand/halign/vexpand/valign/margin-top/margin-bottom/margin-right/margin-left или контейнер виджета border-width или разделительные свойств, или использовать свойство отступов в CSS.