1.88M
Категория: ПрограммированиеПрограммирование

Графический интерфейс в PyQt

1.

3. Графический интерфейс
в PyQt
Игорь Фукин

2.

Уроки по теме:
• QT 1. Что такое QT и PyQT. Знакомство
• QT 2. QtDesigner, pyuic, два способа подключения uic-файла
• QT 4. Файлы в Python. Типы файлов и работа с ними. Внутреннее устройство файлов
• QT 5. PyQT. Диалоги, работа с изображениями
• QT 6. Работа с простыми таблицами (csv). Работа с табличными данными в PyQT
• QT 7. Введение в БД, работа с SQL-таблицами и отображение данных в PyQT. Часть 1
• QT 9. Обработка клавиатуры и курсора. Сборка независимого
приложения. Работа над проектом PyQT.

3.

QT 1. Что такое QT и PyQT. Знакомство
Диалоговый режим работы
Событие (прописаны у виджетов) –> Обработчик -> Действие
Внимание! Работает Операционная система!
Проверяем в разных Windows, Linux, MacOS для разных разрешений экрана. Плывут размеры и
шрифты.
Общая схема:
1. Наследуемся от QMainWindow(предпочтительно) или Qwidget, (class Example(QMainWindow): )
2. В __init(self)__ вызываем super().__init__() и self.initUI()
3. Весь интерфейс прописываем в self.initUI() (к виджетам прикручиваем обработчики, а вот уже их
– отдельными методами класса)
4. app = QApplication(sys.argv)
ex = Example()
ex.show() (здесь отображается основное окно, дальше работа с событиями)
sys.exit(app.exec()) приложение запускается и работает пока не закроем основное окно

4.

QT 1. Что такое QT и PyQT. Знакомство
Стимулируем учеников к самостоятельному изучению документации
Меню, Строка статуса и т.п. – сами, принципы те же
«Крестики нолики QT edition»
Разработайте игру «Крестики-нолики» на поле 3×3 с графическим пользовательским интерфейсом на PyQT.
Поле должно быть формой (QWidget) с набором кнопок (QPushButton) ( подсказка: виджеты можно
объединять в списки).
При нажатии на кнопку в зависимости от того, чей ход, текст кнопки меняется на 'X' или 'O'. Выбор первого
игрока производится с помощью QRadioButton (по умолчанию первых игрок X). В случае победы или ничьей
должно отображаться соответствующее сообщение. Для отображения надо использовать виджет QLabel. В
случае победы X отображать "Выиграл X!", в случае победы O отображать " Выиграл O!", в случае ничьей
отображать "Ничья!". После победы одного из игроков игровое поле нужно блокировать до начала новой
игры. Новая игра может быть начата после нажатия на соответствующую кнопку (QPushButton) или при смене
обозначения хода у первого игрока (QRadioButton).
Класс, реализующий окно приложения, назовите TicTacToe. Кнопки для выполнения хода поместите
построчно во вложенный список, а сам список в свойство в объект окна и назовите его button_grid.
Обработчики нажатия на кнопки поля подключите к каждой кнопке индивидуально.Поле QLabel для
отображения результата назовите result. QRadioButton для выбора первого игрока назовите x_radio и o_radio
соответственно. Кнопку для начала новой игры new_game_button.

5.

Разбор задачи «Крестики нолики QT edition»
Qwidget – основное окно приложения, класс TicTacToe.
QPushButton – кнопки для Х и 0. Соберём в 3х3 список button_grid.
QRadioButton – выбор первого хода, Х или 0. По умолчанию Х.
Сами кнопки назовем x_radio и o_radio
Qlabel – для сообщений: "Выиграл X!", " Выиграл O!", "Ничья!".
Назовем этот объект result
QPushButton – еще одна кнопка, для начала новой игры. Назовём
new_game_button
Файл krestiki.py

6.

QT 2. QtDesigner, pyuic, два способа подключения uic-файла
https://build-system.fman.io/qt-designer-download

7.

QT 2. QtDesigner, pyuic, два способа подключения uic-файла
QtDesigner создает ui-файл следующего вида:
<?xml version="1.0" encoding="UTF-8"?> <ui
version="4.0"> <class>MainWindow</class> и т.д.
Минус:
Если ui-файл очень большой, то каждый
запуск программы будет занимать много
времени

8.

QT 2. QtDesigner, pyuic, два способа подключения uic-файла
Минус:
Нужны дополнительные действия
(но в PyCharm можно автоматизировать)

9.

QT 2. QtDesigner, pyuic, два способа подключения uic-файла
Способ 1.1 (для сдачи некоторых задач на проверку в ЛМС одним файлом)
Содержимое ui-файла
Подключаем
интерфейс

10.

Ох уж этот Layout…
Пользуемся в задачах по минимуму. В реале – там где надо
сгруппировать объекты, навести красоту и менять размеры окна.
Vertical, Horizontal, Grid и Form Layout
Можно – если несколько групп QRadioButton
grid.addWidget(elem, x, y) Подробно в документации
Вариант: создаем виртуальные группы в QtDesigner
Например, выделяем нужные кнопки и New button group (в меню)
или Assign to button group (если правой кнопкой мыши)
Теперь можно сделать обработчик на группу:
self.buttonGroup.buttonClicked.connect(self.run)

11.

QT 4. Файлы в Python.
В уроках поработаем с QTextBrowser. Есть шрифт, есть слайдер. В него
можно и HTML
Взять только текст, без форматирования

12.

QT 5. PyQT. Диалоги, работа с изображениями
Отображаем картинку через QPixmap и Qlabel

13.

QT 5. PyQT. Диалоги, работа с изображениями
Диалоговые окна
Не забываем проверить.
Вдруг пользователь закрыл окно,
ничего не выбрав
Возвращает объект QColor

14.

QT 5. PyQT. Диалоги, работа с изображениями
Минус: не можем дать
команду на перерисовку.
Но: можем вызвать update(),
он перерисует всю форму

15.

QT 5. PyQT. Диалоги, работа с изображениями
рисуем по кнопке
Для чего проверяем
это условие?

16.

Квадрат-объектив - 2
На экране нарисован квадрат. Пользователь в соответствующие поля вводит вещественное число k
(< 1) — коэффициент масштабирования стороны и целое число n — количество повторений.
Каждая сторона квадрата делится в пропорции, соответствующей указанному коэффициенту,
полученные точки соединяются и получается новый квадрат. Данная операция повторяется n раз.
Самый большой квадрат должен идти из точки с координатами (150, 150) и иметь сторону 200
Класс, реализующий окно приложения, назовите Square2.
Поле для ввода числа k назовите k. Для числа n соответственно n
Цвет, которым вы будете рисовать квадраты сохраните в атрибуте color объекта класса приложения
при инициализации в виде QColor.
Размер окна приложения сделайте строго 500 пикселей по каждому измерению. Для изображения
квадрата воспользуйтесь методом drawPolygon класса QPainter. Для создания объекта
многоугольника, который передается методу drawPolygon, используйте класс QPolygonF. Для
добавления точек в многоугольник используйте метод append. Все вычисления производите в
вещественных числах, вещественные результаты вычислений передавайте конструктору
класса QPointF - это точки - вершины многоугольника.

17.

Квадрат-объектив - 2

18.

Квадрат-объектив - 2
Если свернуть окно – рисунок пропадет или нет?

19.

Квадрат-объектив - 2

20.

Квадрат-объектив - 2
Выпуклая комбинация точек
BC = k*AC, 0<= k <= 1
A(xa,ya)
1-k
C(xc,yc) - координаты неизвестны
k
k
xa
xc
B(xb,yb)
xb
xc - xb = k*(xa-xb), 0<= k <= 1
xc = k*(xa-xb) – xb
xc = k*xa – k*xb – xb
xc = k*xa + (1-k)*xb - формулы выпуклой комбинации

21.

QT 6. Работа с простыми таблицами (csv).
Работа с табличными данными в PyQT

22.

QT 6. Работа с простыми таблицами (csv).
Работа с табличными данными в PyQT

23.

QT 6. Работа с простыми таблицами (csv).
Работа с табличными данными в PyQT

24.

QT 7. Введение в БД, работа с SQL-таблицами и
отображение данных в PyQT. Часть 1

25.

QT 8. Введение в БД, работа с SQL-таблицами и
отображение данных в PyQT. Часть 2

26.

QT 8. Введение в БД, работа с SQL-таблицами и
отображение данных в PyQT. Часть 2

27.

QT 9. Обработка клавиатуры и курсора.
Сборка независимого приложения.
Переопределяем метод у виджета
Виджет должен быть в фокусе ввода
Задача «Убегающая кнопка»

28.

QT 9. Обработка клавиатуры и курсора.
Сборка независимого приложения.
Задача «Убегающая кнопка»
Напишите программу «Убегающая кнопка» с использованием виджетов PyQT. На форме произвольного
размера располагается кнопка. Когда курсор мыши приближается к кнопке, она перемещается таким
образом, чтобы нельзя было на неё нажать. Кнопка не должна исчезать с экрана (частично или
полностью).

29.

QT 9. Обработка клавиатуры и курсора.
Сборка независимого приложения.
Обратите внимание:
- Куда устанавливали все библиотеки (может быть вирт.
окружение). Если открываете в стороннем PyCharm будьте
аккуратны.
- Куда устанавливали pyinstaller.
Дружите с командной строкой

30.

Pyinstaller вылетает, так как ПО
определяется как вредоносное в Win10-11
Решение:
Добавьте папку, в которой находится созданное приложение, в качестве исключения.
https://support.microsoft.com/en-us/windows/add-an-exclusion-to-windows-security811816c0-4dfd-af4a-47e4-c301afe13b26
1. Перейдите в Пуск > Настройки > Обновления и безопасность > Безопасность
Windows > Защита от вирусов и угроз.
2. В разделе "Параметры защиты от вирусов и угроз" выберите "Управление
параметрами", а затем в разделе "Исключения" выберите "Добавить или удалить
исключения".
3. Выберите Добавить исключение, а затем выберите "Файлы", "папки", "типы файлов"
или "процесс". Исключение папки также будет применяться ко всем вложенным папкам
внутри папки.

31.

Самостоятельная работа на SQL-запросы 26.01 – 31.01
• Из потока ввода stdin приходят параметры (один или несколько, в одну
строку через пробел или в несколько). Нужно открыть csv-файл с
заданным названием и из него отобрать данные, соответствующие
параметрам и вывести в консоль.
• Дано название БД и ее структура. Нужно выбрать данные по
определенному условию из одной таблицы. (Соединяемся с БД,
отправляем к ней запрос, выбираем нужное из ответа, выводим в
определенном порядке).
• Написать функцию. В нее передаются параметры, по которым нужно
сделать выборку из нескольких таблиц заданной БД и вернуть нужные
данные в определенном виде.
English     Русский Правила