Сегодня мы поговорим о том, как добавить к пункту меню изображение, как сделать пункт-флажок и радио-кнопку. В конце у нас получится следущее:
- Для создания пункта с изображением используется класс GtkImageMenuItem() вместо GtkMenuItem(). Ему в качестве единственного параметра передаётся идентификатор изображения. Все возможные изображения можно найти здесь.
- Флажки создаются классом GtkCheckMenuItem. При изменении состояния флажка издаётся сигнал 'toggled'.
- Для визуального разделения пунктов меню друг от друга используется разделитель GtkSeparatorMenuItem().
- В меню также можно поместить радио-кнопки GtkRadioMenuItem(). Их использование аналогично обычным радио-кнопкам, описанным в статье Базовые элементы интерфейса. Часть 2., поэтому я не буду повторно на них останавливаться.
Полный код программы:
<?php
$window = new GtkWindow();
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_size_request(200, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$vbox = new GtkVBox();
$menubar = new GtkMenuBar();
$vbox->pack_start($menubar, FALSE, FALSE, 0);
$file = new GtkMenuItem('_Файл');
$edit = new GtkMenuItem('_Правка');
$help = new GtkMenuItem('_Справка');
$menubar->append($file);
$menubar->append($edit);
$menubar->append($help);
$sub_file = new GtkMenu();
$file->set_submenu($sub_file);
$sub_edit = new GtkMenu();
$edit->set_submenu($sub_edit);
$sub_help = new GtkMenu();
$help->set_submenu($sub_help);
$quit = new GtkImageMenuItem(Gtk::STOCK_CLOSE);
$quit->connect_simple('activate', array('Gtk', 'main_quit'));
$sub_file->append($quit);
$check1 = new GtkCheckMenuItem('_Флажок');
$check1->connect('toggled', 'on_toggled');
$sub_edit->append($check1);
$sub_edit->append(new GtkSeparatorMenuItem());
$radio1 = new GtkRadioMenuItem(NULL, 'Радио-кнопка _1');
$radio1->connect('toggled', 'on_toggled');
$sub_edit->append($radio1);
$radio2 = new GtkRadioMenuItem($radio1, 'Радио-кнопка _2');
$radio2->connect('toggled', 'on_toggled');
$sub_edit->append($radio2);
$sub_edit->append(new GtkSeparatorMenuItem());
$options = new GtkImageMenuItem(Gtk::STOCK_PREFERENCES);
$options->connect('activate', 'on_activate');
$sub_edit->append($options);
$about = new GtkImageMenuItem(Gtk::STOCK_ABOUT);
$about->connect('activate', 'on_activate');
$sub_help->append($about);
function on_activate($menu)
{
echo $menu->child->get_label()."\n";
}
function on_toggled($menu)
{
echo $menu->child->get_label()." - ".$menu->get_active()."\n";
}
$window->add($vbox);
$window->show_all();
Gtk::main();
?>
Комментариев нет:
Отправить комментарий