Виджеты ввода

Иерархия наследования Object +--- Widget +--- Editable +--- Entry Виджеты ввода позволяют напечатать и показать текст в одну строку. The text may be set with function calls that allow new text to replace, prepend or append the current contents of the Entry widget.

Две функции для создания текствых полей ввода: $entry = new Gtk::Entry(); $entry = new Gtk::Entry( $max_length ); Первая функция создает новый виджет ввода, вторая функция делает то-же самое, за исключением того, что ограничивает число символов, вводиммых пользователем до значения, передаваемого аргуметом $max_length.

Несколько функций для манипуляций над текстом, находящимся в виджете: $entry-> set_text ($text); $entry-> append_text ($text); $entry-> prepend_text ($text); Функция set_text() устанавливает содержимое виджета, меняя его на текущее содержимое. append_text() и prepend_text() добавляют текст к содержимому виджета.

Для скрытия вводимого текста(в случае ввода пароля) можно использовать функцию $entry-> set_visibility ($visible); Для контроля того, что делте с виджетом пользователь, нужно отлавливать соответствующие сигналы(см. документацию).

Пример использования виджета. позволяющего вводить текст: #!/usr/bin/perl -w use Gtk; use strict; set_locale Gtk; init Gtk; my $false = 0; my $true = 1; my $window; my $vbox; my $hbox; my $entry; my $button; my $check; # Создаем окно $window = new Gtk::Window( "toplevel" ); $window->set_usize( 200, 100 ); $window->set_title( "GTK Entry" ); $window->signal_connect( "delete_event", sub { Gtk->exit( 0 ); } ); $vbox = new Gtk::VBox( $false, 0 ); $window->add( $vbox ); $vbox->show(); # создаем поле ввода $entry = new Gtk::Entry( 50 ); $entry->signal_connect( "activate", \&enter_callback, $entry ); $entry->set_text( "Hello" ); $entry->append_text( "World" ); $entry->select_region( 0, length( $entry->get_text() ) ); $vbox->pack_start( $entry, $true, $true, 0 ); $entry->show(); $hbox = new Gtk::HBox( $false, 0 ); $vbox->add( $hbox ); $hbox->show(); # создаем чекбокс, который определяет, будет ли поле ввод редактируемым $check = new Gtk::CheckButton( "Editable" ); $hbox->pack_start( $check, $true, $true, 0 ); $check->signal_connect( "toggled", \&entry_toggle_editable, $entry ); $check->set_active( $true ); $check->show(); # создаем чекбокс, который определяет, будет ли введенный текст видимым $check = new Gtk::CheckButton( "Visible" ); $hbox->pack_start( $check, $true, $true, 0 ); $check->signal_connect( "toggled", \&entry_toggle_visibility, $entry ); $check->set_active( $true ); $check->show(); # создаем кнопку выхода $button = new Gtk::Button( "Close" ); $button->signal_connect( "clicked", sub { Gtk->exit( 0 ); } ); $vbox->pack_start( $button, $true, $true, 0 ); $button->can_default( $true ); $button->grab_default(); $button->show(); $window->show(); main Gtk; exit( 0 ); ### подпрограммы # Callback that is called when the enter key is pressed and the Entry # widget has the focus. It prints out the text in the entry widget. sub enter_callback { my ( $widget, $entry ) = @_; my $entry_text = $entry->get_text(); print( "Entry contents: $entry_text\n" ); } # Callback to toggle the editable property of the entry widget. sub entry_toggle_editable { my ( $checkbutton, $entry ) = @_; $entry->set_editable( $checkbutton->active ); } # Callback to toggle the visible property of the entry widget. sub entry_toggle_visibility { my ( $checkbutton, $entry ) = @_; $entry->set_visibility( $checkbutton->active ); }