import tkinter as tk from tkinter import ttk from tkinter import filedialog def calculate_dates(): """ Вычисляет предыдущую и следующую даты для заданной даты. """ try: day = int(day_entry.get()) month = int(month_entry.get()) if not (1 <= month <= 12): result_text.delete("1.0", tk.END) result_text.insert(tk.END, "Месяц должен быть от 1 до 12.") return days_in_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] if not (1 <= day <= days_in_month[month]): result_text.delete("1.0", tk.END) result_text.insert(tk.END, f"День должен быть от 1 до {days_in_month[month]} для месяца {month}.") return prev_day = day - 1 prev_month = month if prev_day == 0: prev_month -= 1 if prev_month == 0: result_text.delete("1.0", tk.END) result_text.insert(tk.END, "Введенная дата не может быть 1 января (по условию задачи).") return prev_day = days_in_month[prev_month] next_day = day + 1 next_month = month if next_day > days_in_month[month]: next_day = 1 next_month += 1 if next_month > 12: result_text.delete("1.0", tk.END) result_text.insert(tk.END, "Введенная дата не может быть 31 декабря (по условию задачи).") return result = f"Предыдущий день: {prev_day:02d}.{prev_month:02d}\n" result += f"Следующий день: {next_day:02d}.{next_month:02d}\n" result_text.delete("1.0", tk.END) result_text.insert(tk.END, result) filepath = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Текстовые файлы", "*.txt"), ("Все файлы", "*.*")]) if filepath: try: with open(filepath, "w") as f: f.write(result) result_text.insert(tk.END, f"\nРезультат сохранен в файл: {filepath}") except Exception as e: result_text.insert(tk.END, f"\nОшибка при сохранении в файл: {e}") except ValueError: result_text.delete("1.0", tk.END) result_text.insert(tk.END, "Введите корректные числа.") root = tk.Tk() root.title("Калькулятор дат") day_label = ttk.Label(root, text="День:") day_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W) day_entry = ttk.Entry(root) day_entry.grid(row=0, column=1, padx=5, pady=5, sticky=tk.E) month_label = ttk.Label(root, text="Месяц:") month_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W) month_entry = ttk.Entry(root) month_entry.grid(row=1, column=1, padx=5, pady=5, sticky=tk.E) calculate_button = ttk.Button(root, text="Рассчитать", command=calculate_dates) calculate_button.grid(row=2, column=0, columnspan=2, padx=5, pady=5) result_text = tk.Text(root, height=5, width=30) result_text.grid(row=3, column=0, columnspan=2, padx=5, pady=5) root.mainloop()