Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
image down_img
command proc { tlab.configure("text"=>(temp-=1).to_s) }
pack Left
end
Здесь просто заменены некоторые строки в первом примере. Если не считать внешнего вида кнопок, то поведение не изменилось. На рис. 12.2 показано окно приложения.
Рис. 12.2. Имитация термостата (с графическими кнопками)
12.1.4. Текстовые поля
Чтобы отобразить поле для ввода текста и манипулировать им, применяется виджет
TkEntry
Поле ввода полезно лишь, если существует способ получить введенное в него значение. Обычно поле связывается с переменной (если быть точным, с объектом
TkVariable
get
Предположим, что мы разрабатываем telnet-клиент, который принимает четыре параметра: адрес хоста, номер порта (по умолчанию 23), имя пользователя и его пароль. Для красоты добавим еще две кнопки для операций «войти» и «отменить».
В представленном фрагменте используются фреймы, чтобы форма выглядела аккуратнее. Правда, написанный код не переносим, и настоящий знаток Tk с презрением отверг бы его. Но просто для сведения мы все-таки документировали этот «небрежный» подход к организации информации на экране.
Вид окна показан на рис. 12.3, а код — в листинге 12.2.
Рис. 12.3. Имитация 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