Задача 4.143. Зелинский Кирилл.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import tkinter as tk
  2. from tkinter import ttk
  3. from tkinter import filedialog
  4. def calculate_dates():
  5. """
  6. Вычисляет предыдущую и следующую даты для заданной даты.
  7. """
  8. try:
  9. day = int(day_entry.get())
  10. month = int(month_entry.get())
  11. if not (1 <= month <= 12):
  12. result_text.delete("1.0", tk.END)
  13. result_text.insert(tk.END, "Месяц должен быть от 1 до 12.")
  14. return
  15. days_in_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  16. if not (1 <= day <= days_in_month[month]):
  17. result_text.delete("1.0", tk.END)
  18. result_text.insert(tk.END, f"День должен быть от 1 до {days_in_month[month]} для месяца {month}.")
  19. return
  20. prev_day = day - 1
  21. prev_month = month
  22. if prev_day == 0:
  23. prev_month -= 1
  24. if prev_month == 0:
  25. result_text.delete("1.0", tk.END)
  26. result_text.insert(tk.END, "Введенная дата не может быть 1 января (по условию задачи).")
  27. return
  28. prev_day = days_in_month[prev_month]
  29. next_day = day + 1
  30. next_month = month
  31. if next_day > days_in_month[month]:
  32. next_day = 1
  33. next_month += 1
  34. if next_month > 12:
  35. result_text.delete("1.0", tk.END)
  36. result_text.insert(tk.END, "Введенная дата не может быть 31 декабря (по условию задачи).")
  37. return
  38. result = f"Предыдущий день: {prev_day:02d}.{prev_month:02d}\n"
  39. result += f"Следующий день: {next_day:02d}.{next_month:02d}\n"
  40. result_text.delete("1.0", tk.END)
  41. result_text.insert(tk.END, result)
  42. filepath = filedialog.asksaveasfilename(defaultextension=".txt",
  43. filetypes=[("Текстовые файлы", "*.txt"),
  44. ("Все файлы", "*.*")])
  45. if filepath:
  46. try:
  47. with open(filepath, "w") as f:
  48. f.write(result)
  49. result_text.insert(tk.END, f"\nРезультат сохранен в файл: {filepath}")
  50. except Exception as e:
  51. result_text.insert(tk.END, f"\nОшибка при сохранении в файл: {e}")
  52. except ValueError:
  53. result_text.delete("1.0", tk.END)
  54. result_text.insert(tk.END, "Введите корректные числа.")
  55. root = tk.Tk()
  56. root.title("Калькулятор дат")
  57. day_label = ttk.Label(root, text="День:")
  58. day_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
  59. day_entry = ttk.Entry(root)
  60. day_entry.grid(row=0, column=1, padx=5, pady=5, sticky=tk.E)
  61. month_label = ttk.Label(root, text="Месяц:")
  62. month_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
  63. month_entry = ttk.Entry(root)
  64. month_entry.grid(row=1, column=1, padx=5, pady=5, sticky=tk.E)
  65. calculate_button = ttk.Button(root, text="Рассчитать", command=calculate_dates)
  66. calculate_button.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
  67. result_text = tk.Text(root, height=5, width=30)
  68. result_text.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
  69. root.mainloop()