reworked with tkinter, UI improements needed

This commit is contained in:
Vic Sergeev 2026-05-09 19:44:16 +03:00
parent d3878857af
commit 3ae07ca289
26 changed files with 1488 additions and 1751 deletions

View file

@ -1,164 +1,152 @@
"""
InstructionsDialog - диалог с инструкцией по использованию
InstructionsDialog - диалог с инструкцией на английском (tkinter)
"""
from PySide6.QtWidgets import (
QDialog, QVBoxLayout, QHBoxLayout, QLabel, QTextEdit,
QPushButton, QScrollArea
)
from PySide6.QtCore import Qt
from PySide6.QtGui import QFont
import tkinter as tk
from tkinter import ttk
class InstructionsDialog(QDialog):
"""Диалог с подробной инструкцией пользователя"""
class InstructionsDialog(tk.Toplevel):
"""Диалог с подробной инструкцией пользователя на английском"""
def __init__(self, parent):
super().__init__(parent)
self.parent = parent
self.setWindowTitle("Инструкция по использованию")
self.setMinimumSize(700, 500)
self.resize(750, 550)
self.title("Instructions")
self.geometry("750x600")
self.minsize(700, 500)
self.transient(parent)
self.grab_set()
self._create_ui()
self._center_window()
def _create_ui(self):
"""Создаёт интерфейс диалога"""
layout = QVBoxLayout(self)
layout.setSpacing(10)
layout.setContentsMargins(15, 15, 15, 15)
# Main frame
main_frame = ttk.Frame(self, padding="15")
main_frame.pack(fill='both', expand=True)
# Заголовок
title_label = QLabel("Astro Session Watcher - Руководство пользователя")
title_font = QFont()
title_font.setPointSize(16)
title_font.setBold(True)
title_label.setFont(title_font)
title_label.setAlignment(Qt.AlignCenter)
layout.addWidget(title_label)
# Title
ttk.Label(main_frame, text="Astro Session Watcher - User Guide", font=('Segoe UI', 16, 'bold')).pack(pady=(0, 10))
# Текст инструкции
text_edit = QTextEdit()
text_edit.setReadOnly(True)
text_edit.setFont(QFont("Consolas", 10))
# Text with scrollbar
text_frame = ttk.Frame(main_frame)
text_frame.pack(fill='both', expand=True)
instructions = """
======================= ASTRO SESSION WATCHER =======================
scrollbar = ttk.Scrollbar(text_frame)
scrollbar.pack(side='right', fill='y')
Приложение автоматически отслеживает появление новых фотографий в указанной папке,
сортирует их по объектам съемки и ведет подробный лог всего процесса.
self.text_widget = tk.Text(text_frame, yscrollcommand=scrollbar.set, wrap='word',
bg='#1e1e1e', fg='#e0e0e0', font=('Consolas', 10))
self.text_widget.pack(fill='both', expand=True)
scrollbar.config(command=self.text_widget.yview)
📸 ДЛЯ ЧЕГО ЭТО НУЖНО?
# Instructions text
instructions = """======================= ASTRO SESSION WATCHER =======================
Когда вы снимаете астрономические объекты через EOS Utility или аналогичное ПО,
все фотографии сохраняются в одну папку. Astro Session Watcher помогает:
The application automatically tracks new photos in the selected folder,
sorts them by observation targets and maintains detailed logs.
Автоматически распределять снимки по папкам объектов
Вести лог каждой сессии
Не пропустить ни одного кадра при смене объекта
Хранить историю оборудования и небесных тел
📸 WHAT IS IT FOR?
🚀 КАК ЭТО РАБОТАЕТ?
Automatically distribute shots into target folders
Keep a log of each session
Don't miss a single frame when changing targets
Store equipment and celestial bodies history
1. Вы выбираете папку, куда камера сохраняет снимки
2. Приложение создает папку сессии: "AstroSession_ГГГГ-ММ-ДД"
3. Каждый объект съемки получает свою подпапку внутри папки сессии
4. Когда вы меняете объект (нажимаете "Новая цель"), все накопленные
в папке наблюдения файлы автоматически ПЕРЕМЕЩАЮТСЯ в папку предыдущего объекта
5. При завершении сессии оставшиеся файлы также перемещаются в папку последнего объекта
🚀 HOW IT WORKS?
📝 ПОШАГОВАЯ ИНСТРУКЦИЯ
1. Select the folder where your camera saves photos
2. The app creates a session folder: "AstroSession_YYYY-MM-DD"
3. Each target gets its own subfolder inside the session folder
4. When you change target (press "New Target"), all accumulated files are moved
5. When you end the session, remaining files are moved to the last target
1. ПЕРВЫЙ ЗАПУСК (НАСТРОЙКА)
📝 STEP-BY-STEP GUIDE
Откройте меню "Файл" "Оборудование" и добавьте ваши камеры и объективы
Откройте меню "Файл" "Небесные тела" и добавьте объекты для наблюдения
Все данные сохраняются автоматически в файлах настроек
1. FIRST LAUNCH (SETUP)
2. ЗАПУСК СЕССИИ
Go to "File" "Equipment" and add your cameras and lenses/telescopes
Go to "File" "Celestial Bodies" and add your observation targets
All data is saved automatically in config files
1. Нажмите "Обзор" и выберите папку, куда камера сохраняет снимки
2. Выберите камеру и объектив из выпадающих списков
3. Введите название цели (или выберите из списка небесных тел)
4. Нажмите "Начать отслеживание"
2. STARTING A SESSION
После запуска:
Статус изменится на "● ON AIR" с мигающим красным текстом
Кнопка "Новая цель" начнет мигать красным контуром
В папке наблюдения создастся папка "AstroSession_дата"
Внутри - папка с вашей первой целью
1. Click "Browse" and select the folder where your camera saves photos
2. Select camera and lens/telescope from dropdowns
3. Enter target name (or select from celestial bodies list)
4. Click "▶ Start Tracking"
3. СМЕНА ОБЪЕКТА ВО ВРЕМЯ СЕССИИ
After launch:
Status changes to "● ON AIR" with blinking
"New Target" button becomes active
Session folder "AstroSession_date" is created
Inside - folder with your first target
Когда вы заканчиваете снимать один объект и переходите к другому:
3. CHANGING TARGET DURING SESSION
1. Нажмите кнопку "Новая цель" (или Ctrl+Shift+N)
2. Введите название нового объекта
3. Приложение автоматически:
Переместит все накопленные файлы в папку предыдущего объекта
Создаст новую папку для следующего объекта
Сбросит счетчик файлов
Продолжит отслеживание
1. Click "New Target" button (or Ctrl+Shift+N)
2. Enter new target name
3. The app automatically moves all accumulated files to the previous target
4. Creates new folder for the next target
5. Resets file counter
6. Continues tracking
💡 ВАЖНО: Если перед сменой объекта в папке наблюдения уже есть файлы,
они НЕ ПОТЕРЯЮТСЯ - все будут перемещены в папку текущего объекта!
💡 IMPORTANT: If there are files in the watch folder before changing target,
they will NOT be lost - all will be moved!
4. ЗАВЕРШЕНИЕ СЕССИИ
4. ENDING A SESSION
1. Нажмите "Остановить" (или Ctrl+X)
2. Приложение:
Переместит все оставшиеся файлы в папку последнего объекта
Запишет итоговый лог сессии
Покажет диалог с предложением открыть папку сессии
Восстановит интерфейс для новой сессии
1. Click "■ Stop" (or Ctrl+X)
2. The app moves all remaining files to the last target
3. Writes final session log
4. Shows dialog with option to open session folder
5. Restores interface for new session
ГОРЯЧИЕ КЛАВИШИ
HOTKEYS
Ctrl + O Выбрать папку наблюдения
Ctrl + E Управление оборудованием
Ctrl + B Управление небесными телами
Ctrl + S Начать сессию
Ctrl + X Остановить сессию
Ctrl + F Открыть папку текущей сессии
Ctrl + Shift+N Создать новый объект
F1 О программе
F2 Эта инструкция
Ctrl + O Select watch folder
Ctrl + E Equipment management
Ctrl + B Celestial bodies management
Ctrl + S Start session
Ctrl + X Stop session
Ctrl + F Open current session folder
Ctrl + Shift+N Create new target
F1 About
F2 This instruction
🔧 ФАЙЛЫ НАСТРОЕК
🔧 CONFIG FILES
📄 astro_settings.json камеры, объективы, последняя папка
📄 celestial_bodies.json список небесных тел
📄 astro_settings.json cameras, lenses, last folder
📄 celestial_bodies.json list of celestial bodies
Все файлы хранятся в папке с программой. Вы можете редактировать их вручную.
All files are stored in the program folder. You can edit them manually.
📧 ТЕХНИЧЕСКАЯ ПОДДЕРЖКА
Разработчик: Vic Sergeev
Версия: 0.3.0-alpha
При обнаружении ошибок или для предложений по улучшению:
Сообщите разработчику
Приложите файлы логов (SessionLog.txt, ObjectLog.txt)
📧 TECHNICAL SUPPORT
Text me: norvicdev@gmail.com
Developer: Vic Sergeev
Version: 0.4.0-alpha
"""
text_edit.setText(instructions)
layout.addWidget(text_edit)
self.text_widget.insert('1.0', instructions)
self.text_widget.config(state='disabled')
# Кнопка закрытия
close_layout = QHBoxLayout()
close_layout.addStretch()
# Close button
ttk.Button(main_frame, text="Close", command=self.destroy).pack(pady=10)
close_btn = QPushButton("Закрыть")
close_btn.clicked.connect(self.accept)
close_layout.addWidget(close_btn)
layout.addLayout(close_layout)
def _center_window(self):
self.update_idletasks()
x = self.parent.winfo_x() + (self.parent.winfo_width() // 2) - (self.winfo_width() // 2)
y = self.parent.winfo_y() + (self.parent.winfo_height() // 2) - (self.winfo_height() // 2)
self.geometry(f'+{x}+{y}')