Знакомство с Tcl/Tk: первый пример
Содержание:
1. Введение;
2. Первый пример (Вы читаете данный раздел);
3. Обработка событий;
4. Виджеты;
5. Темы и стили.
Для примера напишем простейшую (и, как обычно в таких случаях, бесполезную) программу для сложения двух чисел. Начнем с интерфейса:
Сохраняем этот текст в файл test.tcl и выполняем с помощью «wish test.tcl». Наша программа должна выглядеть так, как показано на рис. выше.
Как легко догадаться, при создании виджета можно сразу устанавливать его параметры. Например, строка:
устанавливает заголовок для рамки и все ее внутренние поля равными 5 пикселов. Параметры виджета можно изменить в любой момент командой configure. Например:
Команды менеджера геометрии grid заслуживают отдельного внимания. Во-первых, важно понимать, что каждый виджет размещается внутри таблицы своего непосредственного «родителя». Каждый виджет-контейнер (такой как рамка) имеет свою отдельную таблицу, поэтому наши поля ввода размещаются именно в ней, а не в таблице основного окна. Параметры -column и -row указывают, в какую ячейку нужно поместить виджет (нумерация начинается всегда с нуля). Параметр -sticky определяет, к каким сторонам ячейки виджет «приклеивается». Стороны определяются как направления на запад (w, левая сторона), восток (e, правая сторона) север (n, верхняя сторона) и юг (s, нижняя сторона). Наши метки приклеены только к правой стороне (e), поэтому они выравниваются по правому краю ячейки. Поля ввода и рамка приклеены ко всем сторонам, поэтому они растягиваются на всю ячейку при изменении размера окна (внутренний код полей ввода не дает им растягиваться вертикально). Кнопка приклеена к правому нижнему углу (se), где всегда и остается независимо от размеров окна.
Неочевидным моментом является то, что параметр -sticky определяет возможность самого виджета изменять размер, но будет ли он это делать в действительности, зависит от параметров строк и столбцов таблицы. По умолчанию все строки и столбцы имеют фиксированный размер, который вычисляется исходя из оптимального размера их содержимого и не меняется при изменении размеров окна. Команды grid columnconfigure и grid rowconfigure позволяют изменить это поведение для каждого столбца и строки таблицы в отдельности. Параметр -weight определяет, в какой пропорции столбец или строка меняют свой размер. Если он равен нулю (по умолчанию), то размер не меняется, а если положительному числу, то строка или столбец будут растягиваться вместе с окном. Столбцы с weight 3 будут «отвоевывать» втрое больше места при изменении ширины окна, чем столбцы с weight 1. Параметры -padx и -pady задают поля для каждого столбца или строки.
В данный момент Вас гораздо больше интересует не программирование в среде Tcl/Tk, а обустройство своего уютного кафе? В таком случае я рекомендую Вам начать с малого - изготовить папки меню для кафе (http://www.ludvic.ru/papki-menyu/item/papki-menyu-dlya-kafe)! Такую работу следует доверить настоящим профессионалам своего дела, на роль которых идеально подойдут сотрудники компании "ЛюдВик"!
1. Введение;
2.
3. Обработка событий;
4. Виджеты;
5. Темы и стили.
Для примера напишем простейшую (и, как обычно в таких случаях, бесполезную) программу для сложения двух чисел. Начнем с интерфейса:
# Загружаем пакет Tk. Интерпретатор wish делает это сам,
# но интерпретатор tclsh — нет, поэтому считается хорошим
# тоном об этом позаботиться. package require Tk
# Устанавливаем заголовок главного окна программы.
# Такими операциями ведает менеджер окон (window manager — wm). wm title . "Бесполезная программа"
# Создаем виджеты:
# Рамка с меткой
ttk::labelframe .fr -padding "5 5 5 5" -text "Введите два числа"
#... а внутри нее:
# метки для двух полей ввода
ttk::label .fr.label1 -text "Число 1"
ttk::label .fr.label2 -text "Число 2"
# и сами поля ввода для чисел
ttk::entry .fr.num1
ttk::entry .fr.num2
# Отдельно, вне рамки, кнопка для сложения
ttk::button .add -text "Сложить"
# Теперь передаем виджеты менеджеру геометрии для отображения
# на экране
# Рамка и кнопка обрабатываются таблицей главного окна
grid .fr -column 0 -row 0 -sticky nwes -padx 5 -pady 5
grid .add -column 0 -row 1 -sticky se -padx 5 -pady 10
grid columnconfigure . 0 -weight 1
grid rowconfigure . 1 -weight 1
# метки и поля ввода обрабатываются таблицей рамки,
# т.к. находятся внутри нее;
# к наружной таблице они уже никак не привязаны
grid .fr.label1 -column 0 -row 0 -sticky e
grid .fr.label2 -column 0 -row 1 -sticky e
grid .fr.num1 -column 1 -row 0 -sticky nwes
grid .fr.num2 -column 1 -row 1 -sticky nwes
grid columnconfigure .fr 0 -weight 0
grid columnconfigure .fr 1 -weight 1
# но интерпретатор tclsh — нет, поэтому считается хорошим
# тоном об этом позаботиться. package require Tk
# Устанавливаем заголовок главного окна программы.
# Такими операциями ведает менеджер окон (window manager — wm). wm title . "Бесполезная программа"
# Создаем виджеты:
# Рамка с меткой
ttk::labelframe .fr -padding "5 5 5 5" -text "Введите два числа"
#... а внутри нее:
# метки для двух полей ввода
ttk::label .fr.label1 -text "Число 1"
ttk::label .fr.label2 -text "Число 2"
# и сами поля ввода для чисел
ttk::entry .fr.num1
ttk::entry .fr.num2
# Отдельно, вне рамки, кнопка для сложения
ttk::button .add -text "Сложить"
# Теперь передаем виджеты менеджеру геометрии для отображения
# на экране
# Рамка и кнопка обрабатываются таблицей главного окна
grid .fr -column 0 -row 0 -sticky nwes -padx 5 -pady 5
grid .add -column 0 -row 1 -sticky se -padx 5 -pady 10
grid columnconfigure . 0 -weight 1
grid rowconfigure . 1 -weight 1
# метки и поля ввода обрабатываются таблицей рамки,
# т.к. находятся внутри нее;
# к наружной таблице они уже никак не привязаны
grid .fr.label1 -column 0 -row 0 -sticky e
grid .fr.label2 -column 0 -row 1 -sticky e
grid .fr.num1 -column 1 -row 0 -sticky nwes
grid .fr.num2 -column 1 -row 1 -sticky nwes
grid columnconfigure .fr 0 -weight 0
grid columnconfigure .fr 1 -weight 1
Сохраняем этот текст в файл test.tcl и выполняем с помощью «wish test.tcl». Наша программа должна выглядеть так, как показано на рис. выше.
Как легко догадаться, при создании виджета можно сразу устанавливать его параметры. Например, строка:
ttk::labelframe .fr -padding "5 5 5 5" -text "Введите два числа"
устанавливает заголовок для рамки и все ее внутренние поля равными 5 пикселов. Параметры виджета можно изменить в любой момент командой configure. Например:
.fr configure -text "Измененный текст"
Команды менеджера геометрии grid заслуживают отдельного внимания. Во-первых, важно понимать, что каждый виджет размещается внутри таблицы своего непосредственного «родителя». Каждый виджет-контейнер (такой как рамка) имеет свою отдельную таблицу, поэтому наши поля ввода размещаются именно в ней, а не в таблице основного окна. Параметры -column и -row указывают, в какую ячейку нужно поместить виджет (нумерация начинается всегда с нуля). Параметр -sticky определяет, к каким сторонам ячейки виджет «приклеивается». Стороны определяются как направления на запад (w, левая сторона), восток (e, правая сторона) север (n, верхняя сторона) и юг (s, нижняя сторона). Наши метки приклеены только к правой стороне (e), поэтому они выравниваются по правому краю ячейки. Поля ввода и рамка приклеены ко всем сторонам, поэтому они растягиваются на всю ячейку при изменении размера окна (внутренний код полей ввода не дает им растягиваться вертикально). Кнопка приклеена к правому нижнему углу (se), где всегда и остается независимо от размеров окна.
Неочевидным моментом является то, что параметр -sticky определяет возможность самого виджета изменять размер, но будет ли он это делать в действительности, зависит от параметров строк и столбцов таблицы. По умолчанию все строки и столбцы имеют фиксированный размер, который вычисляется исходя из оптимального размера их содержимого и не меняется при изменении размеров окна. Команды grid columnconfigure и grid rowconfigure позволяют изменить это поведение для каждого столбца и строки таблицы в отдельности. Параметр -weight определяет, в какой пропорции столбец или строка меняют свой размер. Если он равен нулю (по умолчанию), то размер не меняется, а если положительному числу, то строка или столбец будут растягиваться вместе с окном. Столбцы с weight 3 будут «отвоевывать» втрое больше места при изменении ширины окна, чем столбцы с weight 1. Параметры -padx и -pady задают поля для каждого столбца или строки.
В данный момент Вас гораздо больше интересует не программирование в среде Tcl/Tk, а обустройство своего уютного кафе? В таком случае я рекомендую Вам начать с малого - изготовить папки меню для кафе (http://www.ludvic.ru/papki-menyu/item/papki-menyu-dlya-kafe)! Такую работу следует доверить настоящим профессионалам своего дела, на роль которых идеально подойдут сотрудники компании "ЛюдВик"!