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

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

Жанры

Программирование на языке 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 показано окно приложения.

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

Воин-паразит: Стать человеком

Костяной Богдан
1. Воин-паразит
Фантастика:
фэнтези
5.00
рейтинг книги
Воин-паразит: Стать человеком

Пропащие девицы

I_Do_Believe_In_Faeries
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Пропащие девицы

Словарь американских идиом (8000 единиц)

Неизвестен 3 Автор
Справочная литература:
руководства
5.00
рейтинг книги
Словарь американских идиом (8000 единиц)

Корабль смерти, Стальной человек и другие самые невероятные истории (сборник)

Матесон Ричард
Шедевры фантастики
Фантастика:
научная фантастика
ужасы и мистика
6.80
рейтинг книги
Корабль смерти, Стальной человек и другие самые невероятные истории (сборник)

Досье Дрездена. Книги 1 - 15

Батчер Джим
Досье Дрездена
Фантастика:
фэнтези
ужасы и мистика
5.00
рейтинг книги
Досье Дрездена. Книги 1 - 15

Вор и Книга Демона

Эддингс Дэвид
Фантастика:
героическая фантастика
8.50
рейтинг книги
Вор и Книга Демона

Перри Родан

Дарлтон Кларк
Фантастика:
космическая фантастика
6.60
рейтинг книги
Перри Родан

Всеобщая история искусств в шести томах. Том 2. Книга 2 (с иллюстрациями)

Колпинский Юрий
Научно-образовательная:
история
культурология
5.00
рейтинг книги
Всеобщая история искусств в шести томах. Том 2. Книга 2 (с иллюстрациями)

Том 12. Курт Воннегут

Воннегут Курт
Фантастика:
научная фантастика
5.00
рейтинг книги
Том 12. Курт Воннегут

Сталин

Рыбас Святослав Юрьевич
1190. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
4.50
рейтинг книги
Сталин

Романовы. Семейные тайны русских императоров

Балязин Вольдемар Николаевич
Научно-образовательная:
история
5.00
рейтинг книги
Романовы. Семейные тайны русских императоров

Криптономикон, часть 2

Стивенсон Нил
Фантастика:
киберпанк
5.00
рейтинг книги
Криптономикон, часть 2

Основы медицинских знаний

Айзман Роман Иделевич
Научно-образовательная:
медицина
5.00
рейтинг книги
Основы медицинских знаний

Ник. Цикл

Ясинский Анджей
Ник
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ник. Цикл