Книга: Программирование на языке Ruby
12.1.5. Прочие виджеты
Разделы на этой странице:
12.1.5. Прочие виджеты
Tk содержит еще много виджетов. Упомянем некоторые из них.
Флажок обычно используется для представления полей, которые могут принимать одно из двух значений: да/нет или вкл/выкл. В Tk он называется «check button», а соответствующий ему класс — TkCheckButton
.
Пример в листинге 12.3 — это лишь скелет, в нем даже ни одной кнопки нет. Выводятся три флажка, соответствующие курсам, на которые можно записаться (информатика, музыка и литература). На консоль подается сообщение при каждом изменении состояния флажка.
Листинг 12.3. Флажки в Tk
require 'tk'
root = TkRoot.new { title "Checkbutton demo" }
top = TkFrame.new(root)
PackOpts = { "side" => "top", "anchor" => "w" }
cb1var = TkVariable.new
cb2var = TkVariable.new
cb3var = TkVariable.new
cb1 = TkCheckButton.new(top) do
variable cblvar
text "Информатика"
command { puts "Button 1 = #{cb1var.value}" }
pack PackOpts
end
cb2 = TkCheckButton.new(top) do
variable cb2var
text "Музыка"
command { puts "Button 2 = #{cb2var.value}" }
pack PackOpts
end
cb3 = TkCheckButton.new(top) do
variable cb3var
text "Литература"
command { puts "Button 3 = #{cb3var.value}" }
pack PackOpts
end
top.pack PackOpts
Tk.mainloop
Отметим, что переменная, ассоциированная с флажком, принимает значение 1, когда флажок отмечен, и 0 — когда он сброшен. Эти значения можно изменить с помощью методов onvalue
и offvalue
. Кроме того, еще до создания флажка можно установить значение переменной и тем самым задать начальное состояние флажка.
Если по какой-то причине мы хотим закрасить флажок серым, то можем с помощью метода state
установить состояние disabled
. Остальные состояния — active
(отмечен) и normal
(сброшен), причем последнее принято по умолчанию.
Изменим пример в листинге 12.3. Пусть речь идет не о дополнительных, а о профилирующих университетских курсах. Если не считать сдвоенных курсов, то в каждый момент времени можно выбрать не более одного предмета. В таком случае нам понадобятся переключатели (их реализует класс TkRadioButton
).
Пример в листинге 12.4 мало чем отличается от листинга 12.3. Конечно, имя класса теперь другое. Еще одно важное отличие состоит в том, что всем переключателям соответствует одна и та же переменная. Именно поэтому Tk знает, что переключатели принадлежат одной группе. В форме может быть и несколько групп переключателей, но для каждой группы выделяется по одной переменной.
Листинг 12.4. Переключатели в Tk
require 'tk'
root = TkRoot.new() { title "Radiobutton demo" }
top = TkFrame.new(root)
PackOpts = { "side" => "top", "anchor" => "w" }
major = TkVariable.new
b1 = TkRadioButton.new(top) do
variable major
text "Информатика"
value 1
command { puts "Major = #{major.value}" }
pack PackOpts
end
b2 = TkRadioButton.new(top) do
variable major
text "Музыка"
value 2
command { puts "Major = #{major.value}" }
pack PackOpts
end
b3 = TkRadioButton.new(top) do
variable major
text "Литература"
value 3
command { puts "Major = #{major.value}" }
pack PackOpts
end
top.pack PackOpts
Tk.mainloop
Здесь метод value
ассоциирует с каждым переключателем конкретное значение. Значения могут быть произвольны (например, строки). Мы не использовали строки, так как хотели подчеркнуть, что не существует прямой связи между текстом виджета и возвращаемым им значением.
Для настройки внешнего вида и поведения флажков и переключателей есть множество атрибутов. К примеру, метод image
позволяет выводить не текстовую строку, а изображение. Применимы также обычные атрибуты форматирования и отображения виджетов; подробности вы найдете в руководстве.
Если бы данная книга (или хотя бы эта глава) была целиком посвящена Tk, мы бы рассказали много чего еще. Но невозможно уделить внимание всем деталям — упомянем их лишь для того, чтобы вы знали, что имеется в вашем распоряжении.
Виджет ListBox (TkListBox
) позволяет вывести список, из которого пользователь выбирает элементы. Режим выбора (метод selectmode
) принимает следующие значения: single
, extended
, browse
. Первые два режима определяют, можно ли выбрать только один или сразу несколько элементов. Режим browse
аналогичен режиму single
с тем отличием, что выбранный элемент можно перемещать в списке мышью. Список можно прокручивать, так что число элементов в нем не ограничено.
Tk располагает развитыми средствами для работы с меню: выпадающие меню, уединенные (tear-off) меню, каскадные подменю, клавиши быстрого выбора, переключатели в меню и многое другое. Ознакомьтесь с классами TkMenu
, TkMenuBar
и TkMenuButton
.
Пожалуй, самый «творческий» виджет — это TkCanvas
, который позволяет программисту манипулировать изображением на уровне пикселей. У него есть методы для рисования линий и фигур, манипулирования цветами и загрузки изображений в различных форматах. Если вашему приложению необходима развитая графика или рисование под контролем пользователя, то этот виджет вас заинтересует.
Полоса прокрутки позволяет реализовать нестандартную прокрутку по горизонтали и по вертикали (например, синхронную прокрутку двух окон). Виджет Scale
представляет собой бегунок для представления числовых значений; его можно ориентировать по горизонтали или по вертикали и использовать как для ввода, так и для вывода. О других виджетах вы можете прочесть в документации.