Обзор Gtk-Perl | ||
---|---|---|
Предыдущий | Следующий |
show() говорит Gtk-Perl что виджету выставлены все атрибуты и он может быть показан на экране. Можно так-же использовать hide() для скрытия виджета. Порядок, в котором будут выведены виждеты, не важен, но лучше, если виджет будет выведен сразу после его создания(некоторый стиль написания). Поотомки родительского виждета(window так-же явялется виждетом) появятся только тогда, когда будет показан их парент.
Иерархия виждетов показана в виде иерархии классов, в котором базовым для всего Gtk является класс Gtk::Object:
Gtk::Object
+-Gtk::Widget
| +-Gtk::Misc
| | +-Gtk::Label
| | | +-Gtk::AccelLabel
| | | +-Gtk::TipsQuery
| | +-Gtk::Arrow
| | +-Gtk::Image
| | +-Gtk::Pixmap
| +-Gtk::Container
| | +-Gtk::Bin
| | | +-Gtk::Alignment
| | | +-Gtk::Frame
| | | | +-Gtk::AspectFrame
| | | +-Gtk::Button
| | | | +-Gtk::ToggleButton
| | | | | +-Gtk::CheckButton
| | | | | +-Gtk::RadioButton
| | | | +-Gtk::OptionMenu
| | | +-Gtk::Item
| | | | +-Gtk::MenuItem
| | | | | +-Gtk::CheckMenuItem
| | | | | | +-Gtk::RadioMenuItem
| | | | | +-Gtk::TearoffMenuItem
| | | | +-Gtk::ListItem
| | | | +-Gtk::TreeItem
| | | +-Gtk::Window
| | | | +-Gtk::ColorSelectionDialog
| | | | +-Gtk::Dialog
| | | | | +-Gtk::InputDialog
| | | | +-Gtk::DrawWindow
| | | | +-Gtk::FileSelection
| | | | +-Gtk::FontSelectionDialog
| | | | +-Gtk::Plug
| | | +-Gtk::EventBox
| | | +-Gtk::HandleBox
| | | +-Gtk::ScrolledWindow
| | | +-Gtk::Viewport
| | +-Gtk::Box
| | | +-Gtk::ButtonBox
| | | | +-Gtk::HButtonBox
| | | | +-Gtk::VButtonBox
| | | +-Gtk::VBox
| | | | +-Gtk::ColorSelection
| | | | +-Gtk::GammaCurve
| | | +-Gtk::HBox
| | | +-Gtk::Combo
| | | +-Gtk::Statusbar
| | +-Gtk::CList
| | | +-Gtk::CTree
| | +-Gtk::Fixed
| | +-Gtk::Notebook
| | | +-Gtk::FontSelection
| | +-Gtk::Paned
| | | +-Gtk::HPaned
| | | +-Gtk::VPaned
| | +-Gtk::Layout
| | +-Gtk::List
| | +-Gtk::MenuShell
| | | +-Gtk::MenuBar
| | | +-Gtk::Menu
| | +-Gtk::Packer
| | +-Gtk::Socket
| | +-Gtk::Table
| | +-Gtk::Toolbar
| | +-Gtk::Tree
| +-Gtk::Calendar
| +-Gtk::DrawingArea
| | +-Gtk::Curve
| +-Gtk::Editable
| | +-Gtk::Entry
| | | +-Gtk::SpinButton
| | +-Gtk::Text
| +-Gtk::Ruler
| | +-Gtk::HRuler
| | +-Gtk::VRuler
| +-Gtk::Range
| | +-Gtk::Scale
| | | +-Gtk::HScale
| | | +-Gtk::VScale
| | +-Gtk::Scrollbar
| | +-Gtk::HScrollbar
| | +-Gtk::VScrollbar
| +-Gtk::Separator
| | +-Gtk::HSeparator
| | +-Gtk::VSeparator
| +-Gtk::Preview
| +-Gtk::Progress
| +-Gtk::ProgressBar
+-Gtk::Data
| +-Gtk::Adjustment
| +-Gtk::Tooltips
+-Gtk::ItemFactory
Знание этой иерархии важно, так как позволяет знать, какую функцию можно вызывать в кждом виджете. Для примера, SpinButton виджет относится к классу методов Entry, который в свою очередь является методом Editable и так далее.
Следующие виджеты не ассоциированы с окнами. Если вы хотите обработать событие, то вы можете использовать EventBox.
Gtk::Alignment
Gtk::Arrow
Gtk::Bin
Gtk::Box
Gtk::Image
Gtk::Item
Gtk::Label
Gtk::Pixmap
Gtk::ScrolledWindow
Gtk::Separator
Gtk::Table
Gtk::AspectFrame
Gtk::Frame
Gtk::VBox
Gtk::HBox
Gtk::VSeparator
Gtk::HSeparator
Далее будет показан каждый из виджетов и создана простая функция, выводящая их на экран. Другой хороший источник примеров можно найти в исходниках GtkPerl.
Для создания виджета используйте
$widget = new Gtk::Widget();
Но помните, что при создании некоторых виджетов может понадобится несколько функций new() подобно функции new_with_label() для кнопок и деревьев.
Уничтожить виджет можно при помощи строчки
$widget -> destroy();
Если будет получен вызов зарезервированный как destroy, то он быдет выполнен для текущего виджета, но не для объекта, породившего этот виджет.
Следующие две функции показа и скрытия виджета уже были использованы нами в формах,Они показывают и скрывают виджет:
$widget->show();
$widget->show_now();
$widget->show_all();
$widget->hide();
$widget->hide_all();
Отметим, что если не показан контейнер, то не показан и виджет, содержащийся в этом контейнере. Рекомендуется, чтобы widgets показывался до содержания контейнеров, хотя точный порядок обычно не имеет значения, если окно показывается последним.
$widget->realize();
$widget->unrealize();
Показ необходим, когда вы хотите создать видет используя GdkWindow с запросом к X серверу. При нормальном раскладе виджет будет показан когда будет запрошена функция show(), но иногда бывает необходимо вызвать realize() до вызова show(). Основное правило заключается в том, что как правило существует лучший выход из ситуации, которая провоцирет вызов realize() до вызова show(). Вобщем короче нужно четко знать что ты делаешь в таком случае и не рекомендуется использвать первую функцию без особой в том нужды.
Gtk-perl позволяет виждету считывать фокус с клавиатуры используя следующую
функцию
$widget->grab_focus();
Виджет также может быть установлен в режим по умолчанию, это можно сделать следующими строчками:
$widget->can_default( $default );
$widget->grab_default();
Запомните, что нужно вызывать can_default() до вызова grab_default(). Аргументом функции can_default() может быть истина или ложь, определяющие может ли быть виджет введен в режим по умолчанию.
Нечувствительный виджет не отвечает на ввод. Он может так-же обозначаться как бездействующий виджет. Установить чувствительность виджета можно, используя следующую функцию:
$widget->set_sensitive( $sensitive );
где аргументом функции являются истина или ложь. Однако, если виджет устанавливается в режим чувствительности, он не будет таковый, если его родитель не является чувствительным. Для тестирования чувствительности необходимо использовать следующие функции:
$widget->sensitive();
$widget->is_sensitive();
отличие этих функций в том, что первая только проверяет widgets на чувствительнсть, в то время как вторая проверяет чувствительность всей иерархии порожденых виждетов. Только вторая функция сообщит, является widget чувствительным или нет.
Помимо автоматической установки контейнера виджетов(имеется ввиду позиция и размер), можно вручную переопределять размеры и положение виждетов на экране, используюя функции
$widget->set_uposition( $x, $y );
$widget->set_usize( $width, $height );
Функция set_uposition() устанавливает левый верхний угод виджета на экране монитора на $x пикелов слева и $y пикселов сверху. Функция set_usize() устанавливает положение виджета с шириной в $width и высотой в $height пикселов сответственно. Необходимо быть осторожным при установке параметров виждетов, например если программа будет использоваться людьми со слабым зрением, то им нехобходимо увеличить размер управляющих кнопок, или просто позволить настроить программу под себя, В то-же время, если в программе используется показ деревьев каталогов, списков и или иных стандартных объектов, виджет должен быт стрго фиксирован в зависимости от числа и типа окна, дерева или иной специфичной для XWindow оболочки графической структуры.
Предыдущая | Наверх | Следующая |
Прощай, мир! | Вверх | Обзор контейнеров |