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()