Для начала предлагаю определиться, что же мы хотим видеть в нашей программе. Это будет окно фиксированного размера, т.к. в данном случае изменение размеров совершенно ни к чему. Будет 2 поля ввода: в первое пользователь введёт строку, а во второе мы поместим её хэш-сумму. Также добавим 2 кнопки: "Закрыть" и "Расчитать".
В конце статьи у нас получится примерно следующее:
С задачами определились, тогда начнём.
$window = new GtkWindow();Здесь мы создали окно, установили его положение на экране, размеры и заголовок.
$window->set_title('Расчёт хеш-суммы');
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_resizable(FALSE);
$window->set_size_request(450, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
В нашем случае для размещения виджетов удобнее всего использовать таблицу, поэтому создаём её:
$table = new GtkTable();
Теперь создаём необходимые элементы интерфеса и добавляем их в таблицу:
$label_source = new GtkLabel('Исходный текст:');
$label_md5 = new GtkLabel('Получившийся MD5:');
$entry_source = new GtkEntry();
$entry_md5 = new GtkEntry();
$button_close = new GtkButton('_Закрыть');
$button_calc = new GtkButton('_Расчитать');
$table->attach($label_source, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK);
$table->attach($entry_source, 1, 2, 0, 1);
$table->attach($label_md5, 0, 1, 1, 2, Gtk::SHRINK, Gtk::SHRINK);
$table->attach($entry_md5, 1, 2, 1, 2);
$table->attach($button_close, 0, 1, 2, 3, Gtk::FILL, Gtk::FILL);
$table->attach($button_calc, 1, 2, 2, 3, Gtk::FILL, Gtk::FILL);
По нажатию на кнопку "Закрыть" программа должна прекратить своё выполнение. Для этого вешаем на сигнал 'clicked' встроенную функцию Gtk::main_quit(), о которой вы знаете из статьи Создание простого окна. Часть 1.:
$button_close->connect_simple('clicked', array('Gtk', 'main_quit'));
А по нажатию на кнопку "Расчититать" мы вызовем функцию on_calc(), которая получит хеш-сумму введённой строки и поместит её в $entry_md5:
$button_calc->connect_simple('clicked', 'on_calc',С помощью метода get_text() мы узнаём введённую строку. Метод set_text() устанавливает новое значение в $entry_md5. Для того, чтобы пользователю совершать меньшее количество движений мы очищаем поле $entry_source и методом grab_focus() помещаем в него указатель.
$entry_source, $entry_md5);
function on_calc($source, $md5)
{
$input = $source->get_text();
$md5->set_text(md5($input));
$source->set_text('');
$source->grab_focus();
}
Ту же функцию необходимо вызвать и для сигнала 'activate' у $entry_source.
Как всегда, в конце статьи полный исходный код:
<?php
$window = new GtkWindow();
$window->set_title('Расчёт хеш-суммы');
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_resizable(FALSE);
$window->set_size_request(450, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$table = new GtkTable();
$label_source = new GtkLabel('Исходный текст:');
$label_md5 = new GtkLabel('Получившийся MD5:');
$entry_source = new GtkEntry();
$entry_md5 = new GtkEntry();
$button_close = new GtkButton('_Закрыть');
$button_calc = new GtkButton('_Расчитать');
$table->attach($label_source, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK);
$table->attach($entry_source, 1, 2, 0, 1);
$table->attach($label_md5, 0, 1, 1, 2, Gtk::SHRINK, Gtk::SHRINK);
$table->attach($entry_md5, 1, 2, 1, 2);
$table->attach($button_close, 0, 1, 2, 3, Gtk::FILL, Gtk::FILL);
$table->attach($button_calc, 1, 2, 2, 3, Gtk::FILL, Gtk::FILL);
$button_close->connect_simple('clicked', array('Gtk', 'main_quit'));
$button_calc->connect_simple('clicked', 'on_calc',
$entry_source, $entry_md5);
function on_calc($source, $md5)
{
$input = $source->get_text();
$md5->set_text(md5($input));
$source->set_text('');
$source->grab_focus();
}
$entry_source->connect_simple('activate', 'on_calc',
$entry_source, $entry_md5);
$window->add($table);
$window->show_all();
Gtk::main();
?>
1 комментарий:
Спасибо, интересный блог. Теперь буду изучать PHP-GTK.
Отправить комментарий