Вход/Регистрация
Программирование на языке Ruby
вернуться

Фултон Хэл

Шрифт:

Далее создается виджет

Gtk::TReeView.
Класс
Gtk::treeViewColumn
конфигурирует эту колонку. Первая колонка называется «Destination», а для отображения клеток применяется класс рисовальщика
Gtk::CellRendererText
. Первая колонка модели (с номером 0) —
Gtk::ListStore
— служит значением текстового свойства. Итак, рисовальщики клеток наполняют древесную модель данными. В GTK+ 2.x есть несколько готовых рисовальщиков клеток, в том числе
Gtk::CellRendererText
,
Gtk::CellRendererPixbuf
и
Gtk::CellRendererToggle
. Далее в список добавляются три строки данных и устанавливается обработчик события
"changed"
, который будет вызываться, когда пользователь выберет другую строку. Этот обработчик изменит значение переменной
@city
, записав в нее текст из первой колонки только что выбранной строки.

Затем создается простой флажок (

Gtk::CheckButton
) и кнопка (
Gtk::Button
). Обработчик события нажатия кнопки вызовет метод
cmd_purchase
. Метка
@result
первоначально пуста, но позже в нее будет записана строка, определяющая вид заказанного билета.

Три переключателя создаются как члены одной группы, то есть в любой момент может быть выбран лишь один из них. Когда пользователь щелкает по любому переключателю, равнее выбранный сбрасывается. Первым параметром конструктору переключателя передается первый переключатель из той же группы. Поэтому у конструктора первого переключателя в группе этого параметра нет, а остальным передается ссылка на первый переключатель.

Виджеты нужно организовать на экране так, чтобы пользователю было удобно. Мы воспользовались комбинацией контейнеров

Gtk::НВох
и
Gtk::VBox
. Список расположен над флажком. Все три переключателя расположены вертикально справа от списка. А кнопка помещена под всеми остальными виджетами.

Метод

cmd_purchase
очень прост: он строит строку, отражающую состояние всех виджетов в момент нажатия кнопки. У переключателей и флажков есть метод
active?
, который возвращает
true
, если виджет отмечен. Построенная строка записывается в метку
@result
и потому появляется на экране.

Во многих приложениях интерфейс содержит меню. В следующем примере показано, как можно организовать меню в Ruby/GTK2. Заодно демонстрируется применение всплывающих подсказок — мелкая деталь, способная украсить любую программу.

В листинге 12.8 создается главное окно с меню, содержащим пункт

File
и еще два фиктивных пункта. В меню
File
есть команда
Exit
, которая завершает приложение. Оба пункта
File
и
Exit
снабжены всплывающими подсказками.

Листинг 12.8. Пример меню в GTK

$KCODE = "U"

require "gtk2"

class MenuWindow < Gtk::Window

 def initialize

super("Ruby/GTK2 Menu Sample")

signal_connect("destroy") { Gtk.main_quit }

file_exit_item = Gtk::MenuItem.new("_Exit")

file_exit_item.signal_connect("activate") { Gtk.main_quit }

file_menu = Gtk::Menu.new

file_menu.add(file_exit_item)

file_menu_item = Gtk::MenuItem.new("_File")

file_menu_item.submenu = file_menu

menubar = Gtk::MenuBar.new

menubar.append(file_menu_item)

menubar.append(Gtk::MenuItem.new("_Nothing"))

menubar.append(Gtk::MenuItem.new("_Useless"))

tooltips = Gtk::Tooltips.new

tooltips.set_tip(file_exit_item, "Exit the app", "")

box = Gtk::VBox.new

box.pack_start(menubar, false, false, 0)

box.add(Gtk::Label.new("Try the menu and tooltips!"))

add(box)

set_default_size(300, 100)

show_all

 end

end

Gtk.init

MenuWindow.new

Gtk.main

И здесь базовая структура программы такая же, как в предыдущих примерах. В данном случае мы создаем пункт меню

Gtk::MenuItem
с именем
Exit
и задаем для него обработчик события, который завершает программу. Событие называется
activate
и генерируется, когда пользователь выбирает пункт меню.

Далее создается меню

File
и в него добавляется пункт
Exit
. Это все, что требуется для создания выпадающего меню. В конце создается пункт меню
File
; именно он и появится в полосе меню. Чтобы присоединить пункт
File
к меню
File
, мы вызываем метод
submenu=
.

  • Читать дальше
  • 1
  • ...
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: