Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

В листинге 12.2 встречается также метод

packing
, единственная цель которого — сделать код чуточку чище. Он возвращает хэш, содержащий значения атрибутов
padx
,
pady
,
side
и
anchor
.

Объекты

TkVariable
предназначены для ассоциирования полей ввода с переменными. В классе
TkVariable
определен метод доступа
value
, который позволяет получать и устанавливать значение, хранящееся в объекте.

При создании

объекта
TkEntry
, например
ent_host
, задаем атрибут
textvariable
, который связывает его с соответствующим объектом
TkVariable
. Иногда мы явно указываем ширину поля методом
width
; если это не сделано, то будет автоматически выбрана разумная ширина, обычно определяемая значением, которое в данный момент хранится в поле. Часто ширину подбирают методом проб и ошибок.

Шрифты задаются для полей ввода так же, как для меток. Аналогично обстоит дело и с цветами, которые в этом примере не задаются. Если шрифт пропорциональный, то два поля одинаковой ширины на экране могут оказаться различными.

Как обычно, необходимо вызвать метод

pack
. Мы немного упростили вызовы за счет использования констант.

Для поля, содержащего пароль, вызывается метод

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

Я уже сказал, что кнопки тут нужны только для красоты. Кнопка Sign on вообще ничего не делает, a Cancel завершает программу.

У полей ввода есть и другие атрибуты. Можно изменять значение из программы, не заставляя пользователя вводить его; можно задать шрифт и цвета; можно изменить характеристики курсора, указывающего место вставки, и перемещать его в нужное место. И многое, многое другое. Полное описание вы найдете в руководстве.

Раз уж мы заговорили о вводе текста, будет уместно упомянуть виджет

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

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" }

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

Весь Дэн Браун в одном томе

Браун Дэн
Детективы:
триллеры
прочие детективы
5.00
рейтинг книги
Весь Дэн Браун в одном томе

Зарево горящих деревень

Инин Дмитрий
4. Негодяй Аллара
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Зарево горящих деревень

Островитянин

О'Крихинь Томас
Документальная литература:
биографии и мемуары
прочая документальная литература
публицистика
5.00
рейтинг книги
Островитянин

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Враг из прошлого тысячелетия

"Фантастика 2024-107". Компиляция. Книги 1-21

Голд Джон
Фантастика 2024. Компиляция
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
рпг
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Фантастика 2024-107. Компиляция. Книги 1-21

Кодекс Охотника. Книга XXL

Винокуров Юрий
41. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXL

Дитя прибоя

Трофимов Ерофей
Дитя прибоя
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.25
рейтинг книги
Дитя прибоя

Записки брюнетки

Голубицкая Жанна
Проза:
современная проза
4.25
рейтинг книги
Записки брюнетки

Стеклянная западня (сборник)

Франке Герберт В.
Фантастика:
научная фантастика
5.00
рейтинг книги
Стеклянная западня (сборник)

Психосоматика

Малкина-Пых Ирина Германовна
Справочник практического психолога
Научно-образовательная:
психология
5.00
рейтинг книги
Психосоматика

Газлайтер. Том 36

Володин Григорий Григорьевич
36. История Телепата
Фантастика:
городское фэнтези
аниме
попаданцы
6.25
рейтинг книги
Газлайтер. Том 36

Путь Строителя. Книга 3-8

Ковтунов Алексей
3. Строитель
Фантастика:
рпг
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Путь Строителя. Книга 3-8

Китайская, японская, тайская кухни

Перепелкина Н. А.
Дом и Семья:
кулинария
5.00
рейтинг книги
Китайская, японская, тайская кухни

"Фантастика 2025-112". Компиляция. Книги 1-30

Булгакова Ольга Анатольевна
Фантастика 2025. Компиляция
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2025-112. Компиляция. Книги 1-30