переделал приложение, сделал нормальное отображение информации, поменял вид
This commit is contained in:
parent
310ecb6fda
commit
864af4e1b4
Binary file not shown.
Binary file not shown.
185
app.py
185
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()
|
||||
KompasApp().run()
|
|
@ -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')],
|
||||
|
|
Binary file not shown.
|
@ -2,11 +2,18 @@
|
|||
import pythoncom
|
||||
from win32com.client import Dispatch, gencache
|
||||
import os
|
||||
import sys
|
||||
|
||||
def save_opened_to_iges():
|
||||
try:
|
||||
# Получи API интерфейсов версии 5
|
||||
# Инициализация COM системы
|
||||
pythoncom.CoInitialize()
|
||||
|
||||
# Получаем API интерфейсы
|
||||
api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
|
||||
if api5_module is None:
|
||||
raise Exception("Не удалось загрузить API Kompas 5")
|
||||
|
||||
api5_api = api5_module.KompasObject(
|
||||
Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(
|
||||
api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch
|
||||
|
@ -14,6 +21,9 @@ def save_opened_to_iges():
|
|||
)
|
||||
|
||||
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
|
||||
if module is None:
|
||||
raise Exception("Не удалось загрузить API Kompas 7")
|
||||
|
||||
api = module.IKompasAPIObject(
|
||||
Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(
|
||||
module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch
|
||||
|
@ -25,8 +35,12 @@ def save_opened_to_iges():
|
|||
).constants
|
||||
|
||||
application = module.IApplication(api)
|
||||
|
||||
application.Visible = True
|
||||
|
||||
result = []
|
||||
ext = "igs"
|
||||
saved_files = 0
|
||||
|
||||
for i in range(application.Documents.Count):
|
||||
try:
|
||||
doc = application.Documents.Open(i)
|
||||
|
@ -34,32 +48,39 @@ def save_opened_to_iges():
|
|||
if doc_type in [k_constants.ksDocumentPart, k_constants.ksDocumentAssembly]:
|
||||
doc.Active = True
|
||||
doc_path = doc.Path
|
||||
doc_name = "-".join(doc.Name.split(".")[:-1])
|
||||
print(f"Попытка сохранить {doc_name}")
|
||||
|
||||
doc_name = os.path.splitext(doc.Name)[0]
|
||||
|
||||
save_path = os.path.join(doc_path, ext)
|
||||
os.makedirs(save_path, exist_ok=True)
|
||||
|
||||
filename = f"{doc_name}.{ext}"
|
||||
full_path = os.path.normpath(os.path.join(save_path, filename))
|
||||
|
||||
doc_3d = module.IKompasDocument3D(doc)
|
||||
doc_api5 = api5_api.ActiveDocument3D()
|
||||
|
||||
|
||||
save_params = doc_api5.AdditionFormatParam()
|
||||
save_params.Init()
|
||||
save_params.format = k_constants.ksConverterToIGES
|
||||
|
||||
ext = "igs"
|
||||
|
||||
path = f"{doc_path}{ext}/"
|
||||
filename = f"{doc_name}.{ext}"
|
||||
full_path = "".join([path, filename])
|
||||
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
|
||||
|
||||
doc_api5.SaveAsToAdditionFormat(full_path, save_params)
|
||||
print(f"Файл {doc_name} сохранен как IGES: {full_path}")
|
||||
saved_files += 1
|
||||
result.append(f"Успешно сохранено: {full_path}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка при обработке документа {i}: {e}")
|
||||
|
||||
return "Сохранение в IGES завершено."
|
||||
result.append(f"Ошибка при обработке документа {i} ({doc.Name}): {str(e)}")
|
||||
|
||||
if saved_files > 0:
|
||||
result.insert(0, f"\nУспешно сохранено файлов: {saved_files}")
|
||||
else:
|
||||
result.append("Не найдено подходящих документов для сохранения")
|
||||
|
||||
return "\n".join(result)
|
||||
|
||||
except Exception as e:
|
||||
return f"Произошла ошибка: {e}"
|
||||
return f"Критическая ошибка: {str(e)}"
|
||||
finally:
|
||||
pythoncom.CoUninitialize()
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(save_opened_to_iges())
|
Loading…
Reference in New Issue