Разработка информационных систем с помощью языка программирования Python

Материал из Викиучебника — открытых книг для открытого мира

Язык программирования Python[править]

Элементарные конструкции[править]

Типы данных[править]

Целые числа
Числа ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:

Операция Описание
x + y Сложение
x - y Вычитание
x * y Умножение
x / y Деление
x // y Целая часть от деления
x % y Остаток от деления
-x​ Смена знака числа
abs(x) Модуль числа
x ** y Возведение в степень

Вещественные числа
Вещественные числа поддерживают те же операции, что и целые. Однако вещественные числа неточны, и это может привести к ошибкам.
Помимо стандартных выражений для работы с числами, в составе Python есть несколько полезных модулей. Модуль math предоставляет более сложные математические функции.

Оператор Описание
math.sin() Возвращает синус числа
math.asin() Возвращает арксинус числа
math.cos() Возвращает косинус числа
math.cos() Возвращает арккосинус числа
math.tan() Возвращает тангенс числа
math.fabs() Возвращает модуль числа
math.sqrt() Возвращает корень числа
math.pow() Возводит число в степень

Модуль random реализует генератор случайных чисел и функции случайного выбора.

Строки
Строки в Python - упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме.
Работа со строками в Python удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.
Строки в апострофах и в кавычках - одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.
Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.

Экранированная последовательность Описание
"\n" Перевод строки
"\a" Звонок
"\b" Забой
"\f" Перевод страницы
"\r" Возврат каретки
"\t" Горизонтальная табуляция
"\v" Вертикальная табуляция
"\N{id}" Идентификатор ID базы данных Юникода
"\uhhhh" 16-битовый символ Юникода в 16-ричном представлении
"\Uhhhh…" 32-битовый символ Юникода в 32-ричном представлении
"\xhh" 16-ричное значение символа
"\ooo" 8-ричное значение символа
"\0" Символ Null (не является признаком конца строки)

Главное достоинство строк в тройных кавычках в том, что их можно использовать для записи многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и апострофов, главное, чтобы не было трех кавычек подряд.
Базовые операции

Операция Описание
S1 + S2 Конкатенация (сложение строк)
S * 2 Повторение строки
S[i] Обращение по индексу
len(S) Длина строки
S.find(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или -1
S.index(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения
S.replace(шаблон, замена) Замена шаблона
S.split(символ) Разбиение строки по разделителю
S.upper() Преобразование строки к верхнему регистру
S.lower() Преобразование строки к нижнему регистру

Логические выражения. Ветвления[править]

Логические выражения и операторы[править]

Говоря на естественном языке (например, русском) мы обозначаем сравнения словами "равно", "больше", "меньше". В языках программирования используются специальные знаки, подобные тем, которые используются в математике: > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), == (равно), != (не равно).
Не путайте операцию присваивания значения переменной, обозначаемую в языке Python одиночным знаком "равно", и операцию сравнения (два знака "равно"). Присваивание и сравнение – разные операции
Логические операторы
A and B - истина, если оба значения A и B истинны.
A or B - истина, если хотя бы одно из значений A и B истинно.
not A - истина, если A ложно

Ветвления[править]

Синтаксис инструкции if
Сначала записывается часть if с условным выражением, далее могут следовать одна или более необязательных частей elif, и, наконец, необязательная часть else.
Конструкция с несколькими elif может также служить отличной заменой конструкции switch - case в других языках программирования.

Функции[править]

Параметры и аргументы функции[править]

Функция в python - объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции def:
def add(a, b):

    return a * b

Инструкция return говорит, что нужно вернуть значение. В этом случае функция возвращает произведение a и b.
Функция может быть любой сложности и возвращать любые объекты (списки, кортежи и функции)
Функция может и не заканчиваться инструкцией return, при этом функция вернет значение None.
Аргументы функции
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.

Локальные и глобальные переменные[править]

В программировании особе внимание уделяется концепции о локальных и глобальных переменных, а также связанное с ними представление об областях видимости. Соответственно, локальные переменные видны только в локальной области видимости, которой может выступать отдельно взятая функция. Глобальные переменные видны во всей программе. "Видны" – значит, известны, доступны. К ним можно обратиться по имени и получить связанное с ними значение.
В Python, переменные, на которые только ссылаются внутри функции, считаются глобальными. Если переменной присваивается новое значение где-либо в теле функции, считается, что она локальная, и, если вам нужно, то нужно явно указывать её глобальной.
К глобальной переменной можно обратиться из локальной области видимости. К локальной переменной нельзя обратиться из глобальной области видимости, потому что локальная переменная существует только в момент выполнения тела функции. При выходе из нее, локальные переменные исчезают. Компьютерная память, которая под них отводилась, освобождается. Когда функция будет снова вызвана, локальные переменные будут созданы заново.
К локальной области относятся тела функций. Если, находясь в глобальной области видимости, мы попытаемся обратиться к локальной переменной, то возникнет ошибка.

Структуры данных[править]

Списки. Кортежи. Словари[править]

Списки
Списки в Python - упорядоченные изменяемые коллекции объектов произвольных типов (почти как массив, но типы могут отличаться). Чтобы использовать списки, их нужно создать. Создать список можно несколькими способами. Можно обработать любой итерируемый объект встроенной функцией list.
Список можно создать и при помощи литерала.
И еще один способ создать список - это генераторы списков. Генератор списков - способ построить новый список, применяя выражение к каждому элементу последовательности. Генераторы списков очень похожи на цикл for.
Методы списков

Метод Описание
list.append(x) Добавляет элемент в конец списка
list.extend(L) Расширяет список list, добавляя в конец все элементы списка L
list.insert(i, x) Вставляет на i-ый элемент значение x
list.remove(x) Удаляет первый элемент в списке, имеющий значение x. ValueError, если такого элемента не существует
list.pop([i]) Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется последний элемент
list.index(x, [start [, end]]) Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end)
list.count(x) Возвращает количество элементов со значением x
list.sort([key=функция]) Сортирует список на основе функции
list.reverse() Разворачивает список
list.copy() Поверхностная копия списка
list.clear() Очищает список


Кортежи
Разница между списком и кортежом

  • Кортеж защищен от изменений.
  • Меньший размер.
  • Возможность использовать кортежи в качестве ключей словаря.

Создать кортеж из итерируемого объекта можно с помощью функции tuple()
Методы кортеж
Все операции над списками, не изменяющие список. Можно также по-разному менять элементы местами и так далее.
Словари
Словари в Python - неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами.
Создать его можно несколькими способами.

  • С помощью литерала

a = {}

  • C помощью функции dict

a = dict()

  • C помощью метода fromkeys

a = dict.fromkeys(['b', 'c'])

  • C помощью генераторов словарей, которые очень похожи на генераторы списков

a = {b: b ** 2 for a in range(5)}
Присвоение по новому ключу расширяет словарь, присвоение по существующему ключу перезаписывает его, а попытка извлечения несуществующего ключа порождает исключение.
Методы словарей

Метод Описание
dict.clear() очищает словарь
dict.copy() возвращает копию словаря
dict.get(key[, default]) возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None)
dict.items() возвращает пары (ключ, значение)
dict.keys() возвращает ключи в словаре
dict.pop(key[, default]) удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение)
dict.popitem() удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError
dict.setdefault(key[, default]) возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ с значением default (по умолчанию None)
dict.update([other]) обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвращает None
dict.values() возвращает значения в словаре

Циклы[править]

Цикл while и for[править]

Цикл while
While - один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно:
a = 0
while a < 20:

   print (a)
a++

Результат: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Цикл for
Цикл for сложнее, менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла:
for i in 'I love Python':

   print (i * 3, end = '')

Результат: III lllooovvveee PPPyyyttthhhooonnn
Оператор break
Оператор break досрочно прерывает цикл:
for i in 'I love Python':

   if (i == 'e'):
break
print (i * 3, end = '')

Результат: III lllooovvv

Язык структурированных запросов SQL[править]

Работа с реляционной базой данных[править]

Создание таблиц[править]

Базовые таблицы создаются оператором CREATE TABLE:
CREATE TABLE <имя таблицы>(<список спецификаций столбцов и ограничений>);
Спецификация столбца включает имя поля и тип данных, которые могут находиться в этом столбце. Некоторые ограничения могут быть заданы не только отдельными спецификациями, но и в спецификации столбца. Примерами могут служить ограничения первичного и внешнего ключей, а также ограничение NOT NULL:
CREATE TABLE Pupil(FirstName varchar(15), Name varchar(10), Telephone integer);
Значение N указывает максимальное число символов, которое могут содержать данные в данном столбце. VARCHAR является переменным типом, это означает, что если мы зададим значение с числом символов меньше N, то записано на диск будет именно заданное количество символов. Альтернативой служит точный строковый тип CHAR; для него отсутствующие символы дополняются пробелами справа, т.е. на диск будет всегда записано N символов.
Если значение N не указано, то по умолчанию подразумевается 1, т.е. один символ.

Заполнение таблиц[править]

Как только таблица создана, в нее могут быть помещены данные с помощью оператора INSERT:
INSERT INTO Pupil VALUES ('Петров', 'Николай', 89995633244), ('Михеева', 'Мария', 89027856674)

Обновление и удаление данных[править]

Оператор UPDATE изменяет имеющиеся данные в таблице. Команда имеет вид:
UPDATE <Имя таблицы>
SET <Имя столбца> = <Выражение для вычисления значения столбца>
WHERE <Предикат>
С помощью одного оператора могут быть заданы значения для любого количества столбцов. Однако в одном и том же операторе UPDATE можно вносить изменения в каждый столбец указанной таблицы только один раз. При отсутствии предложения WHERE будут обновлены все строки таблицы.
Ссылка на «выражение для вычисления значения столбца» может относиться к текущим значениям в изменяемой таблице.
Удаление данных в таблице
Оператор DELETE удаляет строки из таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:
DELETE FROM <Имя таблицы>
WHERE <Предикат>;
Если предложение WHERE отсутствует, удаляются все строки из таблицы. Более быстро эту операцию (удаление всех строк из таблицы) можно в Transact-SQL также выполнить с помощью команды:
TRUNCATE TABLE <Имя таблицы>

Соединение таблиц[править]

Целостность базы данных: внешний ключ
Внешний ключ – это ограничение, которое поддерживает согласованное состояние данных между двумя таблицами, обеспечивая так называемую ссылочную целостность. Этот тип целостности означает, что всегда есть возможность получить полную информацию об объекте, распределенную по нескольким таблицам.
Связь между таблицами не является равноправной. В ней всегда есть главная таблица и таблица подчиненная. Связи бывают двух типов: «один к одному» и «один ко многим». Связь «один к одному» означает, что строке главной таблицы соответствует не более одной строки в подчиненной таблице. Связь «один ко многим» означает, что одной строке главной таблицы отвечает любое число строк в подчиненной таблице.
Связь устанавливается посредством равенства значений определенных столбцов в главной и подчиненной таблицах. При этом столбец в подчиненной таблице, который соотносится со столбцом в главной таблице, и называется внешним ключом.
Поскольку главная таблица всегда находится со стороны «один», то столбец, участвующий в связи по внешнему ключу, должен иметь ограничение PRIMARY KEY или UNIQUE. Внешний же ключ задается при создании или изменении структуры подчиненной таблицы при помощи спецификации FOREIGN KEY:
FOREIGN KEY(<Список столбцов 1>) REFERENCES <Имя главной таблицы>(<Список столбцов 2>)
Количество столбцов в списках 1 и 2 должно быть одинаковым, а типы данных этих столбцов должны быть совместимы.

Организация запросов[править]

Выборка данных[править]

Оператор SELECT
Оператор SELECT осуществляет выборку из базы данных и имеет наиболее сложную структуру среди всех операторов языка SQL. Практически любой пользователь баз данных в состоянии написать простейший оператор SELECT типа:
SELECT * FROM <Имя таблицы>
который осуществляет выборку всех записей из объекта БД табличного типа. При этом столбцы и строки результирующего набора не упорядочены.

Фильтрация данных[править]

Следует отметить, что вертикальная выборка может содержать дубликаты строк в том случае, если она не содержит потенциального ключа, однозначно определяющего запись. Если требуется получить только уникальные строки, то можно использовать ключевое слово DISTINCT:
SELECT DISTINCT <Имя столбца1>, <Имя столбца2>
FROM <Имя таблицы>;
Группировка данных
Чтобы упорядочить строки результирующего набора, можно выполнить сортировку по любому количеству полей, указанных в предложении SELECT. Для этого используется предложение ORDER BY список полей, являющееся всегда последним предложением в операторе SELECT. При этом в списке полей могут указываться как имена полей, так и их порядковые позиции в списке предложения SELECT:
SELECT DISTINCT <Имя столбца1>, <Имя столбца2>
FROM <Имя таблицы>
ORDER BY <Имя столбца2> DESC;
Сортировку можно проводить по возрастанию (ASC) или по убыванию (DESC).
Сортировку можно выполнять даже по столбцам, отсутствующим в списке SELECT. Естественно, эти столбцы должны присутствовать на выходе предложения FROM:
SELECT <Имя столбца1>
FROM <Имя таблицы>
ORDER BY <Имя столбца2> DESC;

Сложные запросы[править]

Синтаксис сложных запросов:
SELECT <Имя поля 1>, <Имя поля 2>, <Имя поля 3>, ... FROM <Имя таблицы 1>, <Имя таблицы 1>, <Имя таблицы 3>, ... WHERE <предикат 1>, <предикат 1>, <предикат 1>...

Создание и работа с информационной системой[править]

Библиотека SQLite[править]

SQLite – это автономный, работающий без сервера транзакционный механизм базы данных SQL. Будучи файловой базой данных, она предоставляет хороший набор инструментов для более простой (в сравнении с серверными базами данных) обработки данных. Когда приложение использует SQLite, их связь производится с помощью функциональных и прямых вызовов файлов, содержащих данные, а не какого-то интерфейса, что повышает скорость и производительность операций.
Объект–соединение, получаемый в результате успешного вызова функции connect(), должен иметь следующие методы:

  • close() - закрывает соединение с базой данных.
  • commit() - завершает транзакцию
  • rollback() - откатывает начатую транзакцию (восстанавливает исходное состояние). Закрытие соединения при незавершенной транзакции автоматически производит откат транзакции
  • cursor() - возвращает объект–курсор, использующий данное соединение. Если база данных не поддерживает курсоры, модуль сопряжения должен их имитировать.

Под транзакцией понимается группа из одной или нескольких операций, которые изменяют базу данных. Транзакция соответствует логически неделимой операции над базой данных, а частичное выполнение транзакции приводит к нарушению целостности БД. Например, при переводе денег с одного счета на другой операции по уменьшению первого счета и увеличению второго являются транзакцией. Методы commit() и rollback() обозначают начало и конец транзакции в явном виде. Кстати, не все базы данных поддерживают механизм транзакций.
Следует отметить, что в зависимости от реализации DB–API 2.0 модуля, необходимо сохранять ссылку на объект–соединение в продолжение работы курсоров этого соединения. В частности, это означает, что нельзя сразу же получать объект–курсор, не привязывая объект–соединение к некоторому имени. Также нельзя оставлять объект–соединение в локальной переменной, возвращая из функции или метода объект–курсор.
Объект–курсор
Курсор (от англ. cursor — CURrrent Set Of Records, текущий набор записей) служит для работы с результатом запроса. Результатом запроса обычно является одна или несколько прямоугольных таблиц со столбцами–полями и строками–записями. Приложение может читать и обрабатывать полученные таблицы и записи в таблице по одной, поэтому в курсоре хранится информация о текущей таблице и записи. Конкретный курсор в любой момент времени связан с выполнением одной SQL–инструкции.
Атрибуты объекта–курсора тоже определены DB–API:

  • arraysize - атрибут, равный количеству записей, возвращаемых методом fetchmany(). По умолчанию равен 1
  • callproc(procname[, params]) - вызывает хранимую процедуру procname с параметрами из изменчивой последовательности params. Хранимая процедура может изменить значения некоторых параметров последовательности. Метод может возвратить результат, доступ к которому осуществляется через fetch–методы
  • close() - закрывает объект–курсор
  • description - этот доступный только для чтения атрибут является последовательностью из семиэлементных последовательностей. Каждая из этих последовательностей содержит информацию, описывающую один столбец результата:

(name, type_code, display_size, internal_size, precision, scale, null_ok) Первые два элемента (имя и тип) обязательны, а вместо остальных (размер для вывода, внутренний размер, точность, масштаб, возможность задания пустого значения) может быть значение None. Этот атрибут может быть равным None для операций, не возвращающих значения

  • execute(operation[, parameters]) - исполняет запрос к базе данных или команду СУБД. Параметры (parameters) могут быть представлены в принятой в базе данных нотации в соответствии с атрибутом paramstyle
  • executemany(operation, seq_of_parameters) - выполняет серию запросов или команд, подставляя параметры в заданный шаблон. Параметр seq_of_parameters задает последовательность наборов параметров
  • fetchall() - возвращает все (или все оставшиеся) записи результата запроса
  • fetchmany([size]) - возвращает следующие несколько записей из результатов запроса в виде последовательности последовательностей. Пустая последовательность означает отсутствие данных. Необязательный параметр size указывает количество возвращаемых записей (реально возвращаемых записей может быть меньше). По умолчанию size равен атрибуту arraysize объекта–курсора
  • fetchone() - возвращает следующую запись (в виде последовательности) из результата запроса или None при отсутствии данных
  • nextset() - переводит курсор к началу следующего набора данных, полученного в результате запроса (при этом часть записей в предыдущем наборе может остаться непрочитанной). Если наборов больше нет, возвращает None. Не все базы данных поддерживают возврат нескольких наборов результатов за одну операцию
  • rowcount - количество записей, полученных или затронутых в результате выполнения последнего запроса. В случае отсутствия execute–запросов или невозможности указать количество записей равен –1
  • setinputsizes(sizes) - предопределяет области памяти для параметров, используемых в операциях. Аргумент sizes задает последовательность, где каждый элемент соответствует одному входному параметру. Элемент может быть объектом–типом соответствующего параметра или целым числом, задающим длину строки. Он также может иметь значение None, если о размере входного параметра ничего нельзя сказать заранее или он предполагается очень большим. Метод должен быть вызван до execute–методов
  • setoutputsize(size[, column]) - устанавливает размер буфера для выходного параметра из столбца с номером column. Если column не задан, метод устанавливает размер для всех больших выходных параметров. Может использоваться, например, для получения больших бинарных объектов (Binary Large Object, BLOB)

Объекты–типы
DB–API 2.0 предусматривает названия для объектов–типов, используемых для описания полей базы данных:

Объект Тип
TEXT Строка и символ
INTEGER Целое число
REAL Вещественное число
DATETIME Дата и время
None NULL–значение (отсутствующее значение)

Схематично работа с базой данных может выглядеть примерно так:
Подключение к базе данных (вызов connect() с получением объекта–соединения).
Создание одного или нескольких курсоров (вызов метода объекта–соединения cursor() с получением объекта–курсора).
Исполнение команды или запроса (вызов метода execute() или его вариантов).
Получение результатов запроса (вызов метода fetchone() или его вариантов).
Завершение транзакции или ее откат (вызов метода объекта–соединения commit() или rollback()).
Когда все необходимые транзакции произведены, подключение закрывается вызовом метода close() объекта–соединения.

Графическая библиотека Tkinter[править]

Кнопки. Метки. Текстовое поле[править]

Button (кнопка)
Самыми важными свойствами виджета класса Button являются text, с помощью которого устанавливается надпись на кнопке, и command для установки действия, то есть того, что будет происходить при нажатии на кнопку. По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить. Cвойства как bg, fg, activebackground и activeforeground определяют соответственно цвет фона и текста, цвет фона и текста во время нажатия.
Label (метка)
Виджет Label просто отображает текст в окне и служит в основном для информационных целей. Свойства метки во многом схожи как и у кнопки. Клик по метке не обрабатывается Tkinter.
Значение шрифта можно передать как строку или как кортеж. Второй вариант удобен, если имя шрифта состоит из двух и более слов. После названия шрифта можно указать размер и стиль.
Entry (однострочное текстовое поле)
Текстовые поля предназначены для ввода информации пользователем. Нередко также для вывода, если предполагается, что текст из них будет скопирован. Текстовые поля как элементы графического интерфейса бывают однострочными и многострочными.
Свойства экземпляров Entry во многом схожи с двумя предыдущими виджетами. А вот методы – нет. Из текстового поля можно взять текст. За это действие отвечает метод get(). В текстовое поле можно вставить текст методом insert(). Также можно удалить текст методом delete().
Метод insert() принимает позицию, в которую надо вставлять текст, и сам текст.
Метод delete() принимает один или два аргумента. В первом случае удаляется один символ в указанной позиции. Во втором – срез между двумя указанными индексами, не включая последний. Если нужно полностью очистить поле, то первым аргументом должен быть 0, вторым – END.
Text (многострочное текстовое поле)
В tkinter многострочное текстовое поле создается от класса Text. По умолчанию его размер равен 80-ти знакоместам по горизонтали и 24-м по вертикали.
Однако эти свойства можно изменять с помощью опций width и height. Есть возможность конфигурировать шрифт, цвета и другое.
Text и Scrollbar (полоса прокрутки)
Если в текстовое поле вводится больше линий текста, чем его высота, то оно само будет прокручиваться вниз. При просмотре прокручивать вверх-вниз можно с помощью колеса мыши и стрелками на клавиатуре. Однако бывает удобнее пользоваться скроллером – полосой прокрутки.
В tkinter скроллеры производятся от класса Scrollbar. Объект-скроллер связывают с виджетом, которому он требуется. Это не обязательно многострочное текстовое поле. Часто полосы прокрутки бывают нужны спискам.
Основные методы у Text такие же как у Entry – get(), insert(), delete(). Однако, если в случае однострочного текстового поля было достаточно указать один индекс элемента при вставке или удалении, то в случае многострочного надо указывать два – номер строки и номер символа в этой строке (другими словами, номер столбца). При этом нумерация строк начинается с единицы, а столбцов – с нуля.

Фрейм. Менеджеры геометрии[править]

Frame (фрейм)
Виджет Frame очень важен для процесса группировки и организации других виджетов каким-то дружественным способом. Он работает как контейнер, который отвечает за расположение других виджетов.
Он использует прямоугольные области на экране, чтобы организовать макет и обеспечить заполнение этих виджетов. Фрейм также можно использовать как базовый класс для реализации сложных виджетов.
Вот простой синтаксис для создания этого виджета:
fr = Frame(Master, Option, ...)

  • master - представляет родительское окно
  • Параметры - вот список наиболее часто используемых параметров для этого виджета. Эти параметры можно использовать как пары ключ-значение, разделенные запятыми.

Дополнительные параметры:

Параметр Описание
bg Нормальный цвет фона отображается за меткой и индикатором
bd Размер границы вокруг индикатора. По умолчанию 2 пикселя
cursor Если вы установите для этой опции имя курсора ( стрелка, точка и т. д. ), Курсор мыши изменится на этот шаблон, когда он находится над кнопкой
height Вертикальный размер нового кадра
highlightbackground Цвет фокуса выделяется, когда рамка не имеет фокуса
highlightcolor Цвет, показанный в фокусе, выделяется, когда рамка имеет фокус
highlightthickness Толщина фокуса подсветка
relief При значении по умолчанию рельеф = FLAT кнопка выбора не выделяется на фоне. Вы можете установить эту опцию на любой другой стиль
width Ширина кнопки по умолчанию определяется размером отображаемого изображения или текста. Вы можете установить эту опцию на количество символов, и кнопка-флажок всегда будет иметь место для такого количества символов

Метод pack
В Tkinter существует три менеджера геометрии – упаковщик, сетка и размещение по координатам. В этом уроке будет рассмотрен первый как наиболее простой и часто используемый.
Упаковщик (packer) вызывается методом pack(), который имеется у всех виджетов-объектов. Мы уже использовали его. Если к элементу интерфейса не применить какой-либо из менеджеров геометрии, то он не отобразится в окне. При этом в одном окне нельзя комбинировать разные менеджеры. Если вы начали размещать виджеты методом pack(), то не надо тут же использовать методы grid() (сетка) и place() (место).
Если в упаковщики не передавать аргументы, то виджеты будут располагаться вертикально, друг над другом. Тот объект, который первым вызовет pack(), будет вверху. Который вторым – под первым, и так далее.
У метода pack() есть параметр side (сторона), который принимает одно из четырех значений-констант tkinter – TOP, BOTTOM, LEFT, RIGHT (верх, низ, лево, право). По умолчанию, когда в pack() не указывается side, его значение равняется TOP. Из-за этого виджеты располагаются вертикально.
Метод grid
Табличный способ размещения предпочтителен из-за его гибкости и удобства, когда дело доходит до разработки относительно сложных интерфейсов. Grid позволяет избежать использования множества фреймов, что неизбежно в случае упаковщика Pack.
При размещении виджетов методом grid() родительский контейнер условно разделяется на ячейки подобно таблице. Адрес каждой ячейки состоит из номера строки и номера столбца. Нумерация начинается с нуля. Ячейки можно объединять как по вертикали, так и по горизонтали.
Размещение виджета в той или иной ячейке задается через аргументы row и column, которым присваиваются соответственно номера строки и столбца. Чтобы объединить ячейки по горизонтали, используется атрибут columnspan, которому присваивается количество объединяемых ячеек. Опция rowspan объединяет ячейки по вертикали.
В этом методе есть атрибут sticky (липкий), который принимает значения направлений сторон света (N, S, W, E, NW, NE, SW, SE). Если, например, указать NW, то виджет прибьет к верхнему левому углу ячейки. Виджеты можно растягивать на весь объем ячейки (sticky=N+S+W+E) или только по одной из осей (N+S или W+E). Эффект от "липучки" заметен, только если виджет меньше ячейки.

Работа с методом bind[править]

Метод bind
Метод bind привязывает событие к какому-либо действию (нажатие кнопки мыши, нажатие клавиши на клавиатуре и т.д.). bind принимает три аргумента:

  • название события
  • функцию, которая будет вызвана при наступлении события
  • третий аргумент (необязательный) - строка "+" - означает, что эта привязка добавляется к уже существующим. Если третий аргумент опущен или равен пустой строке - привязка замещает все другие привязки данного события к виджету.

Метод bind возвращает идентификатор привязки, который может быть использован в функции unbind.
Функция, которая вызывается при наступлении события, должна принимать один аргумент. Это объект класса Event, в котором описано наступившее событие. Объект класса Event имеет следующие атрибуты:

Артибут Описание
serial серийный номер события (все события)
num номер кнопки мыши (ButtonPress, ButtonRelease)
focus имеет ли окно фокус (Enter, Leave)
height и width ширина и высота окна (Configure, Expose)
keycode код нажатой клавиши (KeyPress, KeyRelease)
state состояние события (для ButtonPress, ButtonRelease, Enter, KeyPress, КeyRelease, Leave, Motion - в виде числа; для Visibility - в виде строки)
time время наступления события (все события)
x и y координаты мыши
x_root и y_root координаты мыши на экране (ButtonPress, ButtonRelease, KeyPress, KeyRelease, Motion
char набранный на клавиатуре символ (KeyPress, KeyRelease)
keysym набранный на клавиатуре символ (KeyPress, KeyRelease)
keysym_num набранный на клавиатуре символ в виде числа (KeyPress, KeyRelease)
type тип события в виде числа (все события)
widget виджет, который получил событие (все события)
delta изменение при вращении колеса мыши (MouseWheel)

Эта функция может возвращать строки "continue" и "break". Если функция возвращает "continue" то Tkinter продолжит обработку других привязок этого события, если "break" - обработка этого события прекращается. Если функция ничего не возвращает (если возвращает None), то обработка событий продолжается.

Глоссарий[править]


Аргументы функции - это конкретные значения, которые передаются в функцию при ее вызове.

Ветвление в программировании (оператор ветвления) - конструкция языка программирования, позволяющая выполнить команду или набор команд в случае, если какое-либо логическое выражение истино. Если необходимо выбрать одну из нескольких команд этот оператор обеспечивает выполнение одной из этих команд или набора команд в зависимости от истинности логического выражения.

Выборка данных - выбор данных из таблиц по заданному критерию.

Глобальные переменные - это переменная, которая доступна в любом месте программы, то есть ее область видимости - вся программа, за исключением намеренно закрытых областей.

Кнопка - виртуальная кнопка, созданная при помощи языка программирования, нажатие которой обеспечивает выполнение какой-либо заданной операции. Если выполнение операции на кнопку не задано, то клик по кнопке не обрабатывается.

Кортеж - это определенная последовательность неизменяемых объектов. Кортежи отличаются от списков тем, что элементы в нем нельзя изменять.

Логическое выражение - конструкция языка программирования, которая возвращает в качестве результата значение "истина" или "ложь".

Логические операторы - это операторы, принимающие в качестве аргументов логические значения (ложь или истина), результатом выполнения которых является так же логическое выражение.

Локальные переменные - это переменная, которая доступна только в определенном блоке кода. Область видимости этой переменной начинается в моменте ее объявления и завершается в конце этого блока.

Метка - виджет, отображающий текст в окне и служит в основном для информационных целей. Клик по метке не обрабатывается.

Метод Bind - метод графической библиотеки python, который позволяет связать между собой виджет, событие и действие.

Параметры функции - локальные переменные, которым присваивают значение в момент вызова функции. Параметры указываются в заголовке функции в скобках.

Словари в Python - структура данных, предназначенная для хранения произвольных объектов с доступом по ключу.

Сложный запрос - это запрос, в котором более одного условия, при этом вывод данных такого запроса может быть выполнен более чем из одной таблицы.

Списки в Python - это структура для хранения объектов различных типов, размер которой можно изменять.

Таблица информационной системы - основной тип структуры данных (объект) реляционной модели.

Текстовое поле - виджет, отображающийся как пустое поле для ввода информации пользователем.

Тип данных - класс данных, состоящий из множества возможных значений и операций, которые могут быть применены к этим значениям.

Упаковщик в Python - менеджер геометрии (расположения) в Python, специальный механизм, позволяющий расположить виджеты на окне.

Фрейм (рамка) - вспомогательный виджет, предназначенный для расположения всех виджетов на панели. Фреймы располагают на главном окне, а остальные виджеты - в фрейме.

Цикл for - цикл со счетчиком, в котором некоторая переменная изменяет свое значение от заданного начального значения до конечного значения с заданным шагом, при этом значение этой переменной за каждый проход цикла увеличивается на заданный шаг и выполняется тело цикла.

Цикл while - цикл с постусловием, то есть условие цикла проверяется только после выполнения тела цикла. В таком цикле тело цикла выполняется хотя бы один раз.