Введение 15
ЧАСТЬ I. ОСНОВЫ ЯЗЫКА PYTHON
17
Глава 1. Первые шаги
19
1.1. Установка Python 19
1.1.1. Установка нескольких интерпретаторов Python 23
1.1.2. Запуск программы с помощью разных версий Python 25
1.2. Первая программа на Python 26
1.3. Структура программы 28
1.4. Комментарии 31
1.5. Скрытые возможности IDLE 32
1.6. Вывод результатов работы программы 33
1.7. Ввод данных 35
1.8. Доступ к документации 37
Глава 2. Переменные
40
2.1. Именование переменных 40
2.2. Типы данных 42
2.3. Присваивание значения переменным 45
2.4. Проверка типа данных 47
2.5. Преобразование типов данных 48
2.6. Удаление переменной 51
Глава 3. Операторы
52
3.1. Математические операторы 52
3.2. Двоичные операторы 54
3.3. Операторы для работы с последовательностями 55
3.4. Операторы присваивания 56
3.5. Приоритет выполнения операторов 57
Глава 4. Условные операторы и циклы
59
4.1. Операторы сравнения 60
4.2. Оператор ветвления ifelse 62
4.3. Цикл for 65
4.4. Функции range() и enumerate() 67
4.5. Цикл while. 70
4.6. Оператор continue. Переход на следующую итерацию цикла 71
4.7. Оператор break. Прерывание цикла 71
Глава 5. Числа
73
5.1. Встроенные функции и методы для работы с числами 75
5.2. Модуль math. Математические функции 77
5.3. Модуль random. Генерация случайных чисел 78
Глава 6. Строки и двоичные данные
81
6.1. Создание строки 82
6.2. Специальные символы 86
6.3. Операции над строками 86
6.4. Форматирование строк 89
6.5. Метод format() 95
6.6. Функции и методы для работы со строками 99
6.7. Настройка локали 103
6.8. Изменение регистра символов 104
6.9. Функции для работы с символами 104
6.10. Поиск и замена в строке 105
6.11. Проверка типа содержимого строки 108
6.12. Тип данных bytes 111
6.13. Тип данных bytearray 115
6.14. Преобразование объекта в последовательность байтов 118
6.15. Шифрование строк 119
Глава 7. Регулярные выражения
121
7.1. Синтаксис регулярных выражений 121
7.2. Поиск первого совпадения с шаблоном 130
7.3. Поиск всех совпадений с шаблоном 135
7.4. Замена в строке 137
7.5. Прочие функции и методы 139
Глава 8. Списки, кортежи, множества и диапазоны
140
8.1. Создание списка 141
8.2. Операции над списками 144
8.3. Многомерные списки 147
8.4. Перебор элементов списка 148
8.5. Генераторы списков и выражения-генераторы 149
8.6. Функции map(), zip(), filter() и reduce() 150
8.7. Добавление и удаление элементов списка 153
8.8. Поиск элемента в списке и получение сведений о значениях, входящих в список 155
8.9. Переворачивание и перемешивание списка 157
8.10. Выбор элементов случайным образом 157
8.11. Сортировка списка 158
8.12. Заполнение списка числами 159
8.13. Преобразование списка в строку 160
8.14. Кортежи 160
8.15. Множества 162
8.16. Диапазоны 167
8.17. Модуль itertools 169
8.17.1. Генерация неопределенного количества значений 169
8.17.2. Генерация комбинаций значений 170
8.17.3. Фильтрация элементов последовательности 171
8.17.4. Прочие функции 172
Глава 9. Словари
175
9.1. Создание словаря 175
9.2. Операции над словарями 178
9.3. Перебор элементов словаря 179
9.4. Методы для работы со словарями 180
9.5. Генераторы словарей 183
Глава 10. Работа с датой и временем
184
10.1. Получение текущих даты и времени 184
10.2. Форматирование даты и времени 186
10.3. «Засыпание» скрипта 188
10.4. Модуль datetime. Манипуляции датой и временем 189
10.4.1. Класс timedelta 189
10.4.2. Класс date 191
10.4.3. Класс time 195
10.4.4. Класс datetime 197
10.5. Модуль calendar. Вывод календаря 201
10.5.1. Методы классов TextCalendar и LocaleTextCalendar 203
10.5.2. Методы классов HTMLCalendar и LocaleHTMLCalendar 204
10.5.3. Другие полезные функции 205
10.6. Измерение времени выполнения фрагментов кода 208
Глава 11. Пользовательские функции
211
11.1. Определение функции и ее вызов 211
11.2. Расположение определений функций 214
11.3. Необязательные параметры и сопоставление по ключам 215
11.4. Переменное число параметров в функции 218
11.5. Анонимные функции 220
11.6. Функции-генераторы 221
11.7. Декораторы функций 222
11.8. Рекурсия. Вычисление факториала 224
11.9. Глобальные и локальные переменные 225
11.10. Вложенные функции 228
11.11. Аннотации функций 230
Глава 12. Модули и пакеты
231
12.1. Инструкция import 231
12.2. Инструкция from 235
12.3. Пути поиска модулей 237
12.4. Повторная загрузка модулей 238
12.5. Пакеты 239
Глава 13. Объектно-ориентированное программирование
243
13.1. Определение класса и создание экземпляра класса 243
13.2. Методы __init__() и __del__() 247
13.3. Наследование 247
13.4. Множественное наследование 249
13.4.1. Примеси и их использование 251
13.5. Специальные методы. 252
13.6. Перегрузка операторов 255
13.7. Статические методы и методы класса 257
13.8. Абстрактные методы 258
13.9. Ограничение доступа к идентификаторам внутри класса 260
13.10. Свойства класса 261
13.11. Декораторы классов 263
Глава 14. Обработка исключений
264
14.1. Инструкция tryexceptelsefinally 265
14.2. Инструкция withas 269
14.3. Классы встроенных исключений 271
14.4. Пользовательские исключения 273
Глава 15. Итераторы, контейнеры и перечисления
277
15.1. Итераторы 278
15.2. Контейнеры 279
15.2.1. Контейнеры-последовательности 279
15.2.2. Контейнеры-словари 281
15.3. Перечисления 282
Глава 16. Работа с файлами и каталогами
287
16.1. Открытие файла 287
16.2. Методы для работы с файлами 294
16.3. Доступ к файлам с помощью модуля os 300
16.4. Классы StringIO и BytesIO 302
16.5. Права доступа к файлам и каталогам 306
16.6. Функции для манипулирования файлами 308
16.7. Преобразование пути к файлу или каталогу 311
16.8. Перенаправление ввода/вывода 313
16.9. Сохранение объектов в файл 316
16.10. Функции для работы с каталогами 320
16.11. Исключения, возбуждаемые файловыми операциями 323
Глава 17. Основы SQLite
325
17.1. Создание базы данных 325
17.2. Создание таблицы 327
17.3. Вставка записей 333
17.4. Обновление и удаление записей 336
17.5. Изменение структуры таблицы 336
17.6. Выбор записей 337
17.7. Выбор записей из нескольких таблиц 340
17.8. Условия в инструкциях WHERE и HAVING 342
17.9. Индексы 345
17.10. Вложенные запросы 347
17.11. Транзакции 348
17.12. Удаление таблицы и базы данных 351
Глава 18. Доступ к базе данных SQLite из Python
352
18.1. Создание и открытие базы данных 353
18.2. Выполнение запросов 354
18.3. Обработка результата запроса 358
18.4. Управление транзакциями 362
18.5. Создание пользовательской сортировки 364
18.6. Поиск без учета регистра символов 365
18.7. Создание агрегатных функций 366
18.8. Преобразование типов данных 367
18.9. Сохранение в таблице даты и времени 371
18.10. Обработка исключений 372
18.11. Трассировка выполняемых запросов 375
Глава 19. Взаимодействие с Интернетом
376
19.1. Разбор URL-адреса 376
19.2. Кодирование и декодирование строки запроса 379
19.3. Преобразование относительного URL-адреса в абсолютный 383
19.4. Разбор HTML-эквивалентов 383
19.5. Обмен данными по протоколу HTTP 385
19.6. Обмен данными с помощью модуля urllib.request 390
19.7. Определение кодировки 393
ЧАСТЬ II. БИБЛИОТЕКА PYQT 5
395
Глава 20. Знакомство с PyQt 5
397
20.1. Установка PyQt 5 397
20.2. Первая программа 400
20.3. Структура PyQt-программы 401
20.4. ООП-стиль создания окна 403
20.5. Создание окна с помощью программы Qt Designer 407
20.5.1. Создание формы 407
20.5.2. Загрузка ui-файла в программе 409
20.5.3. Преобразование ui-файла в py-файл 411
20.6. Модули PyQt 5 413
20.7. Типы данных в PyQt 414
20.8. Управление основным циклом приложения 415
20.9. Многопоточные приложения 416
20.9.1. Класс QThread: создание потока 416
20.9.2. Управление циклом внутри потока 420
20.9.3. Модуль queue: создание очереди заданий 424
20.9.4. Классы QMutex и QMutexLocker 427
20.10. Вывод заставки 431
20.11. Доступ к документации 433
Глава 21. Управление окном приложения
435
21.1. Создание и отображение окна 435
21.2. Указание типа окна 436
21.3. Изменение и получение размеров окна 438
21.4. Местоположение окна на экране и управление им 441
21.5. Указание координат и размеров 444
21.5.1. Класс QPoint: координаты точки 444
21.5.2. Класс QSize: размеры прямоугольной области 445
21.5.3. Класс QRect: координаты и размеры прямоугольной области 447
21.6. Разворачивание и сворачивание окна 452
21.7. Управление прозрачностью окна 454
21.8. Модальные окна 455
21.9. Смена значка в заголовке окна 456
21.10. Изменение цвета фона окна 457
21.11. Вывод изображения в качестве фона 459
21.12. Создание окна произвольной формы 460
21.13. Всплывающие подсказки 462
21.14. Закрытие окна из программы 463
Глава 22. Обработка сигналов и событий
464
22.1. Назначение обработчиков сигналов 464
22.2. Блокировка и удаление обработчика 468
22.3. Генерация сигналов 470
22.4. Передача данных в обработчик 472
22.5. Использование таймеров 473
22.6. Перехват всех событий 476
22.7. События окна 479
22.7.1. Изменение состояния окна 479
22.7.2. Изменение положения и размеров окна 480
22.7.3. Перерисовка окна или его части 481
22.7.4. Предотвращение закрытия окна 482
22.8. События клавиатуры 483
22.8.1. Установка фокуса ввода 483
22.8.2. Назначение клавиш быстрого доступа 486
22.8.3. Нажатие и отпускание клавиши на клавиатуре 488
22.9. События мыши 489
22.9.1. Нажатие и отпускание кнопки мыши 489
22.9.2. Перемещение указателя мыши 491
22.9.3. Наведение и увод указателя 492
22.9.4. Прокрутка колесика мыши 492
22.9.5. Изменение внешнего вида указателя мыши 493
22.10. Технология drag & drop 495
22.10.1. Запуск перетаскивания 495
22.10.2. Класс QMimeData 497
22.10.3. Обработка сброса 498
22.11. Работа с буфером обмена 500
22.12. Фильтрация событий 501
22.13. Искусственные события 501
Глава 23. Размещение компонентов в окнах
503
23.1. Абсолютное позиционирование 503
23.2. Горизонтальное и вертикальное выравнивание 504
23.3. Выравнивание по сетке 507
23.4. Выравнивание компонентов формы 510
23.5. Классы QStackedLayout и QStackedWidget 512
23.6. Класс QSizePolicy 513
23.7. Объединение компонентов в группу 514
23.8. Панель с рамкой 516
23.9. Панель с вкладками 517
23.10. Компонент «аккордеон» 521
23.11. Панели с изменяемым размером 523
23.12. Область с полосами прокрутки 525
Глава 24. Основные компоненты
526
24.1. Надпись 526
24.2. Командная кнопка 529
24.3. Переключатель 531
24.4. Флажок 531
24.5. Однострочное текстовое поле 532
24.5.1. Основные методы и сигналы 532
24.5.2. Ввод данных по маске 535
24.5.3. Контроль ввода 536
24.6. Многострочное текстовое поле 537
24.6.1. Основные методы и сигналы 538
24.6.2. Изменение параметров поля 540
24.6.3. Указание параметров текста и фона 541
24.6.4. Класс QTextDocument 542
24.6.5. Класс QTextCursor 545
24.7. Текстовый браузер 548
24.8. Поля для ввода целых и вещественных чисел 550
24.9. Поля для ввода даты и времени 551
24.10. Календарь 554
24.11. Электронный индикатор 556
24.12. Индикатор хода процесса. 557
24.13. Шкала с ползунком 558
24.14. Круговая шкала с ползунком 560
24.15. Полоса прокрутки 561
24.16. Web-браузер 561
Глава 25. Списки и таблицы
565
25.1. Раскрывающийся список 565
25.1.1. Добавление, изменение и удаление элементов 565
25.1.2. Изменение параметров списка 566
25.1.3. Поиск элементов 567
25.1.4. Сигналы 568
25.2. Список для выбора шрифта 568
25.3. Роли элементов 569
25.4. Модели 570
25.4.1. Доступ к данным внутри модели 570
25.4.2. Класс QStringListModel 571
25.4.3. Класс QStandardItemModel 573
25.4.4. Класс QStandardItem 576
25.5. Представления 579
25.5.1. Класс QAbstractItemView 580
25.5.2. Простой список 583
25.5.3. Таблица 585
25.5.4. Иерархический список 587
25.5.5. Управление заголовками строк и столбцов 589
25.6. Управление выделением элементов 591
25.7. Промежуточные модели 593
25.8. Использование делегатов 595
Глава 26. Работа с базами данных
599
26.1. Соединение с базой данных 599
26.2. Получение сведений о структуре таблицы 602
26.2.1. Получение сведений о таблице 602
26.2.2. Получение сведений об отдельном поле 603
26.2.3. Получение сведений об индексе 603
26.2.4. Получение сведений об ошибке 604
26.3. Выполнение SQL-запросов и получение их результатов 604
26.3.1. Выполнение запросов 605
26.3.2. Обработка результатов выполнения запросов 607
26.3.3. Очистка запроса 608
26.3.4. Получение служебных сведений о запросе 609
26.4. Модели, связанные с данными 609
26.4.1. Модель, связанная с SQL-запросом 609
26.4.2. Модель, связанная с таблицей 611
26.4.3. Модель, поддерживающая межтабличные связи 616
26.4.4. Использование связанных делегатов 619
Глава 27. Работа с графикой
621
27.1. Вспомогательные классы 621
27.1.1. Класс QColor: цвет 622
27.1.2. Класс QPen: перо 625
27.1.3. Класс QBrush: кисть 627
27.1.4. Класс QLine: линия 627
27.1.5. Класс QPolygon: многоугольник 628
27.1.6. Класс QFont: шрифт 630
27.2. Класс QPainter 632
27.2.1. Рисование линий и фигур 633
27.2.2. Вывод текста 636
27.2.3. Вывод изображения 637
27.2.4. Преобразование систем координат 638
27.2.5. Сохранение команд рисования в файл 639
27.3. Работа с изображениями 640
27.3.1. Класс QPixmap 641
27.3.2. Класс QBitmap 643
27.3.3. Класс QImage 644
27.3.4. Класс QIcon 647
Глава 28. Графическая сцена
649
28.1. Класс QGraphicsScene: сцена 649
28.1.1. Настройка сцены 650
28.1.2. Добавление и удаление графических объектов 650
28.1.3. Добавление компонентов на сцену 651
28.1.4. Поиск объектов 652
28.1.5. Управление фокусом ввода 653
28.1.6. Управление выделением объектов 654
28.1.7. Прочие методы и сигналы 654
28.2. Класс QGraphicsView: представление 656
28.2.1. Настройка представления 656
28.2.2. Преобразования между координатами представления и сцены 657
28.2.3. Поиск объектов 658
28.2.4. Преобразование системы координат 658
28.2.5. Прочие методы 659
28.3. Класс QGraphicsItem: базовый класс для графических объектов 660
28.3.1. Настройка объекта 660
28.3.2. Выполнение преобразований 662
28.3.3. Прочие методы 663
28.4. Графические объекты 664
28.4.1. Линия 664
28.4.2. Класс QAbstractGraphicsShapeItem 664
28.4.3. Прямоугольник 665
28.4.4. Многоугольник 665
28.4.5. Эллипс 665
28.4.6. Изображение 666
28.4.7. Простой текст 667
28.4.8. Форматированный текст 667
28.5. Группировка объектов 668
28.6. Эффекты 669
28.6.1. Класс QGraphicsEffect 669
28.6.2. Тень 669
28.6.3. Размытие 670
28.6.4. Изменение цвета 671
28.6.5. Изменение прозрачности 671
28.7. Обработка событий 672
28.7.1. События клавиатуры 672
28.7.2. События мыши 673
28.7.3. Обработка перетаскивания и сброса 675
28.7.4. Фильтрация событий 677
28.7.5. Обработка изменения состояния объекта 677
Глава 29. Диалоговые окна
679
29.1. Пользовательские диалоговые окна 679
29.2. Класс QDialogButtonBox 681
29.3. Класс QMessageBox 684
29.3.1. Основные методы и сигналы 685
29.3.2. Окно информационного сообщения 688
29.3.3. Окно подтверждения 688
29.3.4. Окно предупреждающего сообщения 689
29.3.5. Окно критического сообщения 689
29.3.6. Окно сведений о программе 690
29.3.7. Окно сведений о библиотеке Qt 690
29.4. Класс QInputDialog 691
29.4.1. Основные методы и сигналы 692
29.4.2. Окно для ввода строки 694
29.4.3. Окно для ввода целого числа 694
29.4.4. Окно для ввода вещественного числа 695
29.4.5. Окно для выбора пункта из списка 696
29.4.6. Окно для ввода большого текста 696
29.5. Класс QFileDialog 697
29.5.1. Основные методы и сигналы 698
29.5.2. Окно для выбора каталога 700
29.5.3. Окно для открытия файлов 701
29.5.4. Окно для сохранения файла 702
29.6. Окно для выбора цвета 704
29.7. Окно для выбора шрифта 705
29.8. Окно для вывода сообщения об ошибке 706
29.9. Окно с индикатором хода процесса 706
29.10. Создание многостраничного мастера 708
29.10.1. Класс QWizard 708
29.10.2. Класс QWizardPage 711
Глава 30. Создание SDI- и MDI-приложений
714
30.1. Создание главного окна приложения 714
30.2. Меню 718
30.2.1. Класс QMenuBar 719
30.2.2. Класс QMenu 720
30.2.3. Контекстное меню компонента 722
30.2.4. Класс QAction 723
30.2.5. Объединение переключателей в группу 726
30.3. Панели инструментов 727
30.3.1. Класс QToolBar 728
30.3.2. Класс QToolButton 729
30.4. Прикрепляемые панели 730
30.5. Управление строкой состояния 732
30.6. MDI-приложения 733
30.6.1. Класс QMdiArea 733
30.6.2. Класс QMdiSubWindow 736
30.7. Добавление значка приложения в область уведомлений 737
Глава 31. Мультимедиа
739
31.1. Класс QMediaPlayer 739
31.2. Класс QVideoWidget 748
31.3. Класс QMediaPlaylist 751
31.4. Запись звука 754
31.4.1. Класс QAudioRecorder 755
31.4.2. Класс QAudioEncoderSettings 757
31.5. Класс QSoundEffect 761
Глава 32. Печать документов
764
32.1. Основные средства печати 764
32.1.1. Класс QPrinter 764
32.1.2. Вывод на печать 768
32.1.3. Служебные классы 773
32.1.3.1. Класс QPageSize 774
32.1.3.2. Класс QPageLayout 776
32.2. Задание параметров принтера и страницы 777
32.2.1. Класс QPrintDialog 778
32.2.2. Класс QPageSetupDialog 779
32.3. Предварительный просмотр документов перед печатью 781
32.3.1. Класс QPrintPreviewDialog 781
32.3.2. Класс QPrintPreviewWidget 784
32.4. Получение сведений о принтере. Класс QPrinterInfo 786
32.5. Экспорт в формат PDF. Класс QPdfWriter 788

Заключение 791
Приложение. Описание электронного архива 792
Предметный указатель 793