From 864af4e1b443099b852b6e84364763af6ee7d501 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 25 Mar 2025 14:41:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5,=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BD?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B8,?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F=D0=BB=20=D0=B2=D0=B8?= =?UTF-8?q?=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/project_support.cpython-311.pyc | Bin 7668 -> 7668 bytes __pycache__/save_to_iges.cpython-311.pyc | Bin 3787 -> 4896 bytes app.py | 185 ++++++++------------ build/app/EXE-00.toc | 2 +- dist/app.exe | Bin 26713073 -> 26713073 bytes save_to_iges.py | 63 ++++--- 6 files changed, 119 insertions(+), 131 deletions(-) diff --git a/__pycache__/project_support.cpython-311.pyc b/__pycache__/project_support.cpython-311.pyc index 8fa1bd7e189931530f389e44de38bc07e7008462..31b99c9194af8705d92fe9027eede3e0784b64ef 100644 GIT binary patch delta 20 acmexj{l%JlIWI340}woz^k^gZOIZL*vIk25 delta 20 acmexj{l%JlIWI340}vP{-QCFjQWgM3um)!U diff --git a/__pycache__/save_to_iges.cpython-311.pyc b/__pycache__/save_to_iges.cpython-311.pyc index ba3f1223dca6944b2f493b3ac4cbf8d7706be50f..1a74d232d6be7b66d8fafd211b4fd4f374241b69 100644 GIT binary patch literal 4896 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 SHgZ_&n=~?3gIww~#PJ{JY!Cqe delta 2126 zcmZ`)TTB#J7(O$zv)9@CvRqc!6%|=Pu+oY`1t}0^No^wb!c9V%MRx_3?xn2hY_X=M zBsD4Iw0-bWwwEZ?CZ#4u)JR|Y(BR9NcAAn+NK6_Y`bOi6B_{2E76x5yPyYS)JOAZ7 z-0^RzGk)DH63;7=*6FXMOy~LTuQunf?ETb}-yDahHiYkrg?Sy#j)-Z;B3Q z9}HzlX(TpnqB`(a&h@%p;`;@aJ?>EvLJ}X|+)CK0#&fl{qA8~DLP~4MsZQIn?B{g$ zqbZ%F3)|J^lwQ(Hny^Ei19qx-h|B8ca!@pJ)= zbs^E1D^5hB=^R_AmZ98i${4TROd(N_j2F>mHn)aB@TiI?dp@j~n@gD_Chf^?^fqtf z1WCYSIyb(A21!=QcH$XrDSP~&$^PtCt7#xxo_Ux1#&odll z5F9E>Io@{w)u-!doEb++t_zJbqN@`--)jYO_(#6;dZmPj0+~?(JCrOKNK1cj#7HVP-1wvKg-4hWAs&k-!UJlYXv}G zbFpf8C7(g7Y&~DM;x19#m89wzdE-se)lGW)WcP8!eSFfiQ|p9BXcy8?)%s{mwcsHbzkXbU9(A2zEAe;SA6@Y z+E+Zqm+EF3FEq|>mpwI#r)Cu~c@@hAMVCzJR=L2h6!=MjA0M%~C$ciS(~kK*bfuAaXitvI(px4Dmb+ArJkh`Wb$9-|)Yt*&(-+jogs9?!JlX5MW~GA>`La9eA(9TTuzL vQF?Q}MGwKFXbZSC{mUcSTi+Nx3{(0a8|%QIIbJGR)if|5|9KZZ1V#S>Pun}Q diff --git a/app.py b/app.py index b0bc605..429b6a2 100644 --- a/app.py +++ b/app.py @@ -2,156 +2,123 @@ from kivy.app import App from kivy.uix.button import Button from kivy.uix.label import Label from kivy.uix.boxlayout import BoxLayout +from kivy.uix.scrollview import ScrollView from kivy.core.window import Window from kivy.clock import Clock -from export_opened_to_raster import export_opened_to_raster # Импорт функции обработки -from save_to_iges import save_opened_to_iges # Импорт функции сохранения в IGES -from get_all_sheets import get_all_sheets # Импорт функции для получения всех листов -from project_support import project_support # Импорт функции Project Support +from kivy.metrics import dp +from kivy.properties import StringProperty +from export_opened_to_raster import export_opened_to_raster +from save_to_iges import save_opened_to_iges +from get_all_sheets import get_all_sheets +from project_support import project_support -class MyApp(App): +class ScrollableLabel(ScrollView): + text = StringProperty('') + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + self.label = Label( + size_hint_y=None, + font_size=dp(18), + halign='left', + valign='top', + padding=(dp(15), dp(15)), + markup=True + ) + self.label.bind( + texture_size=self._update_label_size, + width=lambda *x: setattr(self.label, 'text_size', (self.width, None)) + ) + self.bind( + width=lambda *x: setattr(self.label, 'text_size', (self.width, None)) + ) + self.add_widget(self.label) + + def _update_label_size(self, instance, size): + instance.size = (self.width, size[1]) + + def on_text(self, instance, value): + self.label.text = value + +class KompasApp(App): + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.title = "Kompas Saver" # Установка заголовка окна + def build(self): - # Устанавливаем размер окна (подходит для ПК) Window.size = (800, 600) - - # Главный контейнер (горизонтальный) main_layout = BoxLayout(orientation='horizontal', spacing=10, padding=10) - # Левая панель (на одну треть экрана) + # Левая панель (кнопки) left_panel = BoxLayout(orientation='vertical', size_hint=(0.3, 1), spacing=10) - - # Заголовок header = Label(text="Kompas Saver", size_hint=(1, 0.1), font_size=24, bold=True) - - # Кнопки слева button1 = Button(text="Создать PDF", on_press=self.process_kompas) button2 = Button(text="Сохранить в IGES", on_press=self.save_to_iges) - button3 = Button(text="Get All Sheets", on_press=self.get_all_sheets) - button4 = Button(text="Project Support", on_press=self.project_support) - - # Добавляем заголовок и кнопки в левую панель + button3 = Button(text="Get all sheets", on_press=self.get_all_sheets) + button4 = Button(text="Создать чертеж 3D модели", on_press=self.project_support) + left_panel.add_widget(header) left_panel.add_widget(button1) left_panel.add_widget(button2) left_panel.add_widget(button3) left_panel.add_widget(button4) - # Правая панель (пространство для контента) + # Правая панель (прокручиваемый текст) self.right_panel = BoxLayout(orientation='vertical', size_hint=(0.7, 1)) - self.right_panel.add_widget(Label(text="Выберите действие", font_size=18)) + self.scroll_label = ScrollableLabel() + self.right_panel.add_widget(self.scroll_label) - # Добавляем левую и правую панели в главный контейнер main_layout.add_widget(left_panel) main_layout.add_widget(self.right_panel) - return main_layout - def show_content(self, instance): - # Очищаем правую панель - self.right_panel.clear_widgets() - - # Добавляем контент в зависимости от нажатой кнопки - if instance.text == "Кнопка 4": - content = Label(text="Контент для Кнопки 4", font_size=18) - - self.right_panel.add_widget(content) - + def update_output(self, text): + self.scroll_label.text = text + def process_kompas(self, instance): - # Очищаем правую панель - self.right_panel.clear_widgets() - - # Добавляем сообщение о начале обработки - self.right_panel.add_widget(Label(text="Обработка документов КОМПАС...", font_size=18)) - - # Запускаем обработку в отдельном потоке (чтобы не блокировать интерфейс) - Clock.schedule_once(lambda dt: self.run_kompas_processing(), 0.1) - - def run_kompas_processing(self): + self.update_output("Конвертация в PDF...\n") + Clock.schedule_once(lambda dt: self._run_export(), 0.2) + + def _run_export(self): try: - # Вызываем функцию обработки документов КОМПАС result = export_opened_to_raster() - - # Обновляем правую панель с результатом - self.right_panel.clear_widgets() - self.right_panel.add_widget(Label(text=result, font_size=18)) - + self.update_output(result) except Exception as e: - # В случае ошибки выводим сообщение - self.right_panel.clear_widgets() - self.right_panel.add_widget(Label(text=f"Ошибка: {e}", font_size=18)) + self.update_output(f"[color=ff3333]Ошибка: {str(e)}[/color]") def save_to_iges(self, instance): - # Очищаем правую панель - self.right_panel.clear_widgets() - - # Добавляем сообщение о начале сохранения - self.right_panel.add_widget(Label(text="Сохранение документов в IGES...", font_size=18)) - - # Запускаем сохранение в отдельном потоке (чтобы не блокировать интерфейс) - Clock.schedule_once(lambda dt: self.run_save_to_iges(), 0.1) - - def run_save_to_iges(self): + self.update_output("Экспорт в IGES...") + Clock.schedule_once(lambda dt: self._run_save_iges(), 0.2) + + def _run_save_iges(self): try: - # Вызываем функцию сохранения в IGES result = save_opened_to_iges() - - # Обновляем правую панель с результатом - self.right_panel.clear_widgets() - self.right_panel.add_widget(Label(text=result, font_size=18)) - + self.update_output(result) except Exception as e: - # В случае ошибки выводим сообщение - self.right_panel.clear_widgets() - self.right_panel.add_widget(Label(text=f"Ошибка: {e}", font_size=18)) + self.update_output(f"[color=ff3333]Ошибка: {str(e)}[/color]") def get_all_sheets(self, instance): - # Очищаем правую панель - self.right_panel.clear_widgets() - - # Добавляем сообщение о начале анализа - self.right_panel.add_widget(Label(text="Анализ документов...", font_size=18)) - - # Запускаем анализ в отдельном потоке (чтобы не блокировать интерфейс) - Clock.schedule_once(lambda dt: self.run_get_all_sheets(), 0.1) - - def run_get_all_sheets(self): + self.update_output("Получение списка листов...") + Clock.schedule_once(lambda dt: self._run_get_sheets(), 0.2) + + def _run_get_sheets(self): try: - # Вызываем функцию для получения всех листов result = get_all_sheets() - - # Обновляем правую панель с результатом - self.right_panel.clear_widgets() - self.right_panel.add_widget(Label(text=result, font_size=18)) - + self.update_output(result) except Exception as e: - # В случае ошибки выводим сообщение - self.right_panel.clear_widgets() - self.right_panel.add_widget(Label(text=f"Ошибка: {e}", font_size=18)) + self.update_output(f"[color=ff3333]Ошибка: {str(e)}[/color]") def project_support(self, instance): - # Очищаем правую панель - self.right_panel.clear_widgets() - - # Добавляем сообщение о начале поддержки проекта - self.right_panel.add_widget(Label(text="Поддержка проекта...", font_size=18)) - - # Запускаем поддержку проекта в отдельном потоке (чтобы не блокировать интерфейс) - Clock.schedule_once(lambda dt: self.run_project_support(), 0.1) - - def run_project_support(self): + self.update_output("Project Support...") + Clock.schedule_once(lambda dt: self._run_project_support(), 0.2) + + def _run_project_support(self): try: - # Вызываем функцию поддержки проекта result = project_support() - - # Обновляем правую панель с результатом - self.right_panel.clear_widgets() - self.right_panel.add_widget(Label(text=result, font_size=18)) - + self.update_output(result) except Exception as e: - # В случае ошибки выводим сообщение - self.right_panel.clear_widgets() - self.right_panel.add_widget(Label(text=f"Ошибка: {e}", font_size=18)) + self.update_output(f"[color=ff3333]Ошибка: {str(e)}[/color]") -# Запуск приложения if __name__ == '__main__': - MyApp().run() \ No newline at end of file + KompasApp().run() \ No newline at end of file diff --git a/build/app/EXE-00.toc b/build/app/EXE-00.toc index 0fe3845..f29e79d 100644 --- a/build/app/EXE-00.toc +++ b/build/app/EXE-00.toc @@ -768,7 +768,7 @@ [], False, False, - 1742562368, + 1742809051, [('runw.exe', 'c:\\projects\\3knopki\\.venv\\Lib\\site-packages\\PyInstaller\\bootloader\\Windows-64bit-intel\\runw.exe', 'EXECUTABLE')], diff --git a/dist/app.exe b/dist/app.exe index 9a0353c057584337896bf4797f3d167099141dc7..08b54d174348518100ae300a8ed5d06171b13742 100644 GIT binary patch delta 1816 zcmWmES9}cy07miObo_0a$g(Fl#v1WnNl&Cvoa(F(2625r#}?a=`p z(FxJ$j4tSkZs?94=!stFjXvm$e&~+@7>Gd_j3F3`VHl1OMqngjFbbnF24gV}<1qmf zF$t3~1yeB%(=h`xF$=RX2XiqG^RWO6u?UM1izSG|QY^!A#A5|kVigjw8f&l?iCBmA z*nlK##3pRU7Hq{c*oI_0i|yEfop=t<;|08kUD%D6@G@S(tJs6Rcnz;(ANJz_4&o5r zz?(RXw~&IjaRf(k499T-C-Dy6#d~-kAK*ir!fAYjkMRjU#b@{&U*Joe!C8ETukj7O z#W|eEcesG>@dJLuPxu)Z@e6*%CH#ipaT!-|6{)y}Kkz61!r!=#8@P#ENW*R1!9VyH zcX1E*@c<9;2>;=KJjRoR)Z{=SOga-Z=}iWc(PT22O%@YovYK#{&15$@OoYj4a+yez z+vG8MO+J&~6fgx%Aye2CF-1)=Q{0p=B~2+)+LSS6O_V8T%9{$NqN!vmn<}QNsb;F1 z8m6YHWonx`rmm@H>YE0pp=o3qnR#O=r`^ zbT!>fchkf4G`&o3)5r8R{Y-x|zzj5l%wRLb3^l{da1$~k%t#YsMw!uOj2Uajnek?V znP?`N$!3a~YNna#W`>z*W|`S$j+txbnfYdcS!foS#U|D)F>z+8S!R}-c(cN+G^=CG1Y_c^q(lZ{gHh4j6GDN+P(Yc|LV;lX4#&jw)F3h= z3$h{`vLgq=kQ3p^h1|%42;@aRL?S;5pdbpNFp8ikilI14pd?D6G|HeX%Aq_epduRZ$Jq5sezCiCU6PCTNNnG(&T=KufejYqUXIv_pGzKu2^! zXLLaK zWK6+SOv7}{z)Z}-Y|O!2%)@*vz(Op-Vl2T@#A6u}upBF}5{X!a)mVchti?L4M=~~G zBQ_xgo3RC3u?^et1a=@5Phux_VK??*FZN+Sp2E|32G8OE4&pgHj~DPFUc$>bgjet? zUc>8n18*V?Z{ckm#u2=Ockv$H$59-^ah$*h_z)*?3LoKPoW>b^f=}@oKF3*{!+Bi5 z7x)ri;cHyPC47T#aT!-|71!_`zQ+&v5kKK)Tt_-?;1~Rg-|#zb;udb>4l-~T_wWb) z#9#Ou_wfJ^@d*FmU;KyvlhRWI$uOBr&}24QOjeW4WH&iXn8|6vO)it$ 0: + result.insert(0, f"\nУспешно сохранено файлов: {saved_files}") + else: + result.append("Не найдено подходящих документов для сохранения") + + return "\n".join(result) except Exception as e: - return f"Произошла ошибка: {e}" \ No newline at end of file + return f"Критическая ошибка: {str(e)}" + finally: + pythoncom.CoUninitialize() + +if __name__ == "__main__": + print(save_opened_to_iges()) \ No newline at end of file