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

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

Жанры

Программирование на языке Ruby
Шрифт:
Листинг 12.1. Имитация термостата

require 'tk'

# Типичные параметры упаковки...

Тор = { 'side' => 'top', 'padx'=>5, 'pady'=>5 }

Left = { 'side' => 'left', 'padx'=>5, 'pady'=>5 }

Bottom = { 'side' => 'bottom', 'padx'=>5, 'pady'=>5 }

temp =74 # Начальная температура...

root = TkRoot.new { title "Thermostat" }

top = TkFrame.new(root) { background "#606060" }

bottom = TkFrame.new(root)

tlab = TkLabel.new(top) do

 text temp.to_s

 font "{Arial} 54 {bold}"

 foreground "green"

 background "#606060"

 pack Left

end

TkLabel.new(top) do #
Символ градуса

 text "о"

 font "{Arial} 14 {bold}"

 foreground "green"

 background "#606060"

 # Включить в хэш прикрепление к северу (символ градуса отображается

 # в виде верхнего индекса).

 pack Left.update({ 'anchor' => 'n' })

end

TkButton.new(bottom) do

 text " Up "

 command proc { tlab.configure("text"=>(temp+=1).to_s) }

 pack Left

end

TkButton.new(bottom) do

 text "Down"

 command proc { tlab.configure("text"=>(temp-=1).to_s) }

 pack Left

end

top.pack Top

bottom.pack Bottom

Tk.mainloop

Здесь мы создали два фрейма. Верхний служит только для отображения температуры. Она измеряется по шкале Фаренгейта и для улучшения дизайна выводится крупным шрифтом (а символ градуса отображается маленькой буквой «о», расположенной справа сверху). Нижний фрейм содержит кнопки «вверх» и «вниз».

Обратите внимание на не встречавшиеся еще атрибуты объекта

TkLabel
. Метод
font
задает гарнитуру и размер шрифта, которым выводится текст метки. Строковое значение платформенно-зависимо; то, что приведено в примере, предназначено для ОС Windows. В системах UNIX обычно указывается длинное и малопонятное имя шрифта, принятое в X Window, например:
– Adobe-Helvetica- Bold-R-Normal*-120-*-*-*-*-*-*
.

Метод

foreground
задает цвет текста. Здесь мы передаем строку
"green"
(которая в Tk имеет предопределенный смысл). Если вы хотите знать, предопределен ли тот иной цвет в Tk,
то самое простое — попробовать.

Аналогично метод

background
задает цвет фона, на котором выводится текст. В данном случае мы передаем строку в другом формате, а именно указываем красную, зеленую и синюю компоненты в шестнадцатеричном виде, как принято в языке HTML и других случаях. (Строка
"#606060"
соответствует приятному серому цвету.)

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

Отметим использование метода

configure
в описании команд для кнопок; он изменяет текст метки по мере того, как текущая температура уменьшается или увеличивается. Мы уже говорили, что таким образом почти все атрибуты можно изменять во время выполнения, причем изменение отображается на экране незамедлительно.

Упомянем еще две операции над текстовыми кнопками. Метод

justify
принимает один параметр (
"left"
,
"right"
или
"center"
), определяющий выравнивание текста внутри кнопки (по умолчанию подразумевается
"center"
). Мы говорили, что можно отображать многострочный текст; метод
wraplength
задает номер колонки, в которой происходит перенос слова.

Стиль кнопки можно изменить методом

relief
, придав ей трехмерный вид. В качестве параметра этому методу можно передать одну из строк:
"flat"
,
"groove"
,
"raised"
,
"ridge"
(по умолчанию),
"sunken"
или
"solid"
. Методы
width
и
height
явно задают размеры кнопки. Имеется также метод
borderwidth
и аналогичные. О других атрибутах (которых немало) вы можете прочесть в руководстве.

Рассмотрим еще один пример использования кнопки. На этой кнопке будет изображение, а не просто текст.

Я создал GIF-файлы с изображениями стрелок, указывающих вверх и вниз (

up.gif
и
down.gif
). Для получения ссылок на них можно воспользоваться классом
TkPhotoimage
, а затем передать эти ссылки в качестве параметров при создании кнопок.

up_img = TkPhotoimage.new("file"=>"up.gif")

down_img = TkPhotoimage.new("file"=>"down.gif")

TkButton.new(bottom) do

 image up_img

 command proc { tlab.configure("text"=>(temp+=1).to_s) }

 pack Left

end

TkButton.new(bottom) do

 image down_img

 command proc { tlab.configure("text"=>(temp-=1).to_s) }

 pack Left

end

Здесь просто заменены некоторые строки в первом примере. Если не считать внешнего вида кнопок, то поведение не изменилось. На рис. 12.2 показано окно приложения.

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

Сильнейший Столп Империи. Книга 3

Ермоленков Алексей
3. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 3

Черный Маг Императора 18

Герда Александр
18. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 18

На границе империй. Том 10. Часть 8

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 8

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

Наследие Маозари 7

Панежин Евгений
7. Наследие Маозари
Фантастика:
боевая фантастика
юмористическое фэнтези
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 7

Сильнейший Столп Империи. Книга 4

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

Рассвет русского царства 3

Грехов Тимофей
3. Новая Русь
Фантастика:
историческое фэнтези
альтернативная история
5.00
рейтинг книги
Рассвет русского царства 3

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

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

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Старый, но крепкий 5

Крынов Макс
5. Культивация без насилия
Фантастика:
рпг
аниме
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 5

Долг

Кораблев Родион
7. Другая сторона
Фантастика:
боевая фантастика
5.56
рейтинг книги
Долг

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

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

Наследник 2

Шимохин Дмитрий
2. Старицкий
Фантастика:
попаданцы
альтернативная история
фэнтези
5.75
рейтинг книги
Наследник 2

Наследник Теней

Лазарь
3. Хозяин Теней
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наследник Теней