{"id":320265,"date":"2021-03-25T15:03:40","date_gmt":"2021-03-25T15:03:40","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=320265"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=320265","title":{"rendered":"\u0420\u0438\u0441\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u044b \u0432 PyQT"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p><strong>\u0413\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u2013 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0441\u0432\u044f\u0437\u0435\u0439 \u0432 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c PyQT \u0438 networkx \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u044f\u0437\u0435\u0439.<\/strong><\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u044f \u0440\u0435\u0448\u0430\u043b \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, \u0438\u0441\u043a\u0430\u043b \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0431\u044b\u043b\u043e: \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438. <\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0439: \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u044f \u0431\u0440\u0430\u043b *.csv \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u0432\u043e\u0434\u0438\u043b \u0432 pandas, \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u043a \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0432\u044b\u0432\u043e\u0434\u0438\u043b \u0441\u0432\u044f\u0437\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u044d\u0442\u043e \u0432\u0441\u0435 \u0432 networkx \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0433\u0440\u0430\u0444, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c.<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043d\u0430 \u044d\u0442\u043e \u0432\u0441\u0435, \u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0434\u043b\u044f \u043d\u0430\u0441, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u0441\u0430\u043c\u0438 \u0442\u0430\u043c \u043a\u0440\u0443\u0442\u0438\u043b\u0438 \u0432\u0441\u0435 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043c\u043e\u0439 \u043e\u0442\u0432\u0435\u0442 \u0431\u044b\u043b \u2013 \u0430 \u043c\u043e\u0436\u0435\u0442 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 open-source? \u0412\u043e\u0437\u044c\u043c\u0438\u0442\u0435 Gephi, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u041f\u0440\u043e\u0448\u043b\u0430 \u043d\u0435\u0434\u0435\u043b\u044f, \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u2013 \u0432\u043e\u0442 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043b\u043e\u0436\u043d\u043e. \u042f \u0447\u0435\u0441\u0442\u043d\u043e \u043e\u0442\u0431\u0438\u0432\u0430\u043b\u0441\u044f, \u043d\u043e \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043d\u0435 \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u043b. <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443: \u041d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u043e\u0432, \u043d\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0430 \u043d\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u043e\u0441\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0431\u0435\u0437 \u0431\u0443\u0431\u043d\u043e\u0432. \u042f\u0437\u044b\u043a \u2013 Python. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043f\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439, \u0430 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u0437\u044f\u043b PYQT.<\/p>\n<p>\u0421\u0430\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u043d\u0430 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043a\u0438\u0434\u0430\u043b \u043c\u0430\u043a\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (\u043c\u0430\u043a\u0435\u0442\u044b \u0432 Paint \u043d\u0430\u0448\u0435 \u0432\u0441\u0435), \u0430 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0433\u0440\u0430\u0444\u0430. <\/p>\n<p><strong>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/strong><\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0443\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043a\u043d\u0435 PYQT. \u0412\u043e\u043e\u0431\u0449\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 PyQT \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 GUI, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0445\u043e\u0447\u0435\u0448\u044c, \u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u0430\u0441\u0442 \u0442\u0435\u0431\u0435 \u043a\u043e\u0434. \u041c\u043d\u0435 \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043d\u0443\u043b\u044f. <s>\u0418 \u044f \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u043a\u0430\u043a \u0442\u0443\u0434\u0430 \u0437\u0430\u0441\u0443\u043d\u0443\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0433\u0440\u0430\u0444.<\/s><\/p>\n<p>\u0421\u0430\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (\u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GraphWindow), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 QtWidgets.QMainWindow \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0432 \u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435.<\/p>\n<p>\u0416\u0435\u043b\u0430\u0435\u043c\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4d0\/46d\/31d\/4d046d31d55b4a135fa72e9d7c5a7eaf.png\" width=\"878\" height=\"553\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u043e\u0432. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 PYQT \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043a\u0430\u043a \u0432\u0435\u0440\u0441\u0442\u043a\u0430, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0445\u043e\u0436\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u043a\u0430\u043a \u0432 HTML<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b main.py, \u0441\u0442\u0430\u0432\u0438\u043c \u0432\u0441\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0438\u0448\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u044b<\/p>\n<pre><code class=\"python\">from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QListWidget, QMessageBox, QColorDialog from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtGui import QPixmap  import sys import pandas as pd import networkx as nx import matplotlib.pyplot as plt  from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas<\/code><\/pre>\n<p>\u043f\u0438\u0448\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438 \u0432\u043f\u0438\u0448\u0435\u043c \u0432 \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u043a\u043d\u0430:<\/p>\n<pre><code class=\"python\">class GraphWindow(QtWidgets.QMainWindow): - \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043a\u043b\u0430\u0441\u0441 \u043e\u0442 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430      def __init__(self):         super().__init__() \u2013 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430         self.resize(1280, 1080) \u2013 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043e\u043a\u043d\u0430         self.move(250, 0) \u2013 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432 \u0446\u0435\u043d\u0442\u0440         self.title = 'Graph' \u2013 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430 \t# \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \tself._main = QtWidgets.QWidget(self)<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0438\u0437 \u0447\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043e\u043a\u043d\u043e. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043e\u0431\u0435\u0440\u0442\u043a\u0438, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435 \u043e\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 QtWidgets QVBoxLayout \u0438 QHBoxLayout \u2013 V(vertical) \u0438 H(horizontal) \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043d\u0430\u043c \u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u0435\u0440\u0442\u043a\u0438. <\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u0431\u043b\u043e\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043c\u0430\u043a\u0435\u0442\u0435: <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432<\/p>\n<pre><code># \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 self.horizontal_container = QtWidgets.QHBoxLayout(self._main)  # \u0414\u0435\u043b\u0438\u043c \u043e\u043a\u043d\u043e \u043d\u0430 \u0434\u0432\u0430 - \u043b\u0435\u0432\u0430\u044f \u0438 \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c self.vertical_container_left = QtWidgets.QVBoxLayout(self) self.vertical_container_right = QtWidgets.QVBoxLayout(self) self.horizontal_container.addLayout(self.vertical_container_left) self.horizontal_container.addLayout(self.vertical_container_right)<\/code><\/pre>\n<p>&nbsp;\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043f\u043e\u043b\u0435\u0439 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<pre><code># \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u0435\u0439 \u0438\u0437 \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u0430 self.horizontal_container_lists = QtWidgets.QHBoxLayout(self)<\/code><\/pre>\n<p>&nbsp;\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043f\u043e\u043b\u0435\u0439 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 3 \u043e\u0431\u0435\u0440\u0442\u043e\u043a (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0443\u0437\u043b\u044b, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0443\u0437\u043b\u044b, \u0438 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438). \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043b\u0435\u0439\u0431\u043b\u044b (\u043f\u043e\u0434\u043f\u0438\u0441\u0438) \u0434\u043b\u044f \u043d\u0438\u0445, \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u041f\u043e\u043b\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0435\u043c \u0432 QlistWidget.<\/p>\n<pre><code># \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f 1 \u0443\u0437\u043b\u0430 self.vertical_container_nodes_first = QtWidgets.QVBoxLayout(self) # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u043b\u0438\u0441\u0442\u0430 \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 1 self.nodes_list_first_label = QtWidgets.QLabel(self) self.nodes_list_first_label.setFixedSize(100, 40) # \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0443\u0437\u043b\u0430 1 self.nodes_list_first_widget = QtWidgets.QListWidget(self) self.nodes_list_first_widget.setFixedSize(100, 150) self.vertical_container_nodes_first.addWidget(self.nodes_list_first_label) self.vertical_container_nodes_first.addWidget(self.nodes_list_first_widget)  # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f 2 \u0443\u0437\u043b\u0430 self.vertical_container_nodes_second = QtWidgets.QVBoxLayout(self) # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u043b\u0438\u0441\u0442\u0430 \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 2 self.nodes_list_second_label = QtWidgets.QLabel(self) self.nodes_list_second_label.setFixedSize(100, 40) # \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 2 self.nodes_list_second_widget = QListWidget(self) self.nodes_list_second_widget.setFixedSize(100, 150)  self.vertical_container_nodes_second.addWidget(self.nodes_list_second_label) self.vertical_container_nodes_second.addWidget(self.nodes_list_second_widget)  # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0440\u0435\u0431\u0435\u0440 self.vertical_container_edges_in = QtWidgets.QVBoxLayout(self) # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u043b\u0438\u0441\u0442\u0430 \u0441 \u0440\u0435\u0431\u0440\u0430\u043c\u0438 self.edges_in_list_label = QtWidgets.QLabel(self) self.edges_in_list_label.setFixedSize(100, 35)  # \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0441 \u0440\u0435\u0431\u0440\u0430\u043c\u0438 self.edges_in_list_widget = QListWidget(self) self.edges_in_list_widget.setFixedSize(100, 150)  self.vertical_container_edges_in.addWidget(self.edges_in_list_label) self.vertical_container_edges_in.addWidget(self.edges_in_list_widget)<\/code><\/pre>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0430 \u043f\u0440\u043e\u0441\u044c\u0431\u0430, \u0430 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0443\u0437\u043b\u044b \u043a\u0430\u043a-\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u0435\u0447\u0430\u0442\u044c, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0435\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0439, \u0441\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043c \u0441\u043f\u0435\u0446\u043f\u0440\u0438\u0437\u043d\u0430\u043a. \u041d\u0435 \u0432\u043e\u043f\u0440\u043e\u0441, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u0438\u0441\u043e\u043a<\/p>\n<pre><code># \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u043f\u0435\u0446 \u043f\u0440\u0438\u0437\u043d\u0430\u043a self.vertical_container_special_features = QtWidgets.QVBoxLayout(self) # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u043b\u0438\u0441\u0442\u0430 \u0441\u043e \u0441\u0446\u0435\u0446 \u043f\u0440\u0430\u0437\u043d\u0430\u043a\u0430\u043c\u0438 self.special_features_list_label = QtWidgets.QLabel(self) self.special_features_list_label.setFixedSize(100, 35)  # \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0441 \u0440\u0435\u0431\u0440\u0430\u043c\u0438 self.special_features_list_widget = QListWidget(self) self.special_features_list_widget.setFixedSize(100, 150)  self.vertical_container_special_features.addWidget(self.special_features_list_label) self.vertical_container_special_features.addWidget(self.special_features_list_widget)<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u0432\u0432\u0435\u043b\u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u0435\u0439, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0438\u0445 \u0432 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0435\u0440\u0442\u043a\u0443:<\/p>\n<pre><code># \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 self.horizontal_container_lists.addLayout(self.vertical_container_nodes_first) self.horizontal_container_lists.addLayout(self.vertical_container_nodes_second) self.horizontal_container_lists.addLayout(self.vertical_container_edges_in) self.horizontal_container_lists.addLayout(self.vertical_container_special_features)<\/code><\/pre>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u2013 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e PyQT \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f Color Picker, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u043d\u0430\u0432\u0435\u0440\u0445 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0430\u043a\u0435\u0442\u0430.<\/p>\n<pre><code>self.horizontal_container_df_options = QtWidgets.QHBoxLayout(self)  # \u0412\u044b\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0443\u0437\u043b\u0430 1 self.horizontal_container_color_nodes_first = QtWidgets.QHBoxLayout(self) self.color_picker_nodes_first_label = QtWidgets.QLabel(self) self.color_picker_nodes_first_label.setFixedSize(65, 35) self.color_picker_nodes_first = QtWidgets.QPushButton(self.nodes_first_color, self) self.color_picker_nodes_first.setFixedSize(100, 30)  self.horizontal_container_color_nodes_first.addWidget(self.color_picker_nodes_first_label) self.horizontal_container_color_nodes_first.addWidget(self.color_picker_nodes_first)  # \u0412\u044b\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0443\u0437\u043b\u0430 2 self.horizontal_container_color_nodes_second = QtWidgets.QHBoxLayout(self) self.color_picker_nodes_second_label = QtWidgets.QLabel(self) self.color_picker_nodes_second_label.setFixedSize(65, 35) self.color_picker_nodes_second = QtWidgets.QPushButton(self.nodes_second_color, self) self.color_picker_nodes_second.setFixedSize(100, 30)  self.horizontal_container_color_nodes_second.addWidget(self.color_picker_nodes_second_label) self.horizontal_container_color_nodes_second.addWidget(self.color_picker_nodes_second)  self.horizontal_container_df_options.addLayout(self.horizontal_container_separator) self.horizontal_container_df_options.addLayout(self.horizontal_container_color_nodes_first)  # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0435\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430 self.vertical_container_left.addLayout(self.horizontal_container_df_options)<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<pre><code># \u041a\u043d\u043e\u043f\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 self.pushButton = QtWidgets.QPushButton(self) self.pushButton.setObjectName(\"pushButton\") # self.pushButton.setFixedSize(150, 50) self.pushButton.move(150, 10) self.vertical_container_left.addWidget(self.pushButton)<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u0430\u043c \u0435\u0449\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444 \u043f\u043e \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<pre><code># \u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0430 self.pushButton_3 = QtWidgets.QPushButton(self) self.pushButton_3.setObjectName(\"pushButton_3\")  self.vertical_container_left.addLayout(self.horizontal_container_lists) self.vertical_container_left.addWidget(self.pushButton_3)<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u043d\u0438\u0445. \u041f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0441\u0435\u043c \u0438\u0445 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u044f\u0434.<\/p>\n<pre><code># \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0437\u043b\u0430 self.horizontal_container_lists_second = QtWidgets.QHBoxLayout(self)  # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0437\u043b\u0430 \u0434\u043b\u044f \u043e\u0442\u0441\u043c\u043e\u0442\u0440\u0430 self.vertical_container_get_node = QtWidgets.QVBoxLayout(self) # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0442\u0438\u043f\u0430 \u0443\u0437\u043b\u043e\u0432 self.vertical_container_edge_type = QtWidgets.QVBoxLayout(self) # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0441\u0443\u043c\u043c\u044b self.vertical_container_sum_input = QtWidgets.QVBoxLayout(self) # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 self.vertical_container_edges_found = QtWidgets.QVBoxLayout(self)  # \u0422\u0440\u0435\u0442\u0438\u0439 \u0440\u044f\u0434 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 self.horizontal_container_lists_second.addLayout(self.vertical_container_get_node) self.horizontal_container_lists_second.addLayout(self.vertical_container_edge_type) self.horizontal_container_lists_second.addLayout(self.vertical_container_sum_input) self.horizontal_container_lists_second.addLayout(self.vertical_container_edges_found)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0434 \u0441\u0430\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u043e\u0440 \u0443\u0437\u043b\u0430, \u043d\u043e \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043f\u043e \u0441\u0443\u043c\u043c\u0430\u043c \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0438 \u0442\u0438\u043f\u0443.<\/p>\n<pre><code># \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0437\u043b\u0430 self.get_node_list_widget = QListWidget(self) self.get_node_list_widget.setFixedSize(150, 150) # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u043b\u0438\u0441\u0442\u0430 \u0441 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c\u0438 self.get_node_list_label = QtWidgets.QLabel(self) self.get_node_list_label.setFixedSize(190, 50) self.vertical_container_get_node.addWidget(self.get_node_list_label) self.vertical_container_get_node.addWidget(self.get_node_list_widget)  # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0442\u0438\u043f\u0430 \u0440\u0435\u0431\u0440\u0430 self.edge_type_label = QtWidgets.QLabel(self) self.edge_type_label.setFixedSize(150, 50) # \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0442\u0438\u043f\u0430 \u0440\u0435\u0431\u0440\u0430 self.edge_type_list = QtWidgets.QListWidget(self) self.edge_type_list.setFixedSize(150, 150) self.vertical_container_edge_type.addWidget(self.edge_type_label) self.vertical_container_edge_type.addWidget(self.edge_type_list)  # \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0443\u0437\u043b\u043e\u0432 self.sum_limit_value_label = QtWidgets.QLabel(self) self.sum_limit_value_label.setFixedSize(100, 50) self.sum_limit_value = QtWidgets.QLineEdit(self) self.sum_limit_value.setFixedSize(100, 20) self.sum_limit_value.setText(\"0\") sum_validator = QtGui.QIntValidator() sum_validator.setRange(0, 1000000) self.sum_limit_value.setValidator(sum_validator) self.vertical_container_sum_input.addWidget(self.sum_limit_value_label) self.vertical_container_sum_input.addWidget(self.sum_limit_value)  # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 self.uniq_edges_found_label = QtWidgets.QLabel(self) self.uniq_edges_found_label.setFixedSize(100, 50) self.uniq_edges_found_text = QtWidgets.QLineEdit(self) self.uniq_edges_found_text.setFixedSize(100, 20) self.uniq_edges_found_text.setReadOnly(True) self.vertical_container_sum_input.addWidget(self.uniq_edges_found_label) self.vertical_container_sum_input.addWidget(self.uniq_edges_found_text)  # self.vertical_container_sum_input.addStretch()  # \u0424\u0438\u043b\u044c\u0442\u0440 \u0441\u0443\u043c\u043c\u044b \u0441\u0432\u044f\u0437\u0435\u0439 self.edges_sum_filter_label = QtWidgets.QLabel(self) self.edges_sum_filter_label.setFixedSize(100, 50) self.edges_sum_filter_text = QtWidgets.QLineEdit(self) self.edges_sum_filter_text.setFixedSize(100, 20) self.edges_sum_filter_text.setText(\"0\") sum_validator = QtGui.QIntValidator() sum_validator.setRange(0, 1000000) self.sum_limit_value.setValidator(sum_validator)  self.vertical_container_edges_found.addWidget(self.edges_sum_filter_label) self.vertical_container_edges_found.addWidget(self.edges_sum_filter_text)  # \u0421\u0443\u043c\u043c\u0430 \u0441\u0432\u044f\u0437\u0435\u0439 self.edges_sum_label = QtWidgets.QLabel(self) self.edges_sum_label.setFixedSize(100, 50) self.edges_sum_text = QtWidgets.QLineEdit(self) self.edges_sum_text.setFixedSize(100, 20) self.edges_sum_text.setReadOnly(True) self.vertical_container_edges_found.addWidget(self.edges_sum_label) self.vertical_container_edges_found.addWidget(self.edges_sum_text) # self.vertical_container_edges_found.addStretch() <\/code><\/pre>\n<p>\u0418 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0437\u0430\u043d\u043e\u0441\u0438\u043c \u0432\u0441\u0435 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440<\/p>\n<pre><code># \u0414\u041e\u0411\u0410\u0412\u041b\u042f\u0415\u041c \u0412\u0421\u0415 \u0412 \u041a\u041e\u041d\u0422\u0415\u0419\u041d\u0415\u0420 self.vertical_container_left.addLayout(self.horizontal_container_lists_second)<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0432\u044b\u0431\u043e\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0443\u0437\u043b\u043e\u0432, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0433\u0440\u0430\u0444\u0430 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u0443\u0437\u043b\u043e\u0432.<\/p>\n<pre><code># \u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0430 \u043f\u043e \u0443\u0437\u043b\u0443 self.pushButton_2 = QtWidgets.QPushButton(self) self.pushButton_2.setObjectName(\"pushButton_2\")  self.vertical_container_left.addWidget(self.pushButton_2) self.vertical_container_left.addStretch()<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 \u0441 \u0432\u0441\u0435\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438<\/p>\n<pre><code># \u0418\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 self._main.setFocus() self.setCentralWidget(self._main)<\/code><\/pre>\n<p>\u0418 \u0437\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435, \u044f \u043a\u043e\u0435-\u0447\u0442\u043e \u0437\u0430\u0431\u044b\u043b. \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c networkx. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/34d\/3f3\/81d\/34d3f381ded61c227e2055328a7a05af.png\" width=\"578\" height=\"87\"><figcaption><\/figcaption><\/figure>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0432\u044b\u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 matplotlib. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u0430\u0442\u044c PyQT \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c, \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0437 \u0431\u044d\u043a\u044d\u043d\u0434\u0430 matplot \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 canvas<\/p>\n<pre><code>from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas<\/code><\/pre>\n<p>\u0418 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0442\u043e \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u043d \u0433\u0440\u0430\u0444) <\/p>\n<pre><code># \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u043b\u043e\u043a \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0433\u0440\u0430\u0444\u0430 self.fig = plt.figure(figsize=(5, 4)) self.canvas = FigureCanvas(self.fig) self.canvas.draw() self.vertical_container_right.addWidget(self.canvas)<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043b\u0435\u0439\u0431\u043b\u044b \u0438 \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438.<\/p>\n<p><code>self.retranslateUi()<\/code><\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0430\u043c \u043c\u0435\u0442\u043e\u0434.<\/p>\n<pre><code>def retranslateUi(self):     \"\"\"     \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0438     Function sets texts and clicks on lists and buttons     :return:     \"\"\"     _translate = QtCore.QCoreApplication.translate     self.nodes_list_first_label.setText(_translate(\"MainWindow\", \"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435,\\n\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \\n \u0443\u0437\u043b\u044b(1)\"))     self.nodes_list_second_label.setText(         _translate(\"MainWindow\", \"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435,\\n\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \\n \u0443\u0437\u043b\u044b(2)\"))     self.edges_in_list_label.setText(         _translate(\"MainWindow\", \"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435, \\n \u0434\u043b\u044f \u0440\u0435\u0431\u0440\u0430\"))     self.special_features_list_label.setText(_translate(\"MainWindow\", \"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \\n \u0441 \u0441\u043f\u0435\u0446 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438 \\n (\"                                                                       \"\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)\"))      self.separator_label.setText(_translate(\"MainWindow\", \"\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0442\u0435\u043a\u0441\u0442\u0430 \\n (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e ,)\"))      self.pushButton.setText(_translate(\"MainWindow\", \"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \\n \u0444\u0430\u0439\u043b\"))     self.pushButton_2.setText(_translate(\"MainWindow\", \"\u041f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \\n \u0433\u0440\u0430\u0444 \u043f\u043e \u0443\u0437\u043b\u0443\"))     self.pushButton_3.setText(_translate(\"MainWindows\", \"\u041f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u0433\u0440\u0430\u0444\"))     self.get_node_list_label.setText(         _translate(\"MainWindow\",                    \"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0437\u0435\u043b, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \\n \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444 \"                    \"\\n (\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \\n \u043f\u043e\u043b\u044f \u0441 \u0443\u0437\u043b\u0430\u043c\u0438)\"))     self.edge_type_label.setText(         _translate(\"MainWindow\",                    \"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \\n \u0441\u0432\u044f\u0437\u0438\"))     self.uniq_edges_found_label.setText(         _translate(\"MainWindow\", \"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \\n \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \\n \u0441\u0432\u044f\u0437\u0435\u0439\"))     self.sum_limit_value_label.setText(         _translate(\"MainWindow\", \"\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \\n \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u0432\u044f\u0437\u0435\u0439\"))     self.edges_sum_label.setText(         _translate(\"MainWindow\", \"C\u0443\u043c\u043c\u0430 \u043f\u043e \u0441\u0432\u044f\u0437\u044f\u043c\"))      self.edges_sum_filter_label.setText(         _translate(\"MainWindow\", \"\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0441\u0443\u043c\u043c\u0435 \\n \u0441\u0432\u044f\u0437\u0435\u0439\")     )      self.edge_type_list.addItems(['\u0412\u0441\u0435', '\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435', '\u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0435'])     self.color_picker_nodes_first_label.setText(_translate(\"MainWindow\", \"\u0426\u0432\u0435\u0442 \u0443\u0437\u043b\u0430 1\"))     self.color_picker_nodes_second_label.setText(_translate(\"MainWindow\", \"\u0426\u0432\u0435\u0442 \u0443\u0437\u043b\u0430 2\"))     self.pushButton.clicked.connect(self.pushButton_handler)          self.pushButton_2.clicked.connect(self.draw_single_graph)     self.pushButton_3.clicked.connect(self.draw_summary_graph)     self.pushButton_2.setEnabled(False)     self.pushButton_3.setEnabled(False)     self.color_picker_nodes_first.clicked.connect(self.open_color_dialog_first)     self.color_picker_nodes_second.clicked.connect(self.open_color_dialog_second)     self.nodes_list_first_widget.itemClicked.connect(self.get_uniq_first_node)     self.nodes_list_second_widget.itemClicked.connect(self.get_second_node_column)     self.edges_in_list_widget.itemClicked.connect(self.get_edge_in_column)     self.special_features_list_widget.itemClicked.connect(self.get_special_node_column)     self.get_node_list_widget.itemClicked.connect(self.get_special_node)     self.edge_type_list.itemClicked.connect(self.set_edge_type)     self.setWindowTitle(_translate(\"Graph-program\", \"Graph-program\"))<\/code><\/pre>\n<p>\u0412 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438\/\u043b\u0438\u0441\u0442\u044b\/\u0444\u0438\u043b\u044c\u0442\u0440\u044b. \u041a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0438\u0436\u0435. <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432\u044b\u0448\u043b\u043e. <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f. <\/p>\n<pre><code>if __name__ == '__main__':     app = QtWidgets.QApplication(sys.argv)     window = GraphWindow()     window.show()     app.exec_()<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d3\/1ed\/e66\/2d31ede6651a941e3d857b19ec9ebb61.png\" width=\"1272\" height=\"613\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u043e\u0432\u0435\u043c \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c. \u0412 \u0446\u0435\u043b\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p>\n<p>\u0421\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438:<\/p>\n<p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430<\/p>\n<p>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u0412\u044b\u0431\u043e\u0440 \u0443\u0437\u043b\u043e\u0432<\/p>\n<p>3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u0412\u044b\u0431\u043e\u0440 \u0440\u0435\u0431\u0435\u0440<\/p>\n<p>4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u0420\u0430\u0441\u0447\u0435\u0442 \u0443\u0437\u043b\u043e\u0432<\/p>\n<p>5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u0420\u0430\u0441\u0447\u0435\u0442 \u0440\u0435\u0431\u0435\u0440 \u0438 \u0438\u0445 \u0432\u0435\u0441\u043e\u0432<\/p>\n<p>6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0433\u0440\u0430\u0444\u0430<\/p>\n<p>7)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u0424\u0438\u043b\u044c\u0442\u0440\u044b<\/p>\n<p>&nbsp;<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443:<\/p>\n<p>1) \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 pandas \u2013 \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0432\u044f\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c. \u041d\u0430 \u0432\u0445\u043e\u0434 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0444\u0430\u0439\u043b \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 pandas dataframe. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u043c\u0443, \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0433\u043e. \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e \u0432 \u043c\u0435\u0442\u043e\u0434 init pyqt \u0432\u0432\u0435\u0434\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 self.pandas_df<\/p>\n<pre><code>class DataFile:     def __init__(self,                  pandas_df: (pd.DataFrame, str),                  nrows=None,                  encoding=None,                  sep=','                  ):          self.pandas_df = pandas_df          if self.pandas_df is not None:             if type(pandas_df) == str:                 if pandas_df.split('.')[-1] == 'csv':                     self.pandas_df = pd.read_csv(pandas_df, sep=sep, encoding=encoding, nrows=nrows)                 elif pandas_df.split('.')[-1] in ['xlsx', 'xls']:                     self.pandas_df = pd.read_excel(pandas_df, nrows=nrows)                 elif pandas_df.split('.')[-1] == 'txt':                     self.pandas_df = pd.read_table(pandas_df, sep=sep, encoding=encoding, nrows=nrows)                 else:                     msg = QMessageBox()                     msg.setText(f'Only \"csv\", \"xls(x)\" and \"txt\" file formats are supported, '                                 f'but given file path ends with \"{pandas_df.split(\".\")[-1]}\"')                     msg.exec_()                      raise TypeError(f'Only \"csv\", \"xls(x)\" and \"txt\" file formats are supported, '                                     f'but given file path ends with \"{pandas_df.split(\".\")[-1]}\"')         else:             msg = QMessageBox()             msg.setText(f'pd.DataFrame or str types are expected, but got: {type(pandas_df)}')             msg.exec_()             raise TypeError(f'pd.DataFrame or str types are expected, but got: {type(pandas_df)}')<\/code><\/pre>\n<p>2) \u0414\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0442\u043e\u043b\u0431\u043e\u0432 \u0438\u0437 \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u0430, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434. \u041c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u0446\u0438\u0438 \u043e\u043a\u043d\u0430. \u0414\u0435\u043b\u0430\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e\u0435 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435. \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 get_uniq_first_node \u043c\u044b \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0431\u043e\u0440 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0443\u0437\u0435\u043b \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0435. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<pre><code>def get_uniq_first_node(self, item):     \"\"\"     \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0440\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a     Function gets uniq values from column name with nodes and writes it to new list (QLISTWIDGET)     :param item: column name from qlistwidget     :return:     \"\"\"     self.get_node_list_widget.clear()     try:         self.get_node_list_widget.addItems(self.df[item.text()].unique().tolist())         self.nodes_list_first_column = item.text()     except TypeError as ex:         # \u0415\u0441\u043b\u0438 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0434\u0435\u0440\u044c\u043c\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0431\u0440\u043e\u0441\u0430\u0435\u043c exception         msg = QMessageBox()         msg.setText(\"\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 \u0447\u0438\u0441\u043b\u043e. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446\")         msg.exec_() def get_second_node_column(self, item):     \"\"\"     Set second node column from df     :param item: chosen item from qlistwidget     :return:     \"\"\"      self.nodes_list_second_column = item.text()<\/code><\/pre>\n<p>3)&nbsp;\u041c\u0435\u0442\u043e\u0434 \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u0440\u0435\u0431\u0440\u043e\u043c(\u0441\u0432\u044f\u0437\u044c\u044e) \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0437\u043b\u0430.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u0434\u0435\u043d\u0435\u0436\u043d\u043e\u043c\u0443 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0443, \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u0446\u0435\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u0438, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u2013 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.<\/p>\n<pre><code>def get_edge_in_column(self, item):     \"\"\"     Set edge column from df     :param item: chosen item from qlistwidget     :return:     \"\"\"      self.edges_in_list_column = item.text()     try:         self.df[self.edges_in_list_column] = self.df[self.edges_in_list_column].astype(int)     except Exception as ex:         # \u0415\u0441\u043b\u0438 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u043d\u0435\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0431\u0440\u043e\u0441\u0430\u0435\u043c exception         msg = QMessageBox()         msg.setText(\"\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432\" + str(ex))         msg.exec_()     self.pushButton_3.setEnabled(True) <\/code><\/pre>\n<p>4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u0414\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u043f\u0435\u0446\u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043c\u0435\u0442\u043e\u0434<\/p>\n<pre><code>def get_special_node_column(self, item):     \"\"\"     Get special node to visualize     :param item: clicked item from qlistwidget     :return:     \"\"\"     self.special_list_column = item.text()<\/code><\/pre>\n<p>5) \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0430\u0441\u0447\u0435\u0442\u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0443 \u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0435\u0439. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430:<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043f\u0443\u0441\u0442\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c. <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0444\u0438\u043b\u044c\u0442\u0440 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u043d\u0430 \u0442\u0438\u043f \u0441\u0432\u044f\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e (\u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f, \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f, \u0432\u0441\u0435). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0441\u0432\u044f\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u044c x -&gt; y \u0438 y -&gt; x, \u0443\u0431\u0438\u0440\u0430\u044f \u0432\u0441\u0435 \u0445 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0432\u044f\u0437\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u044b pandas \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/p>\n<pre><code>def prepare_graph_df(self, data_frame, is_edge_filtered):     \"\"\"     # \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0441\u0442\u043e\u0431\u0446\u0430\u043c\u0438 \u0438 \u0434\u0444, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0431\u0440\u0430 \u0438 \u0441\u0432\u044f\u0437\u0438 \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u0435     \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 filtered nodes \u0438\u0434\u0435\u0442 \u0438\u0437 \u0443\u0437\u043b\u043e\u0432, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u0432\u044f\u0437\u0435\u0439, \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u0434\u0444\u0430 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c.     \"\"\"     try:         graph_df_full = data_frame.loc[             (data_frame[self.nodes_list_first_column].notnull()) &amp;             (data_frame[self.nodes_list_second_column].notnull())]          # \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0432\u044f\u0437\u0438:         if is_edge_filtered:             if self.edge_type == '\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435':                 # \u0423\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u0432\u0442\u043e\u0440\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u043f\u0435\u0440\u0432\u044b\u0435 - \u0437\u043d\u0430\u0447\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0432\u044f\u0437\u0438                 graph_df_full = graph_df_full.loc[                     graph_df_full[self.nodes_list_first_column] == self.nodes_first_clicked                     ]             elif self.edge_type == '\u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0435':                 graph_df_full = graph_df_full.loc[                     graph_df_full[self.nodes_list_second_column] == self.nodes_first_clicked                     ]         return graph_df_full     except Exception as ex:         # \u0415\u0441\u043b\u0438 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0434\u0435\u0440\u044c\u043c\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0431\u0440\u043e\u0441\u0430\u0435\u043c exception         msg = QMessageBox()         msg.setText(\"\u0412\u044b \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \" + str(ex))         msg.exec_()<\/code><\/pre>\n<p>6) \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043e\u0447\u0438\u0441\u0442\u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043b\u0438 \u0438\u0445 \u043f\u043e \u0442\u0438\u043f\u0443 \u2013 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u044b. <\/p>\n<p>&nbsp; \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432 \u0438 \u0438\u0445 \u0446\u0432\u0435\u0442\u043e\u0432. Networkx \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0445 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u2013 \u043e\u0434\u0438\u043d \u0441 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043e \u0432\u0442\u043e\u0440\u044b\u043c\u0438 \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0438\u043c \u0432 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u00abCOLOR\u00bb \u0446\u0432\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0431\u0440\u0430\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0447\u0435\u0440\u0435\u0437 colorpicker.<\/p>\n<pre><code>def open_color_dialog_first(self):     \"\"\"     Function shows open-color dialog and sets value for first nodes     :return:     \"\"\"     color = QColorDialog.getColor()     self.nodes_first_color = color.name()     self.color_picker_nodes_first.setText(self.nodes_first_color)<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043b\u0438 \u0446\u0432\u0435\u0442\u0430, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u044b, \u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0441\u044f \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0433\u0440\u0430\u0444\u0430, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0435\u0449\u0435 \u0440\u0430\u0437 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0443\u0437\u043b\u044b \u043f\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0438\u0437 \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u0438 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u0432\u044f\u0437\u0435\u0439. \u0421\u0430\u043c \u0440\u0430\u0441\u0447\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.&nbsp;<\/p>\n<pre><code>def get_all_nodes(self, graph_df_full, filtered_nodes):     \"\"\"     Method takes 3 df with nodes and returns arrays with values and colors for it     :param filtered_nodes: If any nodes are filtered due to edges count we get array of nodes     :param graph_df_full: graph, that has both in and out operations     :return: Array     \"\"\"     nodes_array = []     nodes_color = []     first_nodes_df = pd.DataFrame(columns=['NODES', 'COLOR'])     second_nodes_df = pd.DataFrame(columns=['NODES', 'COLOR'])     first_nodes_df['NODES'] = graph_df_full[self.nodes_list_first_column]     first_nodes_df = first_nodes_df.assign(COLOR=self.nodes_first_color)     first_nodes_df = first_nodes_df.drop_duplicates(subset=['NODES'])      # \u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0443     # \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0437\u043b\u0430, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0443 \u043d\u0435\u0433\u043e.     if len(self.special_list_column) &gt; 0:         first_nodes_df = self.set_special_color(first_nodes_df)     second_nodes_df['NODES'] = graph_df_full[self.nodes_list_second_column]     second_nodes_df = second_nodes_df.assign(COLOR=self.nodes_second_color)     second_nodes_df = second_nodes_df.drop_duplicates(subset=['NODES'])      summary_nodes = pd.concat([first_nodes_df, second_nodes_df])      summary_nodes = summary_nodes.drop_duplicates(subset=['NODES'])     if len(filtered_nodes) &gt; 0:         summary_nodes = summary_nodes.loc[summary_nodes['NODES'].isin(filtered_nodes)]      # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0443\u0437\u043b\u044b     nodes_array.extend(summary_nodes['NODES'].tolist())     nodes_color.extend(summary_nodes['COLOR'].tolist())     return nodes_array, nodes_color<\/code><\/pre>\n<p>\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0440\u0435\u0431\u0440\u0430 \u0433\u0440\u0430\u0444\u0430. \u0421\u0430\u043c \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0439, \u043d\u043e \u044f \u043f\u0435\u0440\u0435\u0444\u0440\u0430\u0437\u0438\u0440\u0443\u044e \u043e\u0434\u043d\u0443 \u0446\u0438\u0442\u0430\u0442\u0443 \u0441\u0430\u043c\u0438 \u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u043e\u0433\u043e: \u00ab\u0415\u0441\u043b\u0438 \u043a\u043e\u0441\u0442\u044b\u043b\u044c \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u0435\u043d, \u043a\u043e\u0441\u0442\u044b\u043b\u0438\u0442\u044c \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0432\u044b\u043c\u00bb. <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u043c\u044b \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c \u0443\u0437\u043b\u044b \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u0440\u0435\u0431\u0435\u0440 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u0430, \u0434\u0435\u043b\u0430\u0435\u043c \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u0441\u0443\u043c\u043c\u0435 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0432\u0432\u043e\u0434\u0438\u043b \u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0432 \u043f\u043e\u043b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043f\u043e \u0441\u0443\u043c\u043c\u0435, \u0438 \u0435\u0441\u043b\u0438 \u0434\u0430, \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e<\/p>\n<pre><code>def get_all_edges(self, graph_df_full):     \"\"\"     Function counts edges and weights for graph     :return: prepared edges array     \"\"\"     filtered_nodes = []     sum_limit = 0     edges_sum_filter = 0     # \u0423\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0432\u0435\u0441\u0430 \/ \u0441\u0443\u043c\u043c\u044b \/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e     edges_full = graph_df_full.groupby(by=[self.nodes_list_first_column,                                            self.nodes_list_second_column]).agg(         VALUE=(self.edges_in_list_column, 'sum'),         MAX_COUNT=(self.edges_in_list_column, 'count'))     edges_full = edges_full.reset_index()     # \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0441\u0443\u043c\u043c\u0435     try:         edges_sum_filter = int(self.edges_sum_filter_text.text())     except Exception as ex:         edges_sum_filter = 0<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0447\u0442\u043e-\u0442\u043e \u0435\u0441\u0442\u044c \u2013 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c \u043f\u043e \u0441\u0443\u043c\u043c\u0435 \u0441\u0432\u044f\u0437\u0438, \u0438 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438.<\/p>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u0432\u044f\u0437\u0435\u0439 \u0443\u0437\u043b\u043e\u0432. \u0412 \u0446\u0435\u043b\u043e\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e.<\/p>\n<pre><code>if edges_sum_filter &gt; 0: &nbsp;&nbsp;&nbsp; edges_full = edges_full.loc[edges_full['VALUE'] &gt; int(self.edges_sum_filter_text.text())] &nbsp;&nbsp;&nbsp; filtered_nodes = edges_full[self.nodes_list_first_column].append( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edges_full[self.nodes_list_second_column]).unique()  # \u0424\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u0432\u044f\u0437\u0435\u0439 try: &nbsp;&nbsp;&nbsp; sum_limit = int(self.sum_limit_value.text()) except Exception as ex: &nbsp;&nbsp;&nbsp; sum_limit = 0<\/code><\/pre>\n<pre><code>if sum_limit &gt; 0: &nbsp;&nbsp;&nbsp; edges_count = pd.concat([edges_full.groupby(by=[self.nodes_list_first_column]).agg( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MAX_COUNT_EDGES_IN=(self.nodes_list_first_column, 'count')).reset_index() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .rename(columns={self.nodes_list_first_column: 'node'}),  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edges_full.groupby(by=[self.nodes_list_second_column]).agg( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;MAX_COUNT_EDGES_IN=(self.nodes_list_second_column, 'count')).reset_index() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .rename(columns={self.nodes_list_second_column: 'node'})]) &nbsp;&nbsp;&nbsp; filtered_nodes = edges_count.groupby(by=['node']).sum().reset_index() &nbsp;&nbsp;&nbsp; filtered_nodes = filtered_nodes.loc[filtered_nodes['MAX_COUNT_EDGES_IN'] &gt; int(self.sum_limit_value.text())] &nbsp;&nbsp;&nbsp; filtered_nodes = filtered_nodes['node'].unique()  &nbsp;&nbsp;&nbsp; edges_full = edges_full.loc[edges_full[self.nodes_list_first_column].isin(filtered_nodes) | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edges_full[self.nodes_list_second_column].isin(filtered_nodes)] &nbsp;&nbsp;&nbsp; filtered_nodes = edges_full[self.nodes_list_first_column].append( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edges_full[self.nodes_list_second_column]).unique()<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u2013 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0435\u0441\u0430 \u0432\u0441\u0435\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0435. \u0421\u0430\u043c \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0440\u0435\u0431\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438.<\/p>\n<pre><code># C\u0447\u0438\u0442\u0430\u0435\u043c \u0432\u0435\u0441\u0430 edges_full['WEIGHT'] = edges_full['VALUE'].apply( &nbsp;&nbsp;&nbsp; lambda x: (x \/ edges_full['VALUE'].sum()) * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.count_weight_coeff(len(edges_full[self.nodes_list_first_column]))) # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 self.uniq_edges_found_text.setText(str(len(edges_full[self.nodes_list_first_column]))) self.edges_sum_text.setText(str(edges_full['VALUE'].sum()))  return edges_full[[self.nodes_list_first_column, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.nodes_list_second_column, 'WEIGHT']].to_numpy(), filtered_nodes<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0443\u0437\u043b\u043e\u0432 \u0441 \u043c\u0430\u043b\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0432\u0435\u0441\u043e\u0432, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u043e\u043d\u043a\u0438\u0435, \u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u043e\u043b\u0441\u0442\u044b\u0435. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044f \u0432\u0432\u0435\u043b \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u0432\u0435\u0441\u043e\u0432 \u043d\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u0430.<\/p>\n<pre><code>def count_weight_coeff(self, nodes_list_length):     \"\"\"     Count weights according to count, to get good visualization     :return:     \"\"\"     if nodes_list_length &gt; 0 &amp; nodes_list_length &lt;= 50:         return 5     elif nodes_list_length &gt; 50 &amp; nodes_list_length &lt;= 500:         return 100     elif nodes_list_length &gt; 500:         return 1000<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u0433\u0440\u0430\u0444\u0430. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d Canvas \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0433\u0434\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 matplot. \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u2013 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0433\u0440\u0430\u0444\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 networkx, \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0443\u0437\u043b\u0430\u043c\u0438, \u0440\u0435\u0431\u0440\u0430\u043c\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c. \u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043e\u0447\u0438\u0449\u0430\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043e\u043a, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u043e\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0434\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a.<\/p>\n<pre><code>def draw_summary_graph(self):     self.fig = plt.cla()     graph = nx.DiGraph()     # \u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0430 (\u0443\u0437\u043b\u044b)     graph_df_full = self.prepare_graph_df(self.df, False)     edges, filtered_nodes = self.get_all_edges(graph_df_full)     for edge in edges:         graph.add_edge(edge[0], edge[1], colour=20, weight=edge[2])      edges = graph.edges()     weights = [graph[u][v]['weight'] for u, v in edges]     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0437\u043b\u044b \u0438 \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u043d\u0438\u0445     nodes_list, nodes_color = self.get_all_nodes(graph_df_full, filtered_nodes)     # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0435\u0431\u0440\u0430 \u0438 \u0432\u0435\u0441\u0430     try:         nx.draw(graph, nodelist=nodes_list, node_color=nodes_color, width=weights, with_labels=True)     except nx.NetworkXError:         self.fig = plt.cla()     self.fig = plt.figure(1, figsize=(3, 3))     self.canvas.draw()<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c15\/643\/4a1\/c156434a106b866540b9190d0f11464c.png\" width=\"1275\" height=\"1073\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/02c\/07e\/67a\/02c07e67aa8608261c06905a42536307.png\" width=\"1266\" height=\"1078\"><figcaption><\/figcaption><\/figure>\n<p><code>C:\\Users\\Iov - RV\\PycharmProjects\\graph - pyqt - new &gt; pyinstaller<br \/> main.py - -one - file<\/code><\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 exe \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<figure class=\"float\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4da\/f6c\/536\/4daf6c536745fc04e982938499e67748.png\" width=\"189\" height=\"53\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0443 \u043d\u0430\u0441 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442. \u0417\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u043e\u0435 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435, \u0443 \u043c\u0435\u043d\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 matplotlib, \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043f\u0430\u0441\u043b\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b03\/d8a\/eb1\/b03d8aeb1314890078693b445e1a58fb.png\" width=\"974\" height=\"506\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u044f \u0434\u043e\u0432\u043e\u043b\u0435\u043d. \u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u044b\u0435, \u0434\u043b\u044f \u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0445\u0432\u0430\u0442\u0430\u0435\u0442.<\/p>\n<p>\u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0432\u043d\u0435\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u043e\u0433\u0443 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438, \u0447\u0442\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u044f\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/548928\/\"> https:\/\/habr.com\/ru\/post\/548928\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p><strong>\u0413\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u2013 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0441\u0432\u044f\u0437\u0435\u0439 \u0432 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c PyQT \u0438 networkx \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u044f\u0437\u0435\u0439.<\/strong><\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u044f \u0440\u0435\u0448\u0430\u043b \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, \u0438\u0441\u043a\u0430\u043b \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0431\u044b\u043b\u043e: \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438. <\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0439: \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u044f \u0431\u0440\u0430\u043b *.csv \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u0432\u043e\u0434\u0438\u043b \u0432 pandas, \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u043a \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0432\u044b\u0432\u043e\u0434\u0438\u043b \u0441\u0432\u044f\u0437\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u044d\u0442\u043e \u0432\u0441\u0435 \u0432 networkx \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0433\u0440\u0430\u0444, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c.<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043d\u0430 \u044d\u0442\u043e \u0432\u0441\u0435, \u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0434\u043b\u044f \u043d\u0430\u0441, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u0441\u0430\u043c\u0438 \u0442\u0430\u043c \u043a\u0440\u0443\u0442\u0438\u043b\u0438 \u0432\u0441\u0435 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043c\u043e\u0439 \u043e\u0442\u0432\u0435\u0442 \u0431\u044b\u043b \u2013 \u0430 \u043c\u043e\u0436\u0435\u0442 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 open-source? \u0412\u043e\u0437\u044c\u043c\u0438\u0442\u0435 Gephi, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u041f\u0440\u043e\u0448\u043b\u0430 \u043d\u0435\u0434\u0435\u043b\u044f, \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u2013 \u0432\u043e\u0442 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043b\u043e\u0436\u043d\u043e. \u042f \u0447\u0435\u0441\u0442\u043d\u043e \u043e\u0442\u0431\u0438\u0432\u0430\u043b\u0441\u044f, \u043d\u043e \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043d\u0435 \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u043b. <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443: \u041d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u043e\u0432, \u043d\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0430 \u043d\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u043e\u0441\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0431\u0435\u0437 \u0431\u0443\u0431\u043d\u043e\u0432. \u042f\u0437\u044b\u043a \u2013 Python. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043f\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439, \u0430 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u0437\u044f\u043b PYQT.<\/p>\n<p>\u0421\u0430\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u043d\u0430 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043a\u0438\u0434\u0430\u043b \u043c\u0430\u043a\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (\u043c\u0430\u043a\u0435\u0442\u044b \u0432 Paint \u043d\u0430\u0448\u0435 \u0432\u0441\u0435), \u0430 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0433\u0440\u0430\u0444\u0430. <\/p>\n<p><strong>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/strong><\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0443\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043a\u043d\u0435 PYQT. \u0412\u043e\u043e\u0431\u0449\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 PyQT \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 GUI, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0445\u043e\u0447\u0435\u0448\u044c, \u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u0430\u0441\u0442 \u0442\u0435\u0431\u0435 \u043a\u043e\u0434. \u041c\u043d\u0435 \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043d\u0443\u043b\u044f. <s>\u0418 \u044f \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u043a\u0430\u043a \u0442\u0443\u0434\u0430 \u0437\u0430\u0441\u0443\u043d\u0443\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0433\u0440\u0430\u0444.<\/s><\/p>\n<p>\u0421\u0430\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (\u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GraphWindow), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 QtWidgets.QMainWindow \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0432 \u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435.<\/p>\n<p>\u0416\u0435\u043b\u0430\u0435\u043c\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u043e\u0432. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 PYQT \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043a\u0430\u043a \u0432\u0435\u0440\u0441\u0442\u043a\u0430, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0445\u043e\u0436\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u043a\u0430\u043a \u0432 HTML<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b main.py, \u0441\u0442\u0430\u0432\u0438\u043c \u0432\u0441\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0438\u0448\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u044b<\/p>\n<pre><code class=\"python\">from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QListWidget, QMessageBox, QColorDialog from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtGui import QPixmap  import sys import pandas as pd import networkx as nx import matplotlib.pyplot as plt  from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas<\/code><\/pre>\n<p>\u043f\u0438\u0448\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438 \u0432\u043f\u0438\u0448\u0435\u043c \u0432 \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u043a\u043d\u0430:<\/p>\n<pre><code class=\"python\">class GraphWindow(QtWidgets.QMainWindow): - \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043a\u043b\u0430\u0441\u0441 \u043e\u0442 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430      def __init__(self):         super().__init__() \u2013 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430         self.resize(1280, 1080) \u2013 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043e\u043a\u043d\u0430         self.move(250, 0) \u2013 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432 \u0446\u0435\u043d\u0442\u0440         self.title = 'Graph' \u2013 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430 \t# \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \tself._main = QtWidgets.QWidget(self)<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0438\u0437 \u0447\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043e\u043a\u043d\u043e. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043e\u0431\u0435\u0440\u0442\u043a\u0438, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435 \u043e\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 QtWidgets QVBoxLayout \u0438 QHBoxLayout \u2013 V(vertical) \u0438 H(horizontal) \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043d\u0430\u043c \u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u0435\u0440\u0442\u043a\u0438. <\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u0431\u043b\u043e\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043c\u0430\u043a\u0435\u0442\u0435: <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432<\/p>\n<pre><code># \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 self.horizontal_container = QtWidgets.QHBoxLayout(self._main)  # \u0414\u0435\u043b\u0438\u043c \u043e\u043a\u043d\u043e \u043d\u0430 \u0434\u0432\u0430 - \u043b\u0435\u0432\u0430\u044f \u0438 \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c self.vertical_container_left = QtWidgets.QVBoxLayout(self) self.vertical_container_right = QtWidgets.QVBoxLayout(self) self.horizontal_container.addLayout(self.vertical_container_left) self.horizontal_container.addLayout(self.vertical_container_right)<\/code><\/pre>\n<p>&nbsp;\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043f\u043e\u043b\u0435\u0439 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<pre><code># \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u0435\u0439 \u0438\u0437 \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u0430 self.horizontal_container_lists = QtWidgets.QHBoxLayout(self)<\/code><\/pre>\n<p>&nbsp;\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043f\u043e\u043b\u0435\u0439 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 3 \u043e\u0431\u0435\u0440\u0442\u043e\u043a (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0443\u0437\u043b\u044b, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0443\u0437\u043b\u044b, \u0438 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438). \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043b\u0435\u0439\u0431\u043b\u044b (\u043f\u043e\u0434\u043f\u0438\u0441\u0438) \u0434\u043b\u044f \u043d\u0438\u0445, \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u041f\u043e\u043b\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0435\u043c \u0432 QlistWidget.<\/p>\n<pre><code># \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f 1 \u0443\u0437\u043b\u0430 self.vertical_container_nodes_first = QtWidgets.QVBoxLayout(self) # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u043b\u0438\u0441\u0442\u0430 \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 1 self.nodes_list_first_label = QtWidgets.QLabel(self) self.nodes_list_first_label.setFixedSize(100, 40) # \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0443\u0437\u043b\u0430 1 self.nodes_list_first_widget = QtWidgets.QListWidget(self) self.nodes_list_first_widget.setFixedSize(100, 150) self.vertical_container_nodes_first.addWidget(self.nodes_list_first_label) self.vertical_container_nodes_first.addWidget(self.nodes_list_first_widget)  # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f 2 \u0443\u0437\u043b\u0430 self.vertical_container_nodes_second = QtWidgets.QVBoxLayout(self) # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u043b\u0438\u0441\u0442\u0430 \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 2 self.nodes_list_second_label = QtWidgets.QLabel(self) self.nodes_list_second_label.setFixedSize(100, 40) # \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 2 self.nodes_list_second_widget = QListWidget(self) self.nodes_list_second_widget.setFixedSize(100, 150)  self.vertical_container_nodes_second.addWidget(self.nodes_list_second_label) self.vertical_container_nodes_second.addWidget(self.nodes_list_second_widget)  # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0440\u0435\u0431\u0435\u0440 self.vertical_container_edges_in = QtWidgets.QVBoxLayout(self) # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u043b\u0438\u0441\u0442\u0430 \u0441 \u0440\u0435\u0431\u0440\u0430\u043c\u0438 self.edges_in_list_label = QtWidgets.QLabel(self) self.edges_in_list_label.setFixedSize(100, 35)  # \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0441 \u0440\u0435\u0431\u0440\u0430\u043c\u0438 self.edges_in_list_widget = QListWidget(self) self.edges_in_list_widget.setFixedSize(100, 150)  self.vertical_container_edges_in.addWidget(self.edges_in_list_label) self.vertical_container_edges_in.addWidget(self.edges_in_list_widget)<\/code><\/pre>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0430 \u043f\u0440\u043e\u0441\u044c\u0431\u0430, \u0430 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0443\u0437\u043b\u044b \u043a\u0430\u043a-\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u0435\u0447\u0430\u0442\u044c, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0435\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0439, \u0441\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043c \u0441\u043f\u0435\u0446\u043f\u0440\u0438\u0437\u043d\u0430\u043a. \u041d\u0435 \u0432\u043e\u043f\u0440\u043e\u0441, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u0438\u0441\u043e\u043a<\/p>\n<pre><code># \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u043f\u0435\u0446 \u043f\u0440\u0438\u0437\u043d\u0430\u043a self.vertical_container_special_features = QtWidgets.QVBoxLayout(self) # \u041b\u0435\u0439\u0431\u043b \u0434\u043b\u044f \u043b\u0438\u0441\u0442\u0430 \u0441\u043e \u0441\u0446\u0435\u0446 \u043f\u0440\u0430\u0437\u043d\u0430\u043a\u0430\u043c\u0438 self.special_features_list_label = QtWidgets.QLabel(self) self.special_features_list_label.setFixedSize(100, 35)  # \u041b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f \u0441 \u0440\u0435\u0431\u0440\u0430\u043c\u0438 self.special_features_list_widget = QListWidget(self) self.special_features_list_widget.setFixedSize(100, 150)  self.vertical_container_special_features.addWidget(self.special_features_list_label) self.vertical_container_special_features.addWidget(self.special_features_list_widget)<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u0432\u0432\u0435\u043b\u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u0435\u0439, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0438\u0445 \u0432 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0435\u0440\u0442\u043a\u0443:<\/p>\n<pre><code># \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 self.horizontal_container_lists.addLayout(self.vertical_container_nodes_first) self.horizontal_container_lists.addLayout(self.vertical_container_nodes_second) self.horizontal_container_lists.addLayout(self.vertical_container_edges_in) self.horizontal_container_lists.addLayout(self.vertical_container_special_features)<\/code><\/pre>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u2013 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e PyQT \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f Color Picker, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u043d\u0430\u0432\u0435\u0440\u0445 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0430\u043a\u0435\u0442\u0430.<\/p>\n<pre><code>self.horizontal_container_df_options = QtWidgets.QHBoxLayout(self)  # \u0412\u044b\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0443\u0437\u043b\u0430 1 self.horizontal_container_color_nodes_first = QtWidgets.QHBoxLayout(self) self.color_picker_nodes_first_label = QtWidgets.QLabel(self) self.color_picker_nodes_first_label.setFixedSize(65, 35) self.color_picker_nodes_first = QtWidgets.QPushButton(self.nodes_first_color, self) self.color_picker_nodes_first.setFixedSize(100, 30)  self.horizontal_container_color_nodes_first.addWidget(self.color_picker_nodes_first_label) self.horizontal_container_color_nodes_first.addWidget(self.color_picker_nodes_first)  # \u0412\u044b\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0443\u0437\u043b\u0430 2 self.horizontal_container_color_nodes_second = QtWidgets.QHBoxLayout(self) self.color_picker_nodes_second_label = QtWidgets.QLabel(self) self.color_picker_nodes_second_label.setFixedSize(65, 35) self.color_picker_nodes_second = QtWidgets.QPushButton(self.nodes_second_color, self) self.color_picker_nodes_second.setFixedSize(100, 30)  self.horizontal_container_color_nodes_second.addWidget(self.color_picker_nodes_second_label) self.horizontal_container_color_nodes_second.addWidget(self.color_picker_nodes_second)  self.horizontal_container_df_options.addLayout(self.horizontal_container_separator) self.horizontal_container_df_options.addLayout(self.horizontal_container_color_nodes_first)  # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0435\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430 self.vertical_container_left.addLayout(self.horizontal_container_df_options)<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<pre><code># \u041a\u043d\u043e\u043f\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 self.pushButton = QtWidgets.QPushButton(self) self.pushButton.setObjectName(\"pushButton\") # self.pushButton.setFixedSize(150, 50) self.pushButton.move(150, 10) self.vertical_container_left.addWidget(self.pushButton)<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u0430\u043c \u0435\u0449\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444 \u043f\u043e \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<pre><code># \u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0430 self.pushButton_3 = QtWidgets.QPushButton(self) self.pushButton_3.setObjectName(\"pushButton_3\")  self.vertical_container_left.addLayout(self.horizontal_container_lists) self.vertical_container_left.addWidget(self.pushButton_3)<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u043d\u0438\u0445. \u041f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0441\u0435\u043c \u0438\u0445 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u044f\u0434.<\/p>\n<pre><code># \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0437\u043b\u0430 self.horizontal_container_lists_second = QtWidgets.QHBoxLayout(self)  # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0437\u043b\u0430 \u0434\u043b\u044f \u043e\u0442\u0441\u043c\u043e\u0442\u0440\u0430 self.vertical_container_get_node = QtWidgets.QVBoxLayout(self) # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f<\/code><\/pre>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-320265","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/320265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=320265"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/320265\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=320265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=320265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=320265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}