За создание диалогового окна отвечает класс GtkDialog():
$dialog = new GtkDialog(
'Диалоговое окно',
NULL,
Gtk::DIALOG_MODAL,
array(
Gtk::STOCK_NO, Gtk::RESPONSE_NO,
Gtk::STOCK_YES, Gtk::RESPONSE_YES
)
);
Первый параметр - это заголовок окна. Если он имеет значение NULL, то будет применён заголовок по умолчанию. Второй параметр - так называемый переходящий родитель, но в нашем случае достаточно указать NULL. Третьим параметром мы указали, что окно будет модальным, т.е. блокирующим работу родительского окно. Последними указываются кнопки, располагаемые в окне. Перечисление кнопок идёт слева направо. Сначала указывается сама кнопка, а через запятую сигнал, который она будет испускать при нажатии на неё.
Как я уже говорил, я не люблю, когда между частями окна имеется разделитель, поэтому уберём его:
$dialog->set_has_separator(FALSE);
Добавим текст сообщения:
$vbox = $dialog->vbox;
$vbox->add(new GtkLabel('Действительно произвести действие?'));
$dialog->show_all();
Для определения нажатой кнопки применяется метод run(), который возвращает сигнал, издаваемый нажатой кнопкой.
$result = $dialog->run();
if ($result == Gtk::RESPONSE_NO)
echo "Вы нажали 'Нет'\n";
elseif ($result == Gtk::RESPONSE_YES)
echo "Вы нажали 'Да'\n";
Для разрушения окна после нажатия на одну из кнопок используется destroy().
Полный код программы:
<?php
$dialog = new GtkDialog(
'Диалоговое окно',
NULL,
Gtk::DIALOG_MODAL,
array(
Gtk::STOCK_NO, Gtk::RESPONSE_NO,
Gtk::STOCK_YES, Gtk::RESPONSE_YES
)
);
$dialog->set_has_separator(FALSE);
$dialog->set_size_request(300, 100);
$vbox = $dialog->vbox;
$vbox->add(new GtkLabel('Действительно произвести действие?'));
$dialog->show_all();
$result = $dialog->run();
if ($result == Gtk::RESPONSE_NO)
echo "Вы нажали 'Нет'\n";
elseif ($result == Gtk::RESPONSE_YES)
echo "Вы нажали 'Да'\n";
$dialog->destroy();
?>
5 комментариев:
Непонятно, как по дефолту скрыть такое окно. ставлю родителем $window ($window = new GtkWindow(); - главное окно), потом пытаюсь скрыть диалог $dialog->hide(); но ничего не получается. плохо что на http://gtk.php.net примеров нет. :(
пришлось поместить весь код, относящийся к диалоговому окну в тело функции, которая вызывается при определенном действии.
И всё же вопрос по методам вызова диалоговых окон остаётся открытым. если также в функции делаю диалоговое окно GtkAboutDialog, то оно открывается, но кнопка Close не работает. Поэтому вопрос: как лучше вызывать диалоговые окна?
Вы, наверное, забыли про $dialog->destroy().
Отправить комментарий