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

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

Обложка:


Часть 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 31
1.6. Вывод результатов работы программы 33
1.7. Ввод данных 35
1.8. Доступ к документации 36
Глава 2. Переменные
40
2.1. Именование переменных 40
2.2. Типы данных 41
2.3. Присваивание значения переменным 44
2.4. Проверка типа данных 47
2.5. Преобразование типов данных 48
2.6. Удаление переменных 50
Глава 3. Операторы
52
3.1. Математические операторы 52
3.2. Двоичные операторы 54
3.3. Операторы для работы с последовательностями 55
3.4. Операторы присваивания 56
3.5. Приоритет выполнения операторов 57
Глава 4. Условные операторы и циклы
59
4.1. Операторы сравнения 60
4.2. Оператор ветвления if...else 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: генерирование случайных чисел 79
Глава 6. Строки и двоичные данные
82
6.1. Создание строки 83
6.2. Специальные символы 86
6.3. Операции над строками 87
6.4. Форматирование строк 90
6.5. Метод format() 95
6.5.1. Форматируемые строки 99
6.6. Функции и методы для работы со строками 100
6.7. Настройка локали 103
6.8. Изменение регистра символов 104
6.9. Функции для работы с символами 105
6.10. Поиск и замена в строке 105
6.11. Проверка типа содержимого строки 109
6.12. Тип данных bytes 111
6.13. Тип данных bytearray 116
6.14. Преобразование объекта в последовательность байтов 119
6.15. Шифрование строк 120
Глава 7. Регулярные выражения
122
7.1. Синтаксис регулярных выражений 122
7.2. Поиск первого совпадения с шаблоном 131
7.3. Поиск всех совпадений с шаблоном 136
7.4. Замена в строке 137
7.5. Прочие функции и методы 139
Глава 8. Списки, кортежи, множества и диапазоны
141
8.1. Создание списка 142
8.2. Операции над списками 145
8.3. Многомерные списки 148
8.4. Перебор элементов списка 148
8.5. Генераторы списков и выражения-генераторы 149
8.6. Функции map(), zip(), filter() и reduce() 150
8.7. Добавление и удаление элементов списка 153
8.8. Поиск элемента в списке и получение сведений о значениях, входящих в список 156
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 168
8.17.1. Генерирование неопределенного количества значений 168
8.17.2. Генерирование комбинаций значений 169
8.17.3. Фильтрация элементов последовательности 171
8.17.4. Прочие функции 172
Глава 9. Словари
175
9.1. Создание словаря 175
9.2. Операции над словарями 177
9.3. Перебор элементов словаря 179
9.4. Методы для работы со словарями 180
9.5. Генераторы словарей 183
Глава 10. Работа с датой и временем
184
10.1. Получение текущих даты и времени 184
10.2. Форматирование даты и времени 186
10.3. «Засыпание» скрипта 188
10.4. Модуль datetime: манипуляции датой и временем 188
10.4.1. Класс timedelta 189
10.4.2. Класс date 191
10.4.3. Класс time 194
10.4.4. Класс datetime 196
10.5. Модуль calendar: вывод календаря 201
10.5.1. Методы классов TextCalendar и LocaleTextCalendar 202
10.5.2. Методы классов HTMLCalendar и LocaleHTMLCalendar 204
10.5.3. Другие полезные функции 205
10.6. Измерение времени выполнения фрагментов кода 208
Глава 11. Пользовательские функции
210
11.1. Определение функции и ее вызов 210
11.2. Расположение определений функций 213
11.3. Необязательные параметры и сопоставление по ключам 214
11.4. Переменное число параметров в функции 216
11.5. Анонимные функции 218
11.6. Функции-генераторы 219
11.7. Декораторы функций 221
11.8. Рекурсия. Вычисление факториала 223
11.9. Глобальные и локальные переменные 224
11.10. Вложенные функции 228
11.11. Аннотации функций 229
Глава 12. Модули и пакеты
231
12.1. Инструкция import 231
12.2. Инструкция from 234
12.3. Пути поиска модулей 237
12.4. Повторная загрузка модулей 238
12.5. Пакеты 239
Глава 13. Объектно-ориентированное программирование
244
13.1. Определение класса и создание экземпляра класса 244
13.2. Методы __init__() и __del__() 247
13.3. Наследование 248
13.4. Множественное наследование 250
13.4.1. Примеси и их использование 252
13.5. Специальные методы 253
13.6. Перегрузка операторов 255
13.7. Статические методы и методы класса 258
13.8. Абстрактные методы 259
13.9. Ограничение доступа к идентификаторам внутри класса 260
13.10. Свойства класса 261
13.11. Декораторы классов 263
Глава 14. Обработка исключений
264
14.1. Инструкция try...except...else...finally 265
14.2. Инструкция with...as 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. Методы для работы с файлами 293
16.3. Доступ к файлам с помощью модуля os 299
16.4. Классы StringIO и BytesIO 301
16.5. Права доступа к файлам и каталогам 305
16.6. Функции для манипулирования файлами 307
16.7. Преобразование пути к файлу или каталогу 310
16.8. Перенаправление ввода/вывода 312
16.9. Сохранение объектов в файл 315
16.10. Функции для работы с каталогами 319
16.10.1. Функция scandir() 322
16.11. Исключения, возбуждаемые файловыми операциями 324
Часть II. Библиотека PyQt 5
325
Глава 17. Знакомство с PyQt 5
327
17.1. Установка PyQt 5 327
17.2. Первая программа 328
17.3. Структура PyQt-программы 329
17.4. ООП-стиль создания окна 331
17.5. Создание окна с помощью программы Qt Designer 335
17.5.1. Создание формы 335
17.5.2. Использование UI-файла в программе 337
17.5.3. Преобразование UI-файла в PY-файл 339
17.6. Модули PyQt 5 340
17.7. Типы данных в PyQt 341
17.8. Управление основным циклом приложения 342
17.9. Многопоточные приложения 344
17.9.1. Класс QThread: создание потока 344
17.9.2. Управление циклом внутри потока 347
17.9.3. Модуль queue: создание очереди заданий 351
17.9.4. Классы QMutex и QMutexLocker 354
17.10. Вывод заставки 359
17.11. Доступ к документации 361
Глава 18. Управление окном приложения
362
18.1. Создание и отображение окна 362
18.2. Указание типа окна 363
18.3. Изменение и получение размеров окна 365
18.4. Местоположение окна на экране и управление им 367
18.5. Указание координат и размеров 370
18.5.1. Класс QPoint: координаты точки 370
18.5.2. Класс QSize: размеры прямоугольной области 372
18.5.3. Класс QRect: координаты и размеры прямоугольной области 374
18.6. Разворачивание и сворачивание окна 379
18.7. Управление прозрачностью окна 381
18.8. Модальные окна 381
18.9. Смена значка в заголовке окна 383
18.10. Изменение цвета фона окна 384
18.11. Вывод изображения в качестве фона 385
18.12. Создание окна произвольной формы 387
18.13. Всплывающие подсказки 388
18.14. Программное закрытие окна 390
18.15. Использование таблиц стилей CSS для оформления окон 390
Глава 19. Обработка сигналов и событий
395
19.1. Назначение обработчиков сигналов 395
19.2. Блокировка и удаление обработчика 399
19.3. Генерация сигналов 401
19.4. Передача данных в обработчик 403
19.5. Использование таймеров 404
19.6. Перехват всех событий 407
19.7. События окна 410
19.7.1. Изменение состояния окна 410
19.7.2. Изменение положения и размеров окна 411
19.7.3. Перерисовка окна или его части 412
19.7.4. Предотвращение закрытия окна 413
19.8. События клавиатуры 414
19.8.1. Установка фокуса ввода 414
19.8.2. Назначение клавиш быстрого доступа 417
19.8.3. Нажатие и отпускание клавиши на клавиатуре 419
19.9. События мыши 420
19.9.1. Нажатие и отпускание кнопки мыши 420
19.9.2. Перемещение указателя мыши 422
19.9.3. Наведение и увод указателя 423
19.9.4. Прокрутка колесика мыши 423
19.9.5. Изменение внешнего вида указателя мыши 424
19.10. Технология drag & drop 425
19.10.1. Запуск перетаскивания 425
19.10.2. Класс QMimeData 427
19.10.3. Обработка сброса 429
19.11. Работа с буфером обмена 430
19.12. Фильтрация событий 431
19.13. Искусственные события 432
Глава 20. Размещение компонентов в окнах
434
20.1. Абсолютное позиционирование 434
20.2. Горизонтальное и вертикальное выравнивание 435
20.3. Выравнивание по сетке 438
20.4. Выравнивание компонентов формы 441
20.5. Классы QStackedLayout и QStackedWidget 443
20.6. Класс QSizePolicy 444
20.7. Объединение компонентов в группу 445
20.8. Панель с рамкой 447
20.9. Панель с вкладками 448
20.10. Компонент «аккордеон» 452
20.11. Панели с изменяемым размером 454
20.12. Область с полосами прокрутки 456
Глава 21. Основные компоненты
458
21.1. Надпись 458
21.2. Командная кнопка 461
21.3. Переключатель 463
21.4. Флажок 463
21.5. Однострочное текстовое поле 464
21.5.1. Основные методы и сигналы 464
21.5.2. Ввод данных по маске 467
21.5.3. Контроль ввода 468
21.6. Многострочное текстовое поле 469
21.6.1. Основные методы и сигналы 469
21.6.2. Изменение параметров поля 471
21.6.3. Указание параметров текста и фона 473
21.6.4. Класс QTextDocument 474
21.6.5. Класс QTextCursor 477
21.7. Текстовый браузер 480
21.8. Поля для ввода целых и вещественных чисел 481
21.9. Поля для ввода даты и времени 483
21.10. Календарь 486
21.11. Электронный индикатор 488
21.12. Индикатор хода процесса 489
21.13. Шкала с ползунком 490
21.14. Круговая шкала с ползунком 492
21.15. Полоса прокрутки 492
21.16. Веб-браузер 493
Глава 22. Списки и таблицы
498
22.1. Раскрывающийся список 498
22.1.1. Добавление, изменение и удаление элементов 498
22.1.2. Изменение параметров списка 499
22.1.3. Поиск элементов 500
22.1.4. Сигналы 501
22.2. Список для выбора шрифта 501
22.3. Роли элементов 502
22.4. Модели 503
22.4.1. Доступ к данным внутри модели 503
22.4.2. Класс QStringListModel 504
22.4.3. Класс QStandardItemModel 506
22.4.4. Класс QStandardItem 509
22.5. Представления 513
22.5.1. Класс QAbstractItemView 513
22.5.2. Простой список 516
22.5.3. Таблица 518
22.5.4. Иерархический список 520
22.5.5. Управление заголовками строк и столбцов 522
22.6. Управление выделением элементов 525
22.7. Промежуточные модели 526
22.8. Использование делегатов 528
Глава 23. Работа с базами данных
532
23.1. Соединение с базой данных 532
23.2. Получение сведений о структуре таблицы 535
23.2.1. Получение сведений о таблице 535
23.2.2. Получение сведений об отдельном поле 536
23.2.3. Получение сведений об индексе 537
23.2.4. Получение сведений об ошибке 537
23.3. Выполнение SQL-запросов и получение их результатов 538
23.3.1. Выполнение запросов 538
23.3.2. Обработка результатов выполнения запросов 541
23.3.3. Очистка запроса 543
23.3.4. Получение служебных сведений о запросе 543
23.4. Модели, связанные с данными 544
23.4.1. Модель, связанная с SQL-запросом 544
23.4.2. Модель, связанная с таблицей 545
23.4.3. Модель, поддерживающая межтабличные связи 551
23.4.4. Использование связанных делегатов 553
Глава 24. Работа с графикой
555
24.1. Вспомогательные классы 555
24.1.1. Класс QColor: цвет 556
24.1.2. Класс QPen: перо 559
24.1.3. Класс QBrush: кисть 561
24.1.4. Класс QLine: линия 562
24.1.5. Класс QPolygon: многоугольник 562
24.1.6. Класс QFont: шрифт 564
24.2. Класс QPainter 566
24.2.1. Рисование линий и фигур 567
24.2.2. Вывод текста 570
24.2.3. Вывод изображения 571
24.2.4. Преобразование систем координат 572
24.2.5. Сохранение команд рисования в файл 573
24.3. Работа с изображениями 574
24.3.1. Класс QPixmap 575
24.3.2. Класс QBitmap 577
24.3.3. Класс QImage 578
24.3.4. Класс QIcon 581
Глава 25. Графическая сцена
583
25.1. Класс QGraphicsScene: сцена 583
25.1.1. Настройка сцены 584
25.1.2. Добавление и удаление графических объектов 584
25.1.3. Добавление компонентов на сцену 585
25.1.4. Поиск объектов 586
25.1.5. Управление фокусом ввода 587
25.1.6. Управление выделением объектов 588
25.1.7. Прочие методы и сигналы 588
25.2. Класс QGraphicsView: представление 590
25.2.1. Настройка представления 590
25.2.2. Преобразования между координатами представления и сцены 592
25.2.3. Поиск объектов 592
25.2.4. Преобразование системы координат 593
25.2.5. Прочие методы 593
25.3. Класс QGraphicsItem: базовый класс для графических объектов 594
25.3.1. Настройка объекта 595
25.3.2. Выполнение преобразований 597
25.3.3. Прочие методы 597
25.4. Графические объекты 598
25.4.1. Линия 598
25.4.2. Класс QAbstractGraphicsShapeItem 599
25.4.3. Прямоугольник 599
25.4.4. Многоугольник 599
25.4.5. Эллипс 600
25.4.6. Изображение 600
25.4.7. Простой текст 601
25.4.8. Форматированный текст 602
25.5. Группировка объектов 603
25.6. Эффекты 603
25.6.1. Класс QGraphicsEffect 604
25.6.2. Тень 604
25.6.3. Размытие 605
25.6.4. Изменение цвета 605
25.6.5. Изменение прозрачности 606
25.7. Обработка событий 606
25.7.1. События клавиатуры 607
25.7.2. События мыши 607
25.7.3. Обработка перетаскивания и сброса 610
25.7.4. Фильтрация событий 611
25.7.5. Обработка изменения состояния объекта 612
Глава 26. Диалоговые окна
614
26.1. Пользовательские диалоговые окна 614
26.2. Класс QDialogButtonBox 616
26.3. Класс QMessageBox 619
26.3.1. Основные методы и сигналы 620
26.3.2. Окно информационного сообщения 622
26.3.3. Окно подтверждения 623
26.3.4. Окно предупреждающего сообщения 624
26.3.5. Окно критического сообщения 624
26.3.6. Окно сведений о программе 625
26.3.7. Окно сведений о библиотеке Qt 625
26.4. Класс QInputDialog 626
26.4.1. Основные методы и сигналы 626
26.4.2. Окно для ввода строки 628
26.4.3. Окно для ввода целого числа 629
26.4.4. Окно для ввода вещественного числа 630
26.4.5. Окно для выбора пункта из списка 630
26.4.6. Окно для ввода большого текста 631
26.5. Класс QFileDialog 632
26.5.1. Основные методы и сигналы 632
26.5.2. Окно для выбора каталога 634
26.5.3. Окно для открытия файлов 635
26.5.4. Окно для сохранения файла 637
26.6. Окно для выбора цвета 638
26.7. Окно для выбора шрифта 639
26.8. Окно для вывода сообщения об ошибке 640
26.9. Окно с индикатором хода процесса 641
26.10. Создание многостраничного мастера 642
26.10.1. Класс QWizard 642
26.10.2. Класс QWizardPage 646
Глава 27. Создание SDI- и MDI-приложений
648
27.1. Главное окно приложения 648
27.2. Меню 653
27.2.1. Класс QMenuBar 653
27.2.2. Класс QMenu 654
27.2.3. Контекстное меню компонента 657
27.2.4. Класс QAction 658
27.2.5. Объединение переключателей в группу 661
27.3. Панели инструментов 662
27.3.1. Класс QToolBar 662
27.3.2. Класс QToolButton 664
27.4. Прикрепляемые панели 665
27.5. Управление строкой состояния 667
27.6. MDI-приложения 668
27.6.1. Класс QMdiArea 668
27.6.2. Класс QMdiSubWindow 671
27.7. Добавление значка приложения в область уведомлений 672
Глава 28. Мультимедиа
674
28.1. Класс QMediaPlayer 674
28.2. Класс QVideoWidget 683
28.3. Класс QMediaPlaylist 686
28.4. Запись звука 689
28.4.1. Класс QAudioRecorder 689
28.4.2. Класс QAudioEncoderSettings 692
28.5. Класс QSoundEffect 695
Глава 29. Печать документов
699
29.1. Основные средства печати 699
29.1.1. Класс QPrinter 699
29.1.2. Вывод на печать 703
29.1.3. Служебные классы 708
29.1.3.1. Класс QPageSize 708
29.1.3.2. Класс QPageLayout 710
29.2. Задание параметров принтера и страницы 712
29.2.1. Класс QPrintDialog 712
29.2.2. Класс QPageSetupDialog 714
29.3. Предварительный просмотр документов перед печатью 716
29.3.1. Класс QPrintPreviewDialog 716
29.3.2. Класс QPrintPreviewWidget 719
29.4. Класс QPrinterInfo: получение сведений о принтере 721
29.5. Класс QPdfWriter: экспорт в формат PDF 723
Глава 30. Взаимодействие с Windows
725
30.1. Управление кнопкой в панели задач 725
30.1.1. Класс QWinTaskbarButton 725
30.1.2. Класс QWinTaskbarProgress 727
30.2. Списки быстрого доступа 730
30.2.1. Класс QWinJumpList 730
30.2.2. Класс QWinJumpListCategory 731
30.2.3. Класс QWinJumpListItem 732
30.3. Панели инструментов, выводящиеся на миниатюрах 735
30.3.1. Класс QWinThumbnailToolBar 735
30.3.2. Класс QWinThumbnailToolButton 736
30.4. Дополнительные инструменты по управлению окнами 739
30.5. Получение сведений об операционной системе 741
30.6. Получение путей к системным каталогам 742
Глава 31. Сохранение настроек приложений
743
31.1. Создание экземпляра класса QSettings 743
31.2. Запись и чтение данных 745
31.2.1. Базовые средства записи и чтения данных 745
31.2.2. Группировка сохраняемых значений. Ключи 746
31.2.3. Запись списков 748
31.3. Вспомогательные методы класса QSettings 750
31.4. Где хранятся настройки? 750
Глава 32. Приложение «Судоку»
752
32.1. Правила судоку 752
32.2. Описание приложения «Судоку» 753
32.3. Программирование приложения 755
32.3.1. Подготовительные действия 755
32.3.2. Класс MyLabel: ячейка поля судоку 755
32.3.3. Класс Widget: поле судоку 759
32.3.3.1. Конструктор класса Widget 760
32.3.3.2. Прочие методы класса Widget 762
32.3.4. Класс MainWindow: основное окно приложения 766
32.3.4.1. Конструктор класса MainWindow 767
32.3.4.2. Остальные методы класса MainWindow 770
32.3.5. Запускающий модуль 770
32.3.6. Копирование и вставка головоломок 771
32.3.6.1. Форматы данных 771
32.3.6.2. Реализация копирования и вставки в классе Widget 772
32.3.6.3. Реализация копирования и вставки в классе MainWindow 774
32.3.7. Сохранение и загрузка данных 778
32.3.8. Печать и предварительный просмотр 781
32.3.8.1. Реализация печати в классе Widget 781
32.3.8.2. Класс PreviewDialog: диалоговое окно предварительного просмотра 782
32.3.8.3. Реализация печати в классе MainWindow 785

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