добавил выравнивание кнопкам и поменял внешний вид

This commit is contained in:
Andrey 2025-03-27 15:44:23 +03:00
parent 3473a005e2
commit 7904c3ba62
13 changed files with 5158 additions and 5033 deletions

141
app.py
View File

@ -6,12 +6,123 @@ from kivy.uix.scrollview import ScrollView
from kivy.core.window import Window
from kivy.clock import Clock
from kivy.metrics import dp
from kivy.properties import StringProperty
from kivy.properties import StringProperty, ListProperty, BooleanProperty
from kivy.animation import Animation
from kivy.uix.behaviors import ButtonBehavior
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 HoverBehavior(ButtonBehavior):
"""Поведение для обработки наведения курсора"""
hovered = BooleanProperty(False)
border_point = ListProperty((0, 0))
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.register_event_type('on_enter')
self.register_event_type('on_leave')
Window.bind(mouse_pos=self.on_mouse_pos)
def on_mouse_pos(self, *args):
if not self.get_root_window():
return
pos = args[1]
inside = self.collide_point(*self.to_widget(*pos))
if self.hovered == inside:
return
self.border_point = pos
self.hovered = inside
if inside:
self.dispatch('on_enter')
else:
self.dispatch('on_leave')
def on_enter(self):
pass
def on_leave(self):
pass
class AnimatedButton(Button):
# Цвета для разных состояний
original_color = ListProperty([0.392, 0.416, 0.431, 1]) # Основной цвет (синий)
hover_color = ListProperty([0.165, 0.592, 1, 1]) # При наведении
press_color = ListProperty([0, 0.51, 1, 1]) # При нажатии
# Параметры анимации
hover_scale = 1.05
press_scale = 0.98
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.background_normal = ''
self.background_color = self.original_color
self.original_size = self.size.copy()
self.is_hovered = False
# Настройка отслеживания мыши
Window.bind(mouse_pos=self.on_mouse_pos)
def on_mouse_pos(self, window, pos):
# Преобразуем координаты мыши в координаты кнопки
if not self.get_root_window():
return
pos = self.to_widget(*pos)
is_inside = self.collide_point(*pos)
# Обрабатываем вход/выход курсора
if is_inside and not self.is_hovered:
self.is_hovered = True
self.on_enter()
elif not is_inside and self.is_hovered:
self.is_hovered = False
self.on_leave()
def on_enter(self):
Animation.cancel_all(self)
Animation(
background_color=self.hover_color,
size=(self.original_size[0] * self.hover_scale,
self.original_size[1] * self.hover_scale),
duration=0.15,
t='out_quad'
).start(self)
def on_leave(self):
Animation.cancel_all(self)
Animation(
background_color=self.original_color,
size=self.original_size,
duration=0.2,
t='out_quad'
).start(self)
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
Animation.cancel_all(self)
Animation(
background_color=self.press_color,
size=(self.original_size[0] * self.press_scale,
self.original_size[1] * self.press_scale),
duration=0.1,
t='in_out_quad'
).start(self)
return super().on_touch_down(touch)
def on_touch_up(self, touch):
if self.collide_point(*touch.pos):
Animation.cancel_all(self)
Animation(
background_color=self.hover_color if self.is_hovered else self.original_color,
size=(self.original_size[0] * (self.hover_scale if self.is_hovered else 1),
self.original_size[1] * (self.hover_scale if self.is_hovered else 1)),
duration=0.1,
t='out_quad'
).start(self)
return super().on_touch_up(touch)
class ScrollableLabel(ScrollView):
text = StringProperty('')
@ -28,11 +139,9 @@ class ScrollableLabel(ScrollView):
)
self.label.bind(
texture_size=self._update_label_size,
width=lambda *x: setattr(self.label, 'text_size', (self.width, None))
)
width=lambda *x: setattr(self.label, 'text_size', (self.width, None)))
self.bind(
width=lambda *x: setattr(self.label, 'text_size', (self.width, None))
)
width=lambda *x: setattr(self.label, 'text_size', (self.width, None)))
self.add_widget(self.label)
def _update_label_size(self, instance, size):
@ -44,7 +153,7 @@ class ScrollableLabel(ScrollView):
class KompasApp(App):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.title = "Kompas Saver" # Установка заголовка окна
self.title = "Kompas Saver"
def build(self):
Window.size = (800, 600)
@ -53,10 +162,22 @@ class KompasApp(App):
# Левая панель (кнопки)
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="Получить информацию о чертеже", on_press=self.get_all_sheets)
button4 = Button(text="Projects Support", on_press=self.project_support)
# Стиль для кнопок
button_style = {
'size_hint': (1, 1), #лучше не менять, т.к. кнопки будут плыть при переключении между оконным и полноэкранным режимом
'height': 150,
'halign': 'center',
'valign': 'middle',
'text_size': (None, None),
'padding': (10, 10)
}
# Создаем анимированные кнопки
button1 = AnimatedButton(text="Создать PDF", on_press=self.process_kompas, **button_style)
button2 = AnimatedButton(text="Сохранить в IGES", on_press=self.save_to_iges, **button_style)
button3 = AnimatedButton(text="Получить информацию \nо чертеже", on_press=self.get_all_sheets, **button_style)
button4 = AnimatedButton(text="Projects Support", on_press=self.project_support, **button_style)
left_panel.add_widget(header)
left_panel.add_widget(button1)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -14,17 +14,17 @@ Types if import:
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
tracking down the missing module yourself. Thanks!
missing module named pwd - imported by posixpath (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional), subprocess (delayed, conditional, optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed)
missing module named grp - imported by shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional), subprocess (delayed, conditional, optional)
missing module named pwd - imported by posixpath (delayed, conditional, optional), subprocess (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed)
missing module named grp - imported by subprocess (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional)
missing module named _posixsubprocess - imported by subprocess (conditional), multiprocessing.util (delayed)
missing module named fcntl - imported by subprocess (optional), kivy.input.providers.hidinput (conditional), kivy.input.providers.linuxwacom (conditional)
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
missing module named org - imported by pickle (optional)
missing module named urllib.pathname2url - imported by urllib (conditional), kivy.core.audio.audio_gstplayer (conditional), kivy.core.video.video_gstplayer (conditional)
missing module named 'org.python' - imported by pickle (optional), xml.sax (delayed, conditional)
missing module named urllib.pathname2url - imported by urllib (conditional), kivy.core.video.video_gstplayer (conditional), kivy.core.audio.audio_gstplayer (conditional)
missing module named posix - imported by os (conditional, optional), posixpath (optional), shutil (conditional), importlib._bootstrap_external (conditional)
missing module named resource - imported by posix (top-level)
missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional)
missing module named org - imported by copy (optional)
missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional)
missing module named _scproxy - imported by urllib.request (conditional)
missing module named termios - imported by tty (top-level), getpass (optional)
@ -57,46 +57,46 @@ missing module named typing_extensions - imported by PIL._typing (conditional, o
missing module named numpy - imported by PIL._typing (conditional, optional), kivy.core.camera.camera_android (delayed), kivy.core.camera.camera_picamera (top-level)
missing module named olefile - imported by PIL.FpxImagePlugin (top-level), PIL.MicImagePlugin (top-level)
missing module named defusedxml - imported by PIL.Image (optional)
missing module named pygame - imported by kivy.input.providers.androidjoystick (conditional), kivy.app (delayed, conditional), kivy.core.window.window_pygame (top-level), kivy.support (delayed), kivy.core.text.text_pygame (optional), kivy.core.audio.audio_pygame (conditional, optional), kivy.core.clipboard.clipboard_pygame (optional), kivy.core.image.img_pygame (optional)
missing module named android - imported by kivy.metrics (delayed, conditional), kivy.core.window (delayed, conditional), kivy.base (delayed, optional), kivy.input.providers.androidjoystick (optional), kivy.app (delayed, conditional), kivy.core.window.window_sdl2 (delayed, conditional), kivy.core.window.window_pygame (conditional, optional), kivy.support (delayed, optional), kivy.core.clipboard.clipboard_android (top-level), kivy.core.audio.audio_android (top-level)
missing module named gobject - imported by kivy.support (delayed, optional)
missing module named gi - imported by kivy.support (delayed, optional), kivy.core.clipboard.clipboard_gtk3 (top-level)
missing module named 'gi.repository' - imported by kivy.core.clipboard.clipboard_gtk3 (top-level), kivy.core.camera.camera_gi (top-level)
missing module named ffmpeg - imported by kivy.core.video.video_ffmpeg (optional)
missing module named 'pyobjus.dylib_manager' - imported by kivy.core.clipboard.clipboard_nspaste (optional), kivy.core.audio.audio_avplayer (top-level)
missing module named pyobjus - imported by kivy.core.clipboard.clipboard_nspaste (optional), kivy.core.audio.audio_avplayer (top-level)
missing module named 'ffpyplayer.tools' - imported by kivy.core.video.video_ffpyplayer (optional), kivy.core.image.img_ffpyplayer (top-level), kivy.core.audio.audio_ffpyplayer (optional)
missing module named 'ffpyplayer.player' - imported by kivy.core.video.video_ffpyplayer (optional), kivy.core.audio.audio_ffpyplayer (optional)
missing module named ffpyplayer - imported by kivy.core.video.video_ffpyplayer (optional), kivy.core.image.img_ffpyplayer (top-level), kivy.core.audio.audio_ffpyplayer (optional)
missing module named jnius - imported by kivy.metrics (delayed, conditional), kivy.app (delayed, conditional), kivy.core.camera.camera_android (top-level), kivy.core.clipboard.clipboard_android (top-level), kivy.core.audio.audio_android (top-level)
missing module named 'pygame.scrap' - imported by kivy.core.clipboard.clipboard_pygame (optional)
missing module named 'ffpyplayer.pic' - imported by kivy.core.image.img_ffpyplayer (top-level)
missing module named Leap - imported by kivy.input.providers.leapfinger (delayed)
missing module named pygame - imported by kivy.input.providers.androidjoystick (conditional), kivy.app (delayed, conditional), kivy.core.audio.audio_pygame (conditional, optional), kivy.core.image.img_pygame (optional), kivy.support (delayed), kivy.core.clipboard.clipboard_pygame (optional), kivy.core.text.text_pygame (optional), kivy.core.window.window_pygame (top-level)
missing module named oscpy - imported by kivy.input.providers.tuio (delayed, optional)
missing module named android - imported by kivy.metrics (delayed, conditional), kivy.core.window (delayed, conditional), kivy.base (delayed, optional), kivy.input.providers.androidjoystick (optional), kivy.app (delayed, conditional), kivy.core.clipboard.clipboard_android (top-level), kivy.core.audio.audio_android (top-level), kivy.support (delayed, optional), kivy.core.window.window_pygame (conditional, optional), kivy.core.window.window_sdl2 (delayed, conditional)
missing module named Queue - imported by kivy.compat (optional)
missing module named picamera - imported by kivy.core.camera.camera_picamera (top-level)
missing module named 'android.runnable' - imported by kivy.core.clipboard.clipboard_android (top-level)
missing module named chardet - imported by pygments.lexer (delayed, conditional, optional)
missing module named pygments.formatters.BBCodeFormatter - imported by pygments.formatters (top-level), kivy.uix.codeinput (top-level)
missing module named pygments.lexers.PrologLexer - imported by pygments.lexers (top-level), pygments.lexers.cplint (top-level)
missing module named ctags - imported by pygments.formatters.html (optional)
missing module named dbus - imported by kivy.core.clipboard.clipboard_dbusklipper (optional)
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
missing module named Image - imported by kivy.core.image.img_pil (optional), docutils.parsers.rst.directives.images (optional)
missing module named roman - imported by docutils.writers.latex2e (optional), docutils.writers.manpage (optional)
missing module named 'kivy.core.text._text_pango' - imported by kivy.core.text.text_pango (top-level)
missing module named cv2 - imported by kivy.core.camera.camera_android (delayed), kivy.core.camera.camera_opencv (optional)
missing module named 'opencv.highgui' - imported by kivy.core.camera.camera_opencv (optional)
missing module named opencv - imported by kivy.core.camera.camera_opencv (optional)
missing module named gobject - imported by kivy.support (delayed, optional)
missing module named gi - imported by kivy.support (delayed, optional), kivy.core.clipboard.clipboard_gtk3 (top-level)
missing module named picamera - imported by kivy.core.camera.camera_picamera (top-level)
missing module named jnius - imported by kivy.metrics (delayed, conditional), kivy.app (delayed, conditional), kivy.core.clipboard.clipboard_android (top-level), kivy.core.audio.audio_android (top-level), kivy.core.camera.camera_android (top-level)
missing module named 'pygame.scrap' - imported by kivy.core.clipboard.clipboard_pygame (optional)
missing module named android_mixer - imported by kivy.core.audio.audio_pygame (conditional, optional)
missing module named 'android.mixer' - imported by kivy.core.audio.audio_pygame (conditional, optional)
missing module named enchant - imported by kivy.core.spelling.spelling_enchant (top-level)
missing module named kivy.lib.vidcore_lite.egl - imported by kivy.lib.vidcore_lite (top-level), kivy.core.window.window_egl_rpi (top-level)
missing module named kivy.lib.vidcore_lite.bcm - imported by kivy.lib.vidcore_lite (top-level), kivy.core.window.window_egl_rpi (top-level)
missing module named smb - imported by kivy.loader (delayed, conditional, optional)
missing module named AppKit - imported by kivy.core.spelling.spelling_osxappkit (top-level)
missing module named dbus - imported by kivy.core.clipboard.clipboard_dbusklipper (optional)
missing module named enchant - imported by kivy.core.spelling.spelling_enchant (top-level)
missing module named 'gi.repository' - imported by kivy.core.clipboard.clipboard_gtk3 (top-level), kivy.core.camera.camera_gi (top-level)
missing module named ffmpeg - imported by kivy.core.video.video_ffmpeg (optional)
missing module named 'ffpyplayer.pic' - imported by kivy.core.image.img_ffpyplayer (top-level)
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
missing module named Image - imported by kivy.core.image.img_pil (optional), docutils.parsers.rst.directives.images (optional)
missing module named pygments.formatters.BBCodeFormatter - imported by pygments.formatters (top-level), kivy.uix.codeinput (top-level)
missing module named ctags - imported by pygments.formatters.html (optional)
missing module named pygments.lexers.PrologLexer - imported by pygments.lexers (top-level), pygments.lexers.cplint (top-level)
missing module named chardet - imported by pygments.lexer (delayed, conditional, optional)
missing module named roman - imported by docutils.writers.latex2e (optional), docutils.writers.manpage (optional)
missing module named 'android.runnable' - imported by kivy.core.clipboard.clipboard_android (top-level)
missing module named 'kivy.core.text._text_pango' - imported by kivy.core.text.text_pango (top-level)
missing module named android_mixer - imported by kivy.core.audio.audio_pygame (conditional, optional)
missing module named 'android.mixer' - imported by kivy.core.audio.audio_pygame (conditional, optional)
missing module named ConfigParser - imported by kivy.config (optional)
missing module named usercustomize - imported by site (delayed, optional)
missing module named sitecustomize - imported by site (delayed, optional)
missing module named Queue - imported by kivy.compat (optional)
missing module named ios - imported by kivy.metrics (delayed, conditional), kivy.core.window (delayed)
missing module named trio - imported by kivy.clock (delayed, conditional)

View File

@ -155,11 +155,13 @@ imports:
&#8226; <a href="#heapq">heapq</a>
&#8226; <a href="#io">io</a>
&#8226; <a href="#keyword">keyword</a>
&#8226; <a href="#kivy.animation">kivy.animation</a>
&#8226; <a href="#kivy.app">kivy.app</a>
&#8226; <a href="#kivy.clock">kivy.clock</a>
&#8226; <a href="#kivy.core.window">kivy.core.window</a>
&#8226; <a href="#kivy.metrics">kivy.metrics</a>
&#8226; <a href="#kivy.properties">kivy.properties</a>
&#8226; <a href="#kivy.uix.behaviors">kivy.uix.behaviors</a>
&#8226; <a href="#kivy.uix.boxlayout">kivy.uix.boxlayout</a>
&#8226; <a href="#kivy.uix.button">kivy.uix.button</a>
&#8226; <a href="#kivy.uix.label">kivy.uix.label</a>
@ -462,7 +464,7 @@ imported by:
<a target="code" href="" type="text/plain"><tt>'org.python'</tt></a>
<span class="moduletype">MissingModule</span> <div class="import">
imported by:
<a href="#copy">copy</a>
<a href="#pickle">pickle</a>
&#8226; <a href="#xml.sax">xml.sax</a>
</div>
@ -6033,8 +6035,8 @@ imported by:
<a target="code" href="///C:/Program%20Files/WindowsApps/PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0/Lib/copy.py" type="text/plain"><tt>copy</tt></a>
<span class="moduletype">SourceModule</span> <div class="import">
imports:
<a href="#'org.python'">'org.python'</a>
&#8226; <a href="#copyreg">copyreg</a>
<a href="#copyreg">copyreg</a>
&#8226; <a href="#org">org</a>
&#8226; <a href="#types">types</a>
&#8226; <a href="#weakref">weakref</a>
@ -13194,7 +13196,6 @@ imports:
&#8226; <a href="#importlib">importlib</a>
&#8226; <a href="#importlib._bootstrap">importlib._bootstrap</a>
&#8226; <a href="#importlib._bootstrap_external">importlib._bootstrap_external</a>
&#8226; <a href="#importlib.machinery">importlib.machinery</a>
&#8226; <a href="#sys">sys</a>
&#8226; <a href="#warnings">warnings</a>
@ -13347,7 +13348,6 @@ imports:
imported by:
<a href="#ctypes.util">ctypes.util</a>
&#8226; <a href="#imp">imp</a>
&#8226; <a href="#importlib">importlib</a>
&#8226; <a href="#importlib.abc">importlib.abc</a>
&#8226; <a href="#inspect">inspect</a>
&#8226; <a href="#packaging.tags">packaging.tags</a>
@ -14465,7 +14465,8 @@ imports:
</div>
<div class="import">
imported by:
<a href="#kivy">kivy</a>
<a href="#app.py">app.py</a>
&#8226; <a href="#kivy">kivy</a>
&#8226; <a href="#kivy.core.window">kivy.core.window</a>
&#8226; <a href="#kivy.uix.accordion">kivy.uix.accordion</a>
&#8226; <a href="#kivy.uix.behaviors.touchripple">kivy.uix.behaviors.touchripple</a>
@ -15445,6 +15446,7 @@ imports:
&#8226; <a href="#kivy.clock">kivy.clock</a>
&#8226; <a href="#kivy.compat">kivy.compat</a>
&#8226; <a href="#kivy.core">kivy.core</a>
&#8226; <a href="#kivy.core.image._img_sdl2">kivy.core.image._img_sdl2</a>
&#8226; <a href="#kivy.event">kivy.event</a>
&#8226; <a href="#kivy.graphics.texture">kivy.graphics.texture</a>
&#8226; <a href="#kivy.logger">kivy.logger</a>
@ -15489,6 +15491,7 @@ imports:
<div class="import">
imported by:
<a href="#kivy">kivy</a>
&#8226; <a href="#kivy.core.image">kivy.core.image</a>
&#8226; <a href="#kivy.core.image.img_sdl2">kivy.core.image.img_sdl2</a>
</div>
@ -18361,7 +18364,8 @@ imports:
</div>
<div class="import">
imported by:
<a href="#kivy.core.window">kivy.core.window</a>
<a href="#app.py">app.py</a>
&#8226; <a href="#kivy.core.window">kivy.core.window</a>
&#8226; <a href="#kivy.uix.behaviors.button">kivy.uix.behaviors.button</a>
&#8226; <a href="#kivy.uix.behaviors.codenavigation">kivy.uix.behaviors.codenavigation</a>
&#8226; <a href="#kivy.uix.behaviors.compoundselection">kivy.uix.behaviors.compoundselection</a>
@ -21325,7 +21329,7 @@ imported by:
<a target="code" href="" type="text/plain"><tt>org</tt></a>
<span class="moduletype">MissingModule</span> <div class="import">
imported by:
<a href="#pickle">pickle</a>
<a href="#copy">copy</a>
</div>
@ -22131,14 +22135,14 @@ imported by:
<a target="code" href="///C:/Program%20Files/WindowsApps/PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0/Lib/pickle.py" type="text/plain"><tt>pickle</tt></a>
<span class="moduletype">SourceModule</span> <div class="import">
imports:
<a href="#_compat_pickle">_compat_pickle</a>
<a href="#'org.python'">'org.python'</a>
&#8226; <a href="#_compat_pickle">_compat_pickle</a>
&#8226; <a href="#_pickle">_pickle</a>
&#8226; <a href="#codecs">codecs</a>
&#8226; <a href="#copyreg">copyreg</a>
&#8226; <a href="#functools">functools</a>
&#8226; <a href="#io">io</a>
&#8226; <a href="#itertools">itertools</a>
&#8226; <a href="#org">org</a>
&#8226; <a href="#pprint">pprint</a>
&#8226; <a href="#re">re</a>
&#8226; <a href="#struct">struct</a>

BIN
dist/app.exe vendored

Binary file not shown.

View File

@ -65,7 +65,7 @@ def save_opened_to_iges():
doc_api5.SaveAsToAdditionFormat(full_path, save_params)
saved_files += 1
result.append(f"Успешно сохранено: {full_path}")
result.append(f"Путь: {full_path}")
except Exception as e:
result.append(f"Ошибка при обработке документа {i} ({doc.Name}): {str(e)}")