Files
gsm-19_gradiometr/main.py
2026-05-26 16:26:04 +03:00

167 lines
5.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()