first commit

This commit is contained in:
2026-05-26 16:26:04 +03:00
parent c94a6b6884
commit da329d6272
7 changed files with 309 additions and 1 deletions

166
main.py Normal file
View File

@@ -0,0 +1,166 @@
import tkinter as tk
from tkinter import filedialog, messagebox
import os
from prog import calculate_anomaly
# Меню выбора файла GSM-19, устанавливает пусть к файлу в окошко
def select_gsm_file(entry_var):
filetypes = (
("Файлы GSM-19", "*.g"),
("Все файлы", "*.*")
)
filename = filedialog.askopenfilename(
title="Выберите файл градиентометра",
filetypes=filetypes
)
if filename:
entry_var.set(filename)
status_label.config(text=f"Выбран файл: {os.path.basename(filename)}", fg="blue")
# Меню выбора файла базовой станции, устанавливает пусть к файлу в окошко
def select_base_file(entry_var):
filetypes = (
("Текстовые файлы", "*.txt"),
("Все файлы", "*.*")
)
filename = filedialog.askopenfilename(
title="Выберите файл базовой станции",
filetypes=filetypes
)
if filename:
entry_var.set(filename)
status_label.config(text=f"Выбран файл: {os.path.basename(filename)}", fg="blue")
# Обработка введенных файлов
def process_files():
"""Основная функция обработки файлов"""
# Получаем пути к файлам
gsm_file = file1_path.get()
base_file = file2_path.get()
# Проверяем, что оба файла выбраны
if not gsm_file or not base_file:
messagebox.showwarning("Внимание", "Пожалуйста, выберите оба файла!")
return
# Проверяем, что файлы существуют
if not os.path.exists(gsm_file):
messagebox.showerror("Ошибка", f"Файл не найден:\n{gsm_file}")
return
if not os.path.exists(base_file):
messagebox.showerror("Ошибка", f"Файл не найден:\n{base_file}")
return
#
try:
# Вызываем логику обработки
result = calculate_anomaly(gsm_file, base_file)
result.to_csv("result.csv", index=False)
# Показываем результат
messagebox.showinfo("Успех", f"Обработка завершена!")
status_label.config(text="Обработка завершена успешно", fg="green")
except Exception as e:
messagebox.showerror("Ошибка", f"Произошла ошибка при обработке:\n{str(e)}")
status_label.config(text="Ошибка при обработке", fg="red")
finally:
# Возвращаем интерфейс в исходное состояние
process_btn.config(state="normal", text="Обработать")
# Создаём главное окно
root = tk.Tk()
root.title("Обработчик файлов")
root.geometry("550x210")
root.resizable(False, False)
# Переменные для хранения путей к файлам
file1_path = tk.StringVar()
file2_path = tk.StringVar()
# === Рамка для первого файла ===
frame1 = tk.Frame(root)
frame1.pack(pady=20, padx=20, fill="x")
# Надпись "Файл градиентометра"
tk.Label(
frame1, # В каком окне
text="Файл градиентометра:", # Текст надписи
width=20, # Ширина
anchor="w" # Выравнивание надписи слева по центру
) \
.pack(side="left") # Прижим к левому краю
# Окошко ввода для градиентометра
entry1 = tk.Entry(
frame1, # В каком окне
textvariable=file1_path, # Надпись внутри окошка
width=50 # Ширина окошка
)
entry1.pack(
side="left", # Выравнивание слева
padx=5 # Отступ по горизонтали
)
# Кнопка для выбора файла для окошка
tk.Button(
frame1, # В каком окне
text="Обзор", # Текст кнопки
command=lambda: select_gsm_file( # Команда по нажатию
file1_path
)
) \
.pack(side="left") # Выравнивание по левому краю
# === Рамка для второго файла ===
frame2 = tk.Frame(root)
frame2.pack(pady=10, padx=20, fill="x")
tk.Label(
frame2,
text="Файл базовой станции:",
width=20,
anchor="w"
) \
.pack(side="left")
entry2 = tk.Entry(
frame2,
textvariable=file2_path,
width=50
)
entry2.pack(
side="left",
padx=5
)
tk.Button(
frame2,
text="Обзор",
command=lambda: select_base_file(
file2_path
)
) \
.pack(side="left")
# === Кнопка обработки ===
process_btn = tk.Button(
root,
text="Обработать",
command=process_files,
padx=20,
pady=5
)
process_btn.pack(pady=20)
# === Статусная строка ===
status_label = tk.Label(root, text="Готов к работе", fg="gray")
status_label.pack(pady=5)
# Запускаем приложение
root.mainloop()