Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
image down_img command proc { tlab.configure("text"=>(temp-=1).to_s) } pack LeftendЗдесь просто заменены некоторые строки в первом примере. Если не считать внешнего вида кнопок, то поведение не изменилось. На рис. 12.2 показано окно приложения.

Рис. 12.2. Имитация термостата (с графическими кнопками)
12.1.4. Текстовые поля
Чтобы отобразить поле для ввода текста и манипулировать им, применяется виджет
TkEntryПоле ввода полезно лишь, если существует способ получить введенное в него значение. Обычно поле связывается с переменной (если быть точным, с объектом
TkVariablegetПредположим, что мы разрабатываем 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 }endroot = 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.newvar_port = TkVariable.newvar_user = TkVariable.newvar_pass = TkVariable.newlab_host = TkLabel.new(fr1a) do text "Host name" pack LabelPackendent_host = TkEntry.new(fr1a) do textvariable var_host font "{Arial} 10" pack EntryPackendlab_port = TkLabel.new(fr1b) do text "Port" pack LabelPackendent_port = TkEntry.new(fr1b) do width 4 textvariable var_port font "{Arial} 10" pack EntryPackendlab_user = TkLabel.new(fr2) do text "User name" pack LabelPackendent_user = TkEntry.new(fr2) do width 21 font "{Arial} 12" textvariable var_user pack EntryPackendlab_pass = TkLabel.new(fr3) do text "Password" pack LabelPackendent_pass = TkEntry.new(fr3) do width 21 show "*" textvariable var_pass font "{Arial} 12" pack EntryPackendbtn_signon = TkButton.new(fr4) do text "Sign on" command proc {} # Ничего не делает! pack ButtonPackendbtn_cancel = TkButton.new(fr4) do text "Cancel" command proc { exit } # Просто выход. pack ButtonPackendtop.pack FramePackfr1.pack FramePackfr2.pack FramePack
