⌨️ Учимся писать графический интерфейс на Python
Плейлист из 11 видео, по которым вы научитесь работать со всеми базовыми компонентами десктоп интерфейса. Использовать вы будете Python и библиотеку для работы с интерфейсом Qt5.
1. Программа для скачивания видео с YouTube
[6:30]
2. Удалённый рабочий стол
[21:22]
3. Чат с графическим интерфейсом
[22:47]
4. Создаём форму для регистрации
[9:01]
5. Распознавание речи с графическим интерфейсом
[22:47]
6. Работа с буфером обмена
[4:03]
#python#ui
Анализ видео: подготовка данных
Я использую python, но общая логика алгоритма может пригодиться и для других языков.
Сначала нужно покадрово считать видео. Сделаем это с помощью библиотеки OpenCV (cv2):
import cv2
# видео целиком
video = cv2.VideoCapture('file_name.mp4')
# частота кадров
fps = int(video.get(cv2.CAP_PROP_FPS))
# число кадров во всем видео
frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
Теперь можно запустить цикл и собрать один кадр за каждую секунду. В цикле повторяется такой код:
ret, frame = video.read()
Каждую итерацию считывается следующий кадр. В ret записывается информация о корректности считывания (True/False), frame — кадр в формате массива с rgb каждого пикселя.
Имея частоту видео, мы можем записать только один кадр в секунду. Такого объема данных достаточно для анализа. В итоге получаем список с числом кадров равным длительности видео в секундах. Что делать с ним дальше расскажу в следующем посте.
P.S. В комментариях полный код этой части.
#датавиз#python
🚀Отказываюсь от Списков в пользу Сеток в UI
Раньше для списков в Compose я по привычке использовал LazyColumn. Но чем больше работаю с адаптивными интерфейсами, тем очевиднее: это никуда не годиться и надо использовать доступное пространство, а не тупо растягивать интерфейс. Перехожу на Grid компоновку ✔️
LazyVerticalGrid позволяет задать фиксированную ширину колонки, и система сама рассчитает, сколько их поместится на экране.
В результате:
1️⃣ адаптивность «из коробки» на телефонах, планшетах и больших экранах
2️⃣ минимум дополнительного кода,
3️⃣единый компонент вместо костылей для разных форм-факторов.
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 120.dp),
modifier = Modifier.fillMaxSize(),
contentPadding = PaddingValues(8.dp)
) {
items(100) { Item(...) }
}
Определение количества колонок происходит на основе политики GridCell:
// всегда N колонок
GridCells.Fixed(N)
// автоматический расчет на основе минимальной ширины колонки
GridCells.Adaptive(minSize = 120.dp)
// каждая ячейка шириной 100dp
GridCells.FixedSize(100.dp)
📱 На маленьком экране это будет 2–3 колонки, а на планшете — уже 5–6, и всё это без ручной логики.
Есть еще более гибкий вариант если элементы строк должны быть разной высоты - LazyVerticalStaggeredGrid (стиль как в Pinterest)
LazyVerticalStaggeredGrid(
columns = Adaptive(minSize = 150.dp),
modifier = Modifier.fillMaxSize(),
contentPadding = PaddingValues(8.dp)
) {
items(100) { Item(...) }
}
❗️ Теперь я придерживаюсь строго правила:
Если не могу явно сформулировать почему интерфейс должен быть в одну колонку, то вертикальный список брать не стоит!
🔗 Очень хорошо построение списков осветили в документации по Lazy Layout
Аналогично можно проделать и с RecyclerView, использую вместо LinearLayoutManager вариант с сеткой - GridLayoutManager или StaggeredGridLayoutManager, только там не будет автоматического расчета колонок на основе доступного места. Это придется реализовывать самостоятельно.
✍️ Что думаете о таком подходе для UI?Ударит по производительности?
#ui#android#compose
🔥 Сегодня
**Moscow Python Meetup**
📅 22 февраля / 18:00 / Москва, ул. Льва Толстого, д.16, конференц-зал «Экстрополис»
💵 Бесплатно
📝 Регистрация тут: https://goo.gl/sqFZUE
53я встреча сообщества Moscow Python. С докладами выступят разработчики из «Лаборатории Касперского», Сбербанка и Яндекса. Они расскажут об asyncio, мобильной разработке на Питоне и о применении JupyterHub.
🔗 Программа: https://goo.gl/kKpQqv
🔗 Сайт: https://goo.gl/8Woxvh
#python#Москва
✅ Завтра
**Moscow Python Meetup**
📅 22 февраля / 18:00 / Москва, ул. Льва Толстого, д.16, конференц-зал «Экстрополис»
💵 Бесплатно
📝 Регистрация тут: https://goo.gl/sqFZUE
53я встреча сообщества Moscow Python. С докладами выступят разработчики из «Лаборатории Касперского», Сбербанка и Яндекса. Они расскажут об asyncio, мобильной разработке на Питоне и о применении JupyterHub.
🔗 Программа: https://goo.gl/kKpQqv
🔗 Сайт: https://goo.gl/y82XG7
#python#Москва
¿Que puede hacer este bot?
@PypiStatsBot
Con este bot puede obtener estadísticas para los paquetes de Python de pypistats.org
Idioma: inglés
(Visto en @botsgram_cu)
#python#programación