Comments 21
Прикольным свойством синтаксиса Питона является то, что вместо pass можно поставить три точки:
def delete_user(self, user: User):
...
Хотя семантика немного разная, но результат тот же.
Не надо делать UI на Питоне, не надо.
А на чем надо делать начинающим разработчикам UI?
На компилируемых языках.
От использования компилируемого языка UI не станет ни лучше, ни хуже. Тем более под капотом у PySide библиотека Qt на C++.
Спор о "правильности" языков со строгой типизацией или с динамической идет не первый десяток лет.
А новички как выбирали языки с низким порогом вхождения и большим количеством готовых библиотек, так и выбирают.
Типизация тут не при чем, а тот факт, что новички выбирают питон - далеко не аргумент в пользу того, что на нем стоит делать приложения с GUI. Питон - далеко, очень далеко не самый подходящий для этого инструмент. Его удел - склейка библиотек, написанных на других языках и бэкенд, производительность которого без костылей не впечатляет.
Эта статья для людей которые изучают питон. Чувак изучает язык и ему по барабану его производительность. Научится ли он работать с классами, делая гуи? Вполне может. Выучит ли он базовые типы и синтаксис языка? Да, вполне себе. Научится ли он базово алгоритмике? Тоже да.
Вообще люди делают визуальные новеллы на renpy с гуи, и у них проблем нет с производительностью(сам лично тестил - все там хорошо кликается и бодро работает), инструмент устраивает, так что твои тезисы про то, что питон не для гуи, сам по себе спорный
Можно какие нибудь аргументы?
Создай канвас и рисуй случайные линии на канвасе. Посчитай, сколько их рисуется за секунду. Затем, проверь это же на компилируемом языке.
Если мне нужно рисовать сотни линий в секунду, то я возьму подходящий инструмент, например, биндинг к OpenGL. На питоне так то 2D/3D игры делают.
Но причем тут GUI? Элементы не питоном же обрисовываются, а скомпилированными библиотеками. Я не думаю, что скорость отрисовки сотни элементов будет заметно большой, тем более на каком нибудь PyQT, где тупо xml файл с разметкой загружается.
Статичные элементы обрабатывает сторонняя библиотека, а команды на обработку отдает Питон. Рисование линий - это стандартный тест производительности отрисовки, в том числе для GUI. Одной командой нарисовать линии "бесконечно" задать нельзя, если в самой библиотеке не будет создан такой странный метод. Следовательно, отдавать команды будет Питон из цикла.
Любые действия, идущие от UI, будут останавливать основной поток, в котором идет отрисовка интерфейса, чтобы выполнять код (например, кнопки). Время выполнения кода в кнопке = время фриза окна.
Время реакции кода на клик, думаю будет в статистической погрешности. Какая разница, за 0.1 мс среагировал код, или за 1 мс.
Лично я рисовал на канвасе на самой одной из самых медленных библиотек - tkinter. Сотня элементов перерисовывалась в режиме реального времени без заметных глазу лагов. А тысячи куда? Можете привести пример?
Речь не о реакции на клик, а не действии внутри кнопки.
Сотня элементов - это не значит, что выполнено 100 инструкций для отрисовки. Одна лишь только векторная кнопка может потребовать отрисовки в десятки линий. Питон с PyQt спасает только то, что GUI рисует сама библиотека кодом на C++. А вот любое рисование внутри этого GUI средствами Питона обречено на лаги.
А про игры можешь почитать тут, например https://sky.pro/wiki/gamedev/sozdanie-3d-igr-na-python-vozmozhnosti-i-ogranicheniya/
Пример простой даже не 3D, а просто 2.5D игры на Питоне. Загляни в заключение статьи
https://habr.com/ru/articles/749764/
Вы сейчас серьезно? Человек реализовал софтверный рендеринг и все делал вручную, используя библиотеку для 2d игр (с которой она как бы справляется сама по себе нормально).
И ещё раз, какое это имеет отношение к GUI? Если тебе нужны кнопки и другие контролы, ты не будешь их рисовать ручками.
Нет ничего более неблагодарного и бесполезного чем графика на питоне)
Спасибо автору, буду знать, с чего начать
А вы, получается, обучаете программированию на питоне?
По теме статьи - я согласен с вашим тезисом, что новичкам тяжело перескочить с консольных программ до чего-то более современного без внешней помощи от учителя.
Трудность не в том, чтобы взять готовый фреймворк типа Джанго, а в понимании как они устроены. Все эти библиотеки выглядят как черный ящик. И переход от консольных приложений до современных решений слишком резкий получается. Нужны промежуточные этапы обучения. У вас хороший пример получился
Спасибо за положительный отзыв.
Целенаправленно обучением Python я не занимаюсь. Более того, знаю Python весьма посредственно. Мой основной стек Java.
Со временем видишь как развиваются начинающие, где у них возникают трудности. ИТ технологии стали массовой отраслью.
Причем сейчас довольно много народа пытаются попробовать ИТ без четкой цели "хочу стать именно разработчиком, эта мечта всей моей жизни". Классический путь в виде поступления в ВУЗ на ИТ специальность для таких товарищей слишком серьезное и рискованное решение.
Не пытаюсь делать "профессиональных разработчиков", пытаюсь дать таким ребятами именно положительный опыт "пробования". Кому захочется стать профи - добро пожаловать в профильные учебные заведения.
От input() к UI после вводного курса по Python