first commit
This commit is contained in:
166
main.py
Normal file
166
main.py
Normal 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()
|
||||
Reference in New Issue
Block a user