Для этого используется контейнер GtkHandleBox(), который перемещается вместе с отображаемым в нём дочерним виджетом:
$handlebox = new GtkHandleBox();
Для добавления виджета в контейнер используется метод add():
$handlebox->add(new GtkLabel("Текстовая строка"));
Вот и всё. Сделаю одно маленькое замечание. В коде, приведённом ниже, для панели инструментов я явно указал размеры (set_size_request()), иначе при отрывании от окна она свернётся до возможного минимума.
Полный код программы:
<?php
$window = new GtkWindow();
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_size_request(400, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$vbox = new GtkVBox();
$handlebox1 = new GtkHandleBox();
$handlebox2 = new GtkHandleBox();
$toolbar = new GtkToolbar();
$toolbar->set_size_request(400, -1);
$open = GtkToolButton::new_from_stock(Gtk::STOCK_OPEN);
$close = GtkToolButton::new_from_stock(Gtk::STOCK_CLOSE);
$toolbar->insert($open, -1);
$toolbar->insert($close, -1);
$handlebox1->add($toolbar);
$handlebox2->add(new GtkLabel("Текстовые строки тоже\nвозможно оторвать от окна"));
$vbox->pack_start($handlebox1, FALSE, FALSE);
$vbox->pack_start($handlebox2, FALSE, FALSE);
$window->add($vbox);
$window->show_all();
Gtk::main();
?>
2 комментария:
Хотелось бы узнать, есть ли возможность поместить такой контейнер например в правй нижний угол экрана.
и еще:
Эти виджеты слева помечаются вертикальными точками, если в программе не указано иного
как можно убрать эти точки или вообще изменить вид?
У меня сейчас нет компьютера под рукой и в ближайшее время не будет, поэтому конкретный код дать не смогу, только опишу алгоритм.
1 вопрос) Можно при упаковке в 'родительский' контейнер использовать pack_end(), вместо pack_start(). Этот метод поместит 'дочерний' виджет в самый конец 'родителя' (нижняя или правая сторона, в зависимости от типа 'родителя').
2 вопрос) По моему, убрать точки нельзя, можно только изменить их местоположение - метод set_snap_edge().
Отправить комментарий