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

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

Жанры

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

Рис. 12.2. Имитация термостата (с графическими кнопками)

12.1.4. Текстовые поля

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

TkEntry
. Как и следовало ожидать, для указания размера, цвета и поведения предусмотрены многочисленные атрибуты. Мы приведем довольно объемный пример, иллюстрирующий применение некоторых из них.

Поле ввода полезно лишь, если существует способ получить введенное в него значение.

Обычно поле связывается с переменной (если быть точным, с объектом
TkVariable
), хотя можно воспользоваться и методом
get
.

Предположим, что мы разрабатываем telnet-клиент, который принимает четыре параметра: адрес хоста, номер порта (по умолчанию 23), имя пользователя и его пароль. Для красоты добавим еще две кнопки для операций «войти» и «отменить».

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

Вид окна показан на рис. 12.3, а код — в листинге 12.2.

Рис. 12.3. Имитация telnet-клиента

Листинг 12.2. Имитация telnet-клиента

require "tk"

def packing(padx, pady, side=:left, anchor=:n)

 { "padx" => padx, "pady" => pady,

"side" => side.to_s, "anchor" => anchor.to_s }

end

root = TkRoot.new { title "Telnet session" }

top = TkFrame.new(root)

fr1 = TkFrame.new(top)

fr1a = TkFrame.new(fr1)

fr1b = TkFrame.new(fr1)

fr2 = TkFrame.new(top)

fr3 = TkFrame.new(top)

fr4 = TkFrame.new(top)

LabelPack = packing(5, 5, :top, :w)

EntryPack = packing(5, 2, :top)

ButtonPack = packing(15, 5, :left, :center)

FramePack = packing(2, 2, :top)

FramelPack = packing(2, 2, :left)

var_host = TkVariable.new

var_port = TkVariable.new

var_user = TkVariable.new

var_pass = TkVariable.new

lab_host = TkLabel.new(fr1a) do

 text "Host name"

 pack LabelPack

end

ent_host = TkEntry.new(fr1a) do

 textvariable var_host

 font "{Arial} 10"

 pack EntryPack

end

lab_port = TkLabel.new(fr1b) do

 text "Port"

 pack LabelPack

end

ent_port = TkEntry.new(fr1b) do

 width 4

 textvariable var_port

 font "{Arial} 10"

 pack EntryPack

end

lab_user = TkLabel.new(fr2) do

 text "User name"

 pack LabelPack

end

ent_user = TkEntry.new(fr2) do

 width 21

 font "{Arial} 12"

 textvariable var_user

 pack EntryPack

end

lab_pass = TkLabel.new(fr3) do

 text "Password"

 pack LabelPack

end

ent_pass = TkEntry.new(fr3) do

 width 21

 show "*"

 textvariable var_pass

 font "{Arial} 12"

 pack EntryPack

end

btn_signon = TkButton.new(fr4) do

 text "Sign on"

 command proc {} #
Ничего не делает!

 pack ButtonPack

end

btn_cancel = TkButton.new(fr4) do

 text "Cancel"

 command proc { exit } # Просто выход.

 pack ButtonPack

end

top.pack FramePack

fr1.pack FramePack

fr2.pack FramePack

fr3.pack FramePack

fr4.pack FramePack

fr1a.pack Frame1Pack

fr1b.pack Frame1Pack

var_host.value = "addison-wesley.com"

var_user.value = "debra"

var_port.value =23

ent_pass.focus

foo = ent_user.font

Tk.mainloop

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

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

Имя нам Легион. Том 5

Дорничев Дмитрий
5. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 5

Деревенщина в Пекине 2

Афанасьев Семён
2. Пекин
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Деревенщина в Пекине 2

Император Пограничья 5

Астахов Евгений Евгеньевич
5. Император Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 5

Тринадцатый IX

NikL
9. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Тринадцатый IX

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Гримуар темного лорда IV

Грехов Тимофей
4. Гримуар темного лорда
Фантастика:
фэнтези
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда IV

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник

Двойник Короля

Скабер Артемий
1. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.50
рейтинг книги
Ермак. Телохранитель

Черный маг императора 3

Герда Александр
3. Черный маг императора
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора 3

Солдат Империи

Земляной Андрей Борисович
1. Страж
Фантастика:
попаданцы
альтернативная история
6.67
рейтинг книги
Солдат Империи

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Отряд

Валериев Игорь
5. Ермак
Фантастика:
альтернативная история
5.25
рейтинг книги
Отряд