Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
entry.text = entry.text.upcase } box = Gtk::HBox.new box.add(Gtk::Label.new("Text:")) box.add(entry) box.add(button) add(box) show_all endendGtk.initSampleWindow.newGtk.main
Рис. 12.4. Пример простой кнопки в GTK
В листинге 12.5 определен класс
SampleWindowGtk::windowКак и в примере «Текущая дата», обработчик сигнала destroy завершает цикл обработки событий после закрытия главного окна.
Этот класс создает однострочное поле ввода (класс
Gtk::EntryGtk::ButtonAll Caps!clickedКласс
Gtk::WindowGtk::BinHBoxGtk::НВохGtk::VBoxКак и раньше, чтобы главное окно (и все его потомки) стало видимым, необходимо вызвать метод
show_allОбработчик события
clickedСобственно код приложения находится после определения класса
SampleWindow12.2.4. Текстовые поля
В библиотеке GTK+ есть класс
Gtk::EntryGtk::TextviewПрограмма в листинге 12.6 создает многострочное текстовое поле и помещает в него текст. По мере изменения содержимого поля текущая длина текста отображается с помощью метки, расположенной в нижней части окна (рис. 12.5).
$KCODE = "U"require "gtk2"class TextWindow < Gtk::Window def initialize super("Ruby/GTK2 Text Sample") signal_connect("destroy") { Gtk.main_quit } set_default_size(200, 100) @text = Gtk::TextView.new @text.wrap_mode = Gtk::TextTag::WRAP_WORD @buffer = @text.buffer @buffer.signal_connect("changed") { @status.text = "Length: :" + @buffer.char_count.to_s } @buffer.create_tag('notice', 'font' => "Times Bold Italic 18", 'foreground' => "red") @status = Gtk::Label.new scroller = Gtk::ScrolledWindow.new scroller.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER) scroller.add(@text) box = Gtk::VBox.new box.add(scroller) box.add(@status) add(box) iter = @buffer.start_iter @buffer.insert(iter, "This is an editor") iter.offset = 5 @buffer.insert(iter, "really ", "notice") show_all endendGtk.initTextWindow.newGtk.main
Рис. 12.5. Небольшой текстовый редактор в GTK
Структура программы такая же, как в примере с кнопкой: инициализировать Ruby/GTK2, определить класс главного окна, задать обработчик события, корректно завершающий приложение, и установить начальный размер окна. После
initializeshow_allМы создали виджет редактора с именем
@textПеременная
@buffer@textchangedchar_count@status.text=text
