167 lines
5.8 KiB
Python
167 lines
5.8 KiB
Python
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()
|