Python and PyQt the architecture of Apps. with GUI for experimental data analysis from start to end

  Рет қаралды 3,068

PyScientist

PyScientist

4 жыл бұрын

В этой видео заметке показываю как создать приложение на Python для анализа экспериментальных данных. В качестве интерфейса будем использовать как обычно PyQt, при этом за отображение данных и оформление графиков будет отвечать библиотека Matplotlib. Для раскрытия темы архитектуры приложения предварительно расскажу о этапах создания которым я стараюсь придерживаться. Всего я выделяю следующие 5 этапов:
-Разработка архитектуры приложения, а именно, что и как будет работать, на основе каких библиотек, какие данные будут входные и какие выходные, нужна ли приложению база данных, как будет осуществляться управление приложением (все должно быть в виде концепции).
- По результатам идейной проработки создается графический интерфейс программы front-end (в процессе его создания идея дорабатывается и улучшается с учетом выявленных проблем).
- Далее на этапе 3 создается back-end для обработки данных согласно с алгоритмами обработки (бизнес логики).
- В качестве четвертого этапа прорабатываем связь back-end и front-end то-есть взаимодействие пользователя с кнопками, текстовыми полями и другими особенностями интерфейса для исполнения запрограмированного back-end кода.
- После того как этапы разработки пройдены программа тестируется на наличие явных и скрытых ошибок, проводится ее доработка с учетом выявленных недостатков. (кроме того в процессе разработки учитываем последующее тестирование и вообще берем за правило программировать исключения).
В процессе разработки архитектуры приложения будем руководствоваться принципами SOLID, в видео кратко о них расскажу. Далее сделаем
программу, протестируем ее и опробуем на реальных данных все в реальном времени.
Теперь немного о функциях будущей программы:
В нашем случае, необходимо создать программу, импортирующую данные из txt фала и отображающую их в виде диаграммы рассеяния(кросс-плота).
После чего для данных автоматически подбирается модель их характеризующая.
Следуя шагам разработки программы и используя принципы разработки SOLID можно разработать программу, которую в дальнейшем можно расширять. Это и сделаем в дальнейшем, комментируйте и предлагайте, что можно поменять в программе.
Тайминг:
0:58 Общий обзор видео.
1:37 Этапы разработки ПО на Python да и не только на Python.
5:06 Принципы SOLID.
11:42 Постановка задачи разработки ПО и проработка основной идеи.
14:11 Написание front-end с использованием QtDesigner.
20:46 Конвертация файла ui в py для дальнейшего включения в программу.
21:56 Инициализация основного окна приложения.
26:24 Корректировка front-end с использованием PyCharm.
36:27 Помещаем холст с рисунком (полем для отображения графика) matplotlib в QWidget.
46:55 Настраиваем импорт данных из файла txt в таблицу QTableWidget для последующего их использования.
54:48 Настройка отображения данных в QTableWidget.
57:50 Отображение данных из таблицы QTableWidget на графике matplotlib (точнее на осях).
1:02:15 Создание backend подбора коэффициента "m" в уравнение электропроводности.
1:05:45 Наносим на график matplotib функцию иллюстрирующую одну из связей для вывода уравнения электропроводности.
1:07:15 Проверка работы программы с реальными данными.
Ссылка на оформленный исходный код прилагается:
pyscientist.ucoz.net/load/arkh...
Ссылки на предыдущие видео ищите в комментариях к этому.
Подробнее c этими и дополнительными материалами можно ознакомится на Портале: PyScientist pyscientist.ucoz.net
Если у Вас есть какие либо вопросы по видео, либо по работе исходного кода, предложения по сотрудничеству буду рад с Вами взаимодействовать, пожалуйста обращайтесь на e-mail: sergei-dmitriev@mail.ru, либо пишите в комментарии к видео.
В видео использованы следующие аудиоматериалы:
Hardiardent "Happy World" / No Copyright Music / Electronic 2020

Пікірлер: 50
@alx2660
@alx2660 4 жыл бұрын
Урок просто бомба. Как раз искал информацию по matplotlib и PyQt5. Путного ничего не мог найти. Всё как-то отрывочно и невнятно, а тут всё прямо по полочкам. Идеально. Большое спасибо. Полезнейший канал.
@felixcriminibusnulluseritd7315
@felixcriminibusnulluseritd7315 2 жыл бұрын
Автор крутой материал
@nicko6815
@nicko6815 4 жыл бұрын
Здравствуйте, Сергей! Ценное видео! С возвращением!
@Muoler
@Muoler 4 жыл бұрын
Пожалуйста чувак, не пропадай
@user-nz9yn9ho8n
@user-nz9yn9ho8n 4 жыл бұрын
Спасибо большое, ваши видео во многом помогают мне с дипломом!
@PyScientist
@PyScientist 4 жыл бұрын
А какая тема Вашего диплома если не секрет?
@user-nz9yn9ho8n
@user-nz9yn9ho8n 4 жыл бұрын
@@PyScientist, Если вкратце - разработка приложения для мониторинга станков с системой ЧПУ на основе базы данных
@SHKIPPER989
@SHKIPPER989 4 жыл бұрын
Спасибо)
@PyScientist
@PyScientist 4 жыл бұрын
Тайминг: 0:58 Общий обзор видео. 1:37 Этапы разработки ПО на Python да и не только на Python. 5:06 Принципы SOLID. 11:42 Постановка задачи разработки ПО и проработка основной идеи. 14:11 Написание front-end с использованием QtDesigner. 20:46 Конвертация файла ui в py для дальнейшего включения в программу. 21:56 Инициализация основного окна приложения. 26:24 Корректировка front-end с использованием PyCharm. 36:27 Помещаем холст с рисунком (полем для отображения графика) matplotlib в QWidget. 46:55 Настраиваем импорт данных из файла txt в таблицу QTableWidget для последующего их использования. 54:48 Настройка отображения данных в QTableWidget. 57:50 Отображение данных из таблицы QTableWidget на графике matplotlib (точнее на осях). 1:02:15 Создание backend подбора коэффициента "m" в уравнение электропроводности. 1:05:45 Наносим на график matplotib функцию иллюстрирующую одну из связей для вывода уравнения электропроводности. 1:07:15 Проверка работы программы с реальными данными. Ссылка на оформленный исходный код прилагается: pyscientist.ucoz.net/load/arkhiv_proekta_pycharm_coreelectroanalysis_v1_0/1-1-0-10# Ссылки на предыдущие видео по теме: Ссылки на предыдущие видео по теме: Видео 1: Python настройка рабочего пространства, использование PyCharm kzbin.info/www/bejne/on-Yc2OsoLebrdk Видео 2: Python функции kzbin.info/www/bejne/q5OleWCCd62aors Видео 3: Python классы kzbin.info/www/bejne/rHvTaoilaLJ9g7s Видео 4: Графический интерфейс Qt для Python, или PyQt kzbin.info/www/bejne/mKXGYZWfbdJkaZY Видео 5: Python компиляция программ, cx_Freeze и другие компиляторы kzbin.info/www/bejne/e5zGaJ2ZppZmn8U Видео 6.1: Библиотека Matplotlib создание графиков для анализа данных kzbin.info/www/bejne/boeWqmmEeMmiZs0 Видео 6.2: Библиотека matplotlib и Qt встраивание графиков в графический интерфейс Qt kzbin.info/www/bejne/iX3ap6qkpsqnbLs Видео 7: Matplotlib модуль Animation класс FuncAnimation (автообновление графиков) kzbin.info/www/bejne/j4LQYol6hbuprdk Видео 8: Библиотека Matplotlib, отображение графиков функции с использованием библиотеки numexpr (ввод функции из текстовой строки) kzbin.info/www/bejne/iX3ap6qkpsqnbLs Видео 9.1: Классы QListWidget и QListView сопоставительный анализ, простой пример применения QListWidget kzbin.info/www/bejne/o6OllWWde82Jns0 Видео 9.2: Класс QListView пример применения с использованием QtCore.QabstractListModel kzbin.info/www/bejne/r3LYYmhrpp6Jqck Видео 10: Python и Excel взаимодействие с excel (библиотеки xlrd, xlwt, openpyxl, win32com) kzbin.info/www/bejne/pnqYZahjlLiljpI Видео 11: обзор виджета QTableWidget и практическое использование kzbin.info/www/bejne/noG6fqt_g7xjZpY Видео №12.1 обзор виджета QStackedWidget использование QComboBox и QPushButton в качестве переключателей kzbin.info/www/bejne/m3-cmpqYZbpgbsk Видео №12.2 Продолжение обзора виджета QStackedWidget использование QToolButton в качестве переключателей, настройка статического и динамического внешнего вида QToolButton c использованием qss. kzbin.info/www/bejne/fHWyepiibrtsbqc Видео 12.3 Python готовое приложение с графическим интерфейсом (GUI) Qt и графической библиотекой Matplotlib (Обзор проекта текущее состояние на июль 2018г). kzbin.info/www/bejne/h5Sqdoxvj6l-nqc Видео 13.1 Python и создание базы данных данных на движке СУБД sqlite3 с использованием стандартной библиотеки. kzbin.info/www/bejne/ip3GkICfa8eqhbM Видео 13.2 Python и sqlite3 внесение изменений в базу данных (СУБД SQLite), практический пример управления данными в базе kzbin.info/www/bejne/fl7QhHmheL5omtU Видео 13.3 Python и sqlite3 хранение изображений в базе данных с СУБД SQLite, практический пример. kzbin.info/www/bejne/i5OrppKjZp1lis0 Видео 13.4 Python и sqlite3 интеграция функционала базы данных в проект PyScientistNotes. (скоро появится) Видео 14 Python и Qt обзор переход с PyQt4 на PyQt5 и далее на PySide2 kzbin.info/www/bejne/jKPFnnqrgq2lY6s Видео 15 Python и Qt стандартные диалоговые окна tutorial kzbin.info/www/bejne/o3KwdqSQZb-laqM Видео 16 Python и PyQt "QDialog" - создание и настройка диалогового окна kzbin.info/www/bejne/o6WQmKSLYtZneJo Видео 1S Matplotlib настройка axes для простого графика kzbin.info/www/bejne/ZpWQgqCsaZt3pLM Видео 2S Python и интерполяция в numpy и scipy kzbin.info/www/bejne/lWm8ZZmeZceNbKM Видео 3S Python и буфер обмена windows (текстовые данные) kzbin.info/www/bejne/g5Pdm4WQebmgi9U Видео 17 Python и PyQt класс Qthread пример многопоточности kzbin.info/www/bejne/rJSzhX2OYtOAb5Y Видео 1.1.Р Python и ООП создание петрофизической модели часть 1 kzbin.info/www/bejne/h6PSdGSpdrarldE Видео 2Р Python PyQt5, Matplotlib и ООП архитектура приложения и создание приложения с GUI от начала и до конца
@katerynavynokurova3940
@katerynavynokurova3940 3 жыл бұрын
Большое спасибо за видео! Все четко и понятно объясняется, еще и с примерами, что особенно важно. А можно ли как-то сделать так, чтоб на графики можно было кликать как на Push button и вызывать определенную функцию или всплывающее окно?
@user-he5hm2sz3d
@user-he5hm2sz3d 4 жыл бұрын
Благодарю за помощь в освоении Python! Очень пригождается для учебы!!! И возможно ли как в Excel в левом столбце вручную внести данные аргумента (X), а справа вывести из формулы значения функции (Y), а потом на графике отобразить Y? Или же в таблицу добавляется только текстовый файл с уже готовыми данными? Спасибо за ответ!
@PyScientist
@PyScientist 4 жыл бұрын
Да, конечно же можно, бэкенд может быть вообще любой, сформулируйте задачу, что за функция попробуем решить! Можно даже так, что функция будет динамически меняться
@user-he5hm2sz3d
@user-he5hm2sz3d 4 жыл бұрын
@@PyScientist Построить график функции y(x) и таблицу значений y(x) с шагом измерения аргумента h. Таблицу значений функции и аргумента необходимо вывести на экран в графическом режиме y = x^3-2x^2+1 шаг 0.02 Спасибо
@PyScientist
@PyScientist 4 жыл бұрын
На сколько я понял Вам вам подойдёт решение из видео #8. Там по уравнению, заданному в текстовом виде, можно построить функцию с помощью библиотеки numexpr.
@_sergeevich5827
@_sergeevich5827 4 жыл бұрын
куда пропадал ? я уже на С# успел перейти за это время и запилить несколько норм прог. Сейчас пилю программу для работы, учёт КИП.
@PyScientist
@PyScientist 4 жыл бұрын
Да по работе все неполучалось, теперь вернулся, сам уже на с++ начал временами что-то пытаться своять под python расширения и кое что самостоятельное.
@matlubamahmudova2088
@matlubamahmudova2088 2 жыл бұрын
Здравствуйте! спасибо за очень полезные уроки! у меня один вопрос: как в этой программе в место простого txt файла можно загрузить las файл, с каротажными данными?
@PyScientist
@PyScientist 2 жыл бұрын
Такой возможности изначально не предусматривал. Вообще для парсинга las я как то программку писал. Попробую найти, выложу. Отпишусь тогда в этом комментарии
@matlubamahmudova2088
@matlubamahmudova2088 2 жыл бұрын
@@PyScientist Спасибо
@matlubamahmudova2088
@matlubamahmudova2088 2 жыл бұрын
@@PyScientist Я переделала код под лас. когда нажимаю кнопку для вывода таблицы выходит следующий код: Process finished with exit code -1073740791 (0xC0000409). посмотрела в интернете. Там сказаноб что этот код указывает переполнение какойто памяти. я незнаю как исправит эту ошибку
@PyScientist
@PyScientist 2 жыл бұрын
Это PyQt ругается. Эта ошибка возникает вследствии того, что интерфейс падает, что является следствием другой ошибки. Чтобы las читать нужно формат понимать. Сейчас же там формат фактически это текст с разделителем точка с запятой. Формат не тот файл читается неправильно падает функция чтения в таблицу и падает само приложение.
@matlubamahmudova2088
@matlubamahmudova2088 2 жыл бұрын
@@PyScientistвсе исправила, программа заработала. Спасибо большое. Очень полезные материалы у Вас
@user-js7js9kl7d
@user-js7js9kl7d 4 жыл бұрын
А какая у вас версия python? Просто я смотрел, что pyqt можно только на 2.7 установить
@PyScientist
@PyScientist 4 жыл бұрын
У меня 3.6. Информацию Вашу не подтверждаю. Можно ставить на любой python до 3.7, причем выбор рекомендую делать на python3.6 и pyqt5 или pyside2. Чтобы идти в ногу со временем. Почему так, а потому что 3.6 стабильнее, хотя 3.7 тоже, но не котрые библиотеки с ним не совместимы, а 3.8 вообще пока мало где есть. Не юзайте pytho 2.7. это контрпродуктивно.
@PyScientist
@PyScientist 4 жыл бұрын
И посмотрите мои видео 4, 14 там подробно рассказываю откуда чего брать!
@user-js7js9kl7d
@user-js7js9kl7d 4 жыл бұрын
​@@PyScientist , понял, спасибо!
@vitali1959
@vitali1959 4 жыл бұрын
все очень здорово! А как можно красиво отображать множество диаграмм в одном окне, приэтом каждую из диаграмм включать или выклучать? Это чясто нужно если идет записть данных, например отопление: темп1, темп2, темп3 ... time temp1 temp2 28.01.2020 09:35 11,10 13,60 28.01.2020 09:35 11,20 13,60 28.01.2020 09:35 11,30 13,60 28.01.2020 09:35 11,40 13,60 28.01.2020 09:36 11,50 13,60 28.01.2020 09:36 11,60 13,60 28.01.2020 09:36 11,70 13,60 28.01.2020 09:36 11,80 13,60 28.01.2020 09:36 11,90 13,60
@PyScientist
@PyScientist 4 жыл бұрын
Если нужно несколько диаграмм, то можно воспользоваться примером из видео 6.1 и 6.2, однако, их отключать не получится. Как вариант можно создать несколько экземпляров Mpl рисунка fig и обращаться к каждому по ссылке для их изменения. При необходимости убирать из размещения средствами qt, а также их возвращать. Вопрос хороший попробую реализовать на примере этой программы дополнив ее. Спасибо за интересный вопрос!
@vitali1959
@vitali1959 4 жыл бұрын
@@PyScientist у меня вот так получилос, все работает. (но я толь учусь) (self.chart = np.loadtxt('./file.csv', delimiter=',') def draw(self): self.graphicsView.clear() # for i in range(5): # show all charts abscissa = self.chart[:, 0] # self.gui.graphicsView.plot(abscissa, self.chart[:, i+1], pen=(i, 10)) if self.checkBox_1.isChecked(): ordinate_1 = self.chart[:, 1] self.graphicsView.plot(abscissa, ordinate_1, pen='b') if self.checkBox_2.isChecked(): ordinate_2 = self.chart[:, 2] self.graphicsView.plot(abscissa, ordinate_2, pen='g') if self.checkBox_3.isChecked(): ordinate_3 = self.chart[:, 3] self.graphicsView.plot(abscissa, ordinate_3, pen='m')
@lex5306
@lex5306 4 жыл бұрын
Классное видео. В видео в 21.37 происходит конвертация с расширением py. У меня не конвертируется, все вроде делаю как в видео. Может стыкались с подобным.
@PyScientist
@PyScientist 4 жыл бұрын
Какого рода ошибка или вообще не конвертирует, какая версия PyQt5
@lex5306
@lex5306 4 жыл бұрын
@@PyScientist QtDesigner 5.11.1 Ввёл все как в видео, а файл py не появляется.
@PyScientist
@PyScientist 4 жыл бұрын
Попробуйте в cmd тоже ввести какая ошибка будет
@PyScientist
@PyScientist 4 жыл бұрын
Коммандной строке винды
@lex5306
@lex5306 4 жыл бұрын
@@PyScientist В cmd пишет pyuic5 не является внутренней или внешней командой, исполняемый программой или ракетным файлом
@powercat8528
@powercat8528 4 жыл бұрын
Эх, жаль нет объяснения построчного в обобщающем файле...
@PyScientist
@PyScientist 4 жыл бұрын
Комментариев, Вы имеете ввиду? Или по коду ещё раз пройтись рассказать как что делается?
@user-rn2of7sh7h
@user-rn2of7sh7h 4 жыл бұрын
плохо видно
@PyScientist
@PyScientist 4 жыл бұрын
А Вы на каком разрешении смотрите? Там до 1080 поддержка, возможно некоторые места смонтировал неудачно?
Gym belt !! 😂😂  @kauermotta
00:10
Tibo InShape
Рет қаралды 18 МЛН
No empty
00:35
Mamasoboliha
Рет қаралды 11 МЛН
Викторина от МАМЫ 🆘 | WICSUR #shorts
00:58
Бискас
Рет қаралды 5 МЛН
Программисты-самоучки... Слушайте внимательно.
22:45
Евгений Афанасьев
Рет қаралды 24 М.
Gym belt !! 😂😂  @kauermotta
00:10
Tibo InShape
Рет қаралды 18 МЛН