Python 3 и PyQt. Разработка приложений

Николай Прохоренок

Обложка:


Оглавление Введение 13
Часть I. Основы Python 3 15
Глава 1. Первые шаги 17
1.1. Установка Python 17
1.2. Первая программа на Python 23
1.3. Структура программы 24
1.4. Комментарии 27
1.5. Скрытые возможности IDLE 28
1.6. Вывод результатов работы программы 29
1.7. Ввод данных 31
1.8. Доступ к документации 33
Глава 2. Переменные 36
2.1. Именование переменных 36
2.2. Типы данных 38
2.3. Присваивание значения переменным 41
2.4. Проверка типа данных 43
2.5. Преобразование типов данных 44
2.6. Удаление переменной 47
Глава 3. Операторы 48
3.1. Математические операторы 48
3.2. Двоичные операторы 50
3.3. Операторы для работы с последовательностями 51
3.4. Операторы присваивания 52
3.5. Приоритет выполнения операторов 53
Глава 4. Условные операторы и циклы 55
4.1. Операторы сравнения 56
4.2. Оператор ветвления if...else 58
4.3. Цикл for 61
4.4. Функции range() и enumerate() 63
4.5. Цикл while 66
4.6. Оператор continue. Переход на следующую итерацию цикла 67
4.7. Оператор break. Прерывание цикла 67
Глава 5. Числа 69
5.1. Встроенные функции для работы с числами 70
5.2. Модуль math. Математические функции 72
5.3. Модуль random. Генерация случайных чисел 73
Глава 6. Строки 76
6.1. Создание строки 77
6.2. Специальные символы 81
6.3. Операции над строками 81
6.4. Форматирование строк 84
6.5. Метод format() 90
6.6. Функции и методы для работы со строками 94
6.7. Настройка локали 97
6.8. Изменение регистра символов 98
6.9. Функции для работы с символами 98
6.10. Поиск и замена в строке 99
6.11. Проверка типа содержимого строки 102
6.12. Тип данных bytes 105
6.13. Тип данных bytearray 108
6.14. Преобразование объекта в последовательность байтов 112
6.15. Шифрование строк 112
Глава 7. Регулярные выражения 114
7.1. Синтаксис регулярных выражений 114
7.2. Поиск первого совпадения с шаблоном 123
7.3. Поиск всех совпадений с шаблоном 127
7.4. Замена в строке 128
7.5. Прочие функции и методы 130
Глава 8. Списки и кортежи 132
8.1. Создание списка 132
8.2. Операции над списками 136
8.3. Многомерные списки 139
8.4. Перебор элементов списка 139
8.5. Генераторы списков и выражения-генераторы 140
8.6. Функции map(), zip(), filter() и reduce() 141
8.7. Добавление и удаление элементов списка 144
8.8. Поиск элемента в списке 147
8.9. Переворачивание и перемешивание списка 148
8.10. Выбор элементов случайным образом 148
8.11. Сортировка списка 149
8.12. Заполнение списка числами 150
8.13. Преобразование списка в строку 151
8.14. Кортежи 151
8.15. Модуль itertools 153
8.15.1. Генерация неопределенного количества значений 153
8.15.2. Генерация комбинаций значений 154
8.15.3. Фильтрация элементов последовательности 156
8.15.4. Прочие функции 157
Глава 9. Словари и множества 159
9.1. Создание словаря 159
9.2. Операции над словарями 161
9.3. Перебор элементов словаря 163
9.4. Методы для работы со словарями 164
9.5. Генераторы словарей 166
9.6. Множества 167
9.7. Генераторы множеств 172
Глава 10. Работа с датой и временем 173
10.1. Получение текущей даты и времени 173
10.2. Форматирование даты и времени 175
10.3. "Засыпание" скрипта 177
10.4. Модуль datetime. Манипуляции датой и временем 178
10.4.1. Класс timedelta 178
10.4.2. Класс date 180
10.4.3. Класс time 183
10.4.4. Класс datetime 184
10.5. Модуль calendar. Вывод календаря 189
10.5.1. Методы классов TextCalendar и LocaleTextCalendar 190
10.5.2. Методы классов HTMLCalendar и LocaleHTMLCalendar 191
10.5.3. Другие полезные функции 192
10.6. Измерение времени выполнения фрагментов кода 195
Глава 11. Пользовательские функции 197
11.1. Создание функции и ее вызов 197
11.2. Расположение определений функций 200
11.3. Необязательные параметры и сопоставление по ключам 201
11.4. Переменное число параметров в функции 203
11.5. Анонимные функции 205
11.6. Функции-генераторы 206
11.7. Декораторы функций 207
11.8. Рекурсия. Вычисление факториала 209
11.9. Глобальные и локальные переменные 210
11.10. Вложенные функции 213
11.11. Аннотации функций 215
Глава 12. Модули и пакеты 216
12.1. Инструкция import 216
12.2. Инструкция from 219
12.3. Пути поиска модулей 222
12.4. Повторная загрузка модулей 223
12.5. Пакеты 224
Глава 13. Объектно-ориентированное программирование 228
13.1. Определение класса и создание экземпляра класса 228
13.2. Методы __init__() и __del__() 231
13.3. Наследование 232
13.4. Множественное наследование 234
13.5. Специальные методы 236
13.6. Перегрузка операторов 239
13.7. Статические методы и методы класса 242
13.8. Абстрактные методы 243
13.9. Ограничение доступа к идентификаторам внутри класса 244
13.10. Свойства класса 245
13.11. Декораторы классов 246
Глава 14. Обработка исключений 247
14.1. Инструкция try...except...else...finally 248
14.2. Инструкция with...as 252
14.3. Классы встроенных исключений 254
14.4. Пользовательские исключения 256
Глава 15. Работа с файлами и каталогами 259
15.1. Открытие файла 259
15.2. Методы для работы с файлами 265
15.3. Доступ к файлам с помощью модуля os 271
15.4. Классы StringIO и BytesIO 273
15.5. Права доступа к файлам и каталогам 277
15.6. Функции для манипулирования файлами 278
15.7. Преобразование пути к файлу или каталогу 281
15.8. Перенаправление ввода/вывода 283
15.9. Сохранение объектов в файл 286
15.10. Функции для работы с каталогами 289
Глава 16. Основы SQLite 293
16.1. Создание базы данных 293
16.2. Создание таблицы 295
16.3. Вставка записей 301
16.4. Обновление и удаление записей 303
16.5. Изменение свойств таблицы 304
16.6. Выбор записей 305
16.7. Выбор записей из нескольких таблиц 308
16.8. Условия в инструкции WHERE 309
16.9. Индексы 312
16.10. Вложенные запросы 314
16.11. Транзакции 315
16.12. Удаление таблицы и базы данных 317
Глава 17. Доступ к базе данных SQLite из Python 318
17.1. Создание и открытие базы данных 319
17.2. Выполнение запроса 319
17.3. Обработка результата запроса 324
17.4. Управление транзакциями 327
17.5. Создание пользовательской сортировки 328
17.6. Поиск без учета регистра символов 330
17.7. Создание агрегатных функций 331
17.8. Преобразование типов данных 332
17.9. Сохранение в таблице даты и времени 336
17.10. Обработка исключений 337
Глава 18. Взаимодействие с Интернетом 340
18.1. Разбор URL-адреса 340
18.2. Кодирование и декодирование строки запроса 343
18.3. Преобразование относительной ссылки в абсолютную 347
18.4. Разбор HTML-эквивалентов 347
18.5. Обмен данными по протоколу HTTP 348
18.6. Обмен данными с помощью модуля urllib.request 354
18.7. Определение кодировки 357
Часть II. Создание оконных приложений 359
Глава 19. Знакомство с PyQt 361
19.1. Установка PyQt 361
19.2. Первая программа 364
19.3. Структура программы 365
19.4. ООП-стиль создания окна 367
19.5. Создание окна с помощью программы Qt Designer 371
19.5.1. Создание формы 371
19.5.2. Загрузка ui-файла в программе 373
19.5.3. Преобразование ui-файла в py-файл 375
19.6. Модули PyQt 377
19.7. Типы данных в PyQt 377
19.8. Управление основным циклом приложения 379
19.9. Многопоточные приложения 381
19.9.1. Класс QThread. Создание потока 381
19.9.2. Управление циклом внутри потока 384
19.9.3. Модуль queue. Создание очереди заданий 388
19.9.4. Классы QMutex и QMutexLocker 391
19.10. Вывод заставки 395
19.11. Доступ к документации 397
Глава 20. Управление окном приложения 398
20.1. Создание и отображение окна 398
20.2. Указание типа окна 399
20.3. Изменение и получение размеров окна 401
20.4. Местоположение окна на экране 403
20.5. Указание координат и размеров 406
20.5.1. Класс QPoint. Координаты точки 407
20.5.2. Класс QSize. Размеры прямоугольной области 408
20.5.3. Класс QRect. Координаты и размеры прямоугольной области 410
20.6. Разворачивание и сворачивание окна 415
20.7. Управление прозрачностью окна 416
20.8. Модальные окна 417
20.9. Смена иконки в заголовке окна 419
20.10. Изменение цвета фона окна 420
20.11. Использование изображения в качестве фона 421
20.12. Создание окна произвольной формы 422
20.13. Всплывающие подсказки 423
20.14. Закрытие окна из программы 424
Глава 21. Обработка сигналов и событий 426
21.1. Назначение обработчиков сигналов 426
21.2. Блокировка и удаление обработчика 430
21.3. Генерация сигнала из программы 433
21.4. Новый стиль назначения и удаления обработчиков 435
21.5. Передача данных в обработчик 438
21.6. Использование таймеров 439
21.7. Перехват всех событий 442
21.8. События окна 445
21.8.1. Изменение состояния окна 445
21.8.2. Изменение положения окна и его размеров 446
21.8.3. Перерисовка окна или его части 447
21.8.4. Предотвращение закрытия окна 448
21.9. События клавиатуры 449
21.9.1. Установка фокуса ввода 449
21.9.2. Назначение клавиш быстрого доступа 451
21.9.3. Нажатие и отпускание клавиши на клавиатуре 454
21.10. События мыши 455
21.10.1. Нажатие и отпускание кнопки мыши 455
21.10.2. Перемещение указателя 456
21.10.3. Наведение и выведение указателя 457
21.10.4. Прокрутка колесика мыши 457
21.10.5. Изменение внешнего вида указателя мыши 458
21.11. Технология drag & drop 460
21.11.1. Запуск перетаскивания 460
21.11.2. Класс QMimeData 462
21.11.3. Обработка сброса 463
21.12. Работа с буфером обмена 465
21.13. Фильтрация событий 465
21.14. Искусственные события 466
Глава 22. Размещение нескольких компонентов в окне 468
22.1. Абсолютное позиционирование 468
22.2. Горизонтальное и вертикальное выравнивание 469
22.3. Выравнивание по сетке 472
22.4. Выравнивание компонентов формы 473
22.5. Классы QStackedLayout и QStackedWidget 475
22.6. Класс QSizePolicy 477
22.7. Объединение компонентов в группу 478
22.8. Панель с рамкой 479
22.9. Панель с вкладками 480
22.10. Компонент "аккордеон" 484
22.11. Панели с изменяемым размером 485
22.12. Область с полосами прокрутки 487
Глава 23. Основные компоненты 489
23.1. Надпись 489
23.2. Командная кнопка 492
23.3. Переключатель 494
23.4. Флажок 494
23.5. Однострочное текстовое поле 495
23.5.1. Основные методы и сигналы 495
23.5.2. Ввод данных по маске 498
23.5.3. Контроль ввода 499
23.6. Многострочное текстовое поле 500
23.6.1. Основные методы и сигналы 500
23.6.2. Изменение настроек поля 502
23.6.3. Изменение характеристик текста и фона 504
23.6.4. Класс QTextDocument 505
23.6.5. Класс QTextCursor 508
23.7. Текстовый браузер 511
23.8. Поля для ввода целых и вещественных чисел 512
23.9. Поля для ввода даты и времени 514
23.10. Календарь 516
23.11. Электронный индикатор 517
23.12. Индикатор хода процесса 518
23.13. Шкала с ползунком 519
23.14. Класс QDial 521
23.15. Полоса прокрутки 522
Глава 24. Списки и таблицы 523
24.1. Раскрывающийся список 523
24.1.1. Добавление, изменение и удаление элементов 523
24.1.2. Изменение настроек 524
24.1.3. Поиск элемента внутри списка 526
24.1.4. Сигналы 526
24.2. Список для выбора шрифта 526
24.3. Роли элементов 527
24.4. Модели 528
24.4.1. Доступ к данным внутри модели 528
24.4.2. Класс QStringListModel 529
24.4.3. Класс QStandardItemModel 530
24.4.4. Класс QStandardItem 533
24.5. Представления 536
24.5.1. Класс QAbstractItemView 536
24.5.2. Простой список 539
24.5.3. Таблица 540
24.5.4. Иерархический список 543
24.5.5. Управление заголовками строк и столбцов 545
24.6. Управление выделением элементов 547
24.7. Промежуточные модели 549
Глава 25. Работа с графикой 551
25.1. Вспомогательные классы 551
25.1.1. Класс QColor. Цвет 551
25.1.2. Класс QPen. Перо 555
25.1.3. Класс QBrush. Кисть 556
25.1.4. Класс QLine. Линия 557
25.1.5. Класс QPolygon. Многоугольник 558
25.1.6. Класс QFont. Шрифт 560
25.2. Класс QPainter 562
25.2.1. Рисование линий и фигур 562
25.2.2. Вывод текста 565
25.2.3. Вывод изображения 566
25.2.4. Преобразование систем координат 567
25.2.5. Сохранение команд рисования в файл 568
25.3. Работа с изображениями 569
25.3.1. Класс QPixmap 570
25.3.2. Класс QBitmap 572
25.3.3. Класс QImage 573
25.3.4. Класс QIcon 576
Глава 26. Графическая сцена 578
26.1. Класс QGraphicsScene. Сцена 578
26.1.1. Настройка параметров сцены 579
26.1.2. Добавление и удаление графических объектов 579
26.1.3. Добавление компонентов на сцену 580
26.1.4. Поиск объектов 581
26.1.5. Управление фокусом ввода 582
26.1.6. Управление выделением объектов 582
26.1.7. Прочие методы и сигналы 583
26.2. Класс QGraphicsView. Представление 584
26.2.1. Настройка параметров представления 584
26.2.2. Преобразования между координатами представления и сцены 586
26.2.3. Поиск объектов 586
26.2.4. Трансформация систем координат 587
26.2.5. Прочие методы 587
26.3. Класс QGraphicsItem. Базовый класс для графических объектов 588
26.3.1. Настройка параметров объекта 588
26.3.2. Трансформация объекта 590
26.3.3. Прочие методы 591
26.4. Графические объекты 592
26.4.1. Линия 592
26.4.2. Класс QAbstractGraphicsShapeItem 593
26.4.3. Прямоугольник 593
26.4.4. Многоугольник 593
26.4.5. Эллипс 594
26.4.6. Изображение 594
26.4.7. Простой текст 595
26.4.8. Форматированный текст 595
26.5. Группировка объектов 597
26.6. Эффекты 597
26.6.1. Класс QGraphicsEffect 597
26.6.2. Тень 598
26.6.3. Размытие 599
26.6.4. Изменение цвета 599
26.6.5. Изменение прозрачности 600
26.7. Обработка событий 600
26.7.1. События клавиатуры 600
26.7.2. События мыши 601
26.7.3. Обработка перетаскивания и сброса 603
26.7.4. Фильтрация событий 605
26.7.5. Обработка изменения состояния объекта 605
Глава 27. Диалоговые окна 607
27.1. Пользовательские диалоговые окна 607
27.2. Класс QDialogButtonBox 610
27.3. Класс QMessageBox 612
27.3.1. Основные методы и сигналы 614
27.3.2. Окно для вывода обычного сообщения 616
27.3.3. Окно запроса подтверждения 616
27.3.4. Окно для вывода предупреждающего сообщения 617
27.3.5. Окно для вывода критического сообщения 617
27.3.6. Окно "О программе" 618
27.3.7. Окно "About Qt" 618
27.4. Класс QInputDialog 618
27.4.1. Основные методы и сигналы 619
27.4.2. Окно для ввода строки 621
27.4.3. Окно для ввода целого числа 621
27.4.4. Окно для ввода вещественного числа 622
27.4.5. Окно для выбора пункта из списка 623
27.5. Класс QFileDialog 623
27.5.1. Основные методы и сигналы 624
27.5.2. Окно для выбора каталога 626
27.5.3. Окна для открытия файла 627
27.5.4. Окна для сохранения файла 628
27.6. Окно для выбора цвета 629
27.7. Окно для выбора шрифта 630
27.8. Окно для вывода сообщения об ошибке 631
27.9. Окно с индикатором хода процесса 632
27.10. Создание многостраничного мастера 633
27.10.1. Класс QWizard 633
27.10.2. Класс QWizardPage 637
Глава 28. Создание SDI- и MDI-приложений 640
28.1. Создание главного окна приложения 640
28.2. Меню 644
28.2.1. Класс QMenuBar 645
28.2.2. Класс QMenu 646
28.2.3. Контекстное меню 648
28.2.4. Класс QAction 649
28.2.5. Объединение переключателей в группу 652
28.3. Панели инструментов 653
28.3.1. Класс QToolBar 653
28.3.2. Класс QToolButton 655
28.4. Прикрепляемые панели 656
28.5. Управление строкой состояния 658
28.6. MDI-приложения 659
28.6.1. Класс QMdiArea 659
28.6.2. Класс QMdiSubWindow 662
28.7. Добавление иконки приложения в область уведомлений 663
Заключение 665
Приложение. Описание электронного архива 666
Предметный указатель 667