روبیکا من : https://rubika.ir/artinkarimian3 سایت من : https://sites.google.com/view/artin-karimian
پروژه پنجم : ثبت رویداد

خب برای این پروژه وسایلی که نیاز دارید :
برنامه پایتون
کتابخانه tkinter
کتابخانه json
کتابخانه os

کتابخانه های لازم را نصب کنید و کد زیر را دخل آن وارد کنید.
import tkinter as tk
from tkinter import messagebox
import json
import os
DATA_FILE = "event_planner_data.json"
# مقادیر پیشفرض جدید
DEFAULT_YEAR = "1405"
DEFAULT_MONTH = "01"
DEFAULT_DAY = "30"
DEFAULT_HOUR = "05"
DEFAULT_MINUTE = "37"
# مقدار پیشفرض برای توضیحات رویداد (میتوانید این را هم تغییر دهید)
DEFAULT_EVENT_DESCRIPTION = "" # یا مثلاً "یک رویداد جدید"
def load_events():
if os.path.exists(DATA_FILE):
try:
with open(DATA_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
except json.JSONDecodeError:
messagebox.showerror("خطا در بارگذاری", "فایل داده خراب است. یک فایل جدید ایجاد میشود.")
return []
except Exception as e:
messagebox.showerror("خطا", f"خطا در بارگذاری فایل: {e}")
return []
return []
def save_events(events):
try:
with open(DATA_FILE, 'w', encoding='utf-8') as f:
json.dump(events, f, ensure_ascii=False, indent=4)
except Exception as e:
messagebox.showerror("خطا در ذخیره", f"خطا در ذخیره فایل: {e}")
def add_event():
year = year_entry.get()
month = month_entry.get()
day = day_entry.get()
hour = hour_entry.get()
minute = minute_entry.get()
event_desc = event_entry.get() # توضیحات رویداد
if not all([year, month, day, hour, minute, event_desc]):
messagebox.showwarning("ورودی ناقص", "لطفاً تمام فیلدهای تاریخ، زمان و رویداد را پر کنید.")
return
# اعتبارسنجی اولیه (بدون منطق کامل شمسی)
try:
int_year, int_month, int_day, int_hour, int_minute = int(year), int(month), int(day), int(hour), int(minute)
if not (1 <= int_month <= 12 and 1 <= int_day <= 31 and 0 <= int_hour <= 23 and 0 <= int_minute <= 59):
messagebox.showwarning("ورودی نامعتبر", "لطفاً تاریخ و زمان معتبر وارد کنید.")
return
except ValueError:
messagebox.showwarning("ورودی نامعتبر", "سال، ماه، روز، ساعت و دقیقه باید اعداد صحیح باشند.")
return
new_event = {
"year": year,
"month": month,
"day": day,
"hour": hour,
"minute": minute,
"description": event_desc
}
events.append(new_event)
save_events(events)
update_event_list()
# پاک کردن فیلد توضیحات رویداد و بازگرداندن به مقدار پیشفرض
event_entry.delete(0, tk.END)
event_entry.insert(0, DEFAULT_EVENT_DESCRIPTION) # اضافه شدن این خط
# بازگرداندن مقادیر پیشفرض برای تاریخ و زمان
set_default_values()
def update_event_list():
event_listbox.delete(0, tk.END)
for i, event in enumerate(events):
event_str = f"[{event['year']}/{event['month']}/{event['day']} {event['hour']}:{event['minute']}] {event['description']}"
event_listbox.insert(tk.END, event_str)
def delete_event():
selected_index = event_listbox.curselection()
if not selected_index:
messagebox.showwarning("انتخاب نشده", "لطفاً رویدادی را برای حذف انتخاب کنید.")
return
if messagebox.askyesno("تأیید حذف", "آیا از حذف این رویداد مطمئن هستید؟"):
index_to_delete = selected_index[0]
del events[index_to_delete]
save_events(events)
update_event_list()
def set_default_values():
# ابتدا فیلدهای تاریخ و زمان را پاک میکنیم سپس مقادیر پیشفرض را وارد میکنیم
year_entry.delete(0, tk.END)
year_entry.insert(0, DEFAULT_YEAR)
month_entry.delete(0, tk.END)
month_entry.insert(0, DEFAULT_MONTH)
day_entry.delete(0, tk.END)
day_entry.insert(0, DEFAULT_DAY)
hour_entry.delete(0, tk.END)
hour_entry.insert(0, DEFAULT_HOUR)
minute_entry.delete(0, tk.END)
minute_entry.insert(0, DEFAULT_MINUTE)
# اضافه شدن تنظیم مقدار پیشفرض برای توضیحات رویداد
event_entry.delete(0, tk.END)
event_entry.insert(0, DEFAULT_EVENT_DESCRIPTION)
# ----- GUI Setup -----
root = tk.Tk()
root.title("Event Planner")
root.geometry("600x500") # اندازه پنجره
# ----- Frame for Event Input -----
input_frame = tk.Frame(root, padx=10, pady=10)
input_frame.pack(pady=10, fill=tk.X)
tk.Label(input_frame, text="سال:").grid(row=0, column=0, sticky=tk.W)
year_entry = tk.Entry(input_frame, width=5)
year_entry.grid(row=0, column=1, padx=5)
tk.Label(input_frame, text="ماه:").grid(row=0, column=2, sticky=tk.W)
month_entry = tk.Entry(input_frame, width=3)
month_entry.grid(row=0, column=3, padx=5)
tk.Label(input_frame, text="روز:").grid(row=0, column=4, sticky=tk.W)
day_entry = tk.Entry(input_frame, width=3)
day_entry.grid(row=0, column=5, padx=5)
tk.Label(input_frame, text="ساعت:").grid(row=1, column=0, sticky=tk.W)
hour_entry = tk.Entry(input_frame, width=3)
hour_entry.grid(row=1, column=1, padx=5)
tk.Label(input_frame, text="دقیقه:").grid(row=1, column=2, sticky=tk.W)
minute_entry = tk.Entry(input_frame, width=3)
minute_entry.grid(row=1, column=3, padx=5)
tk.Label(input_frame, text="رویداد:").grid(row=2, column=0, sticky=tk.W)
event_entry = tk.Entry(input_frame, width=40)
event_entry.grid(row=2, column=1, columnspan=5, pady=5, sticky=tk.W)
add_button = tk.Button(input_frame, text="افزودن رویداد", command=add_event)
add_button.grid(row=3, column=0, columnspan=6, pady=10)
# ----- Frame for Event List -----
list_frame = tk.Frame(root, padx=10, pady=10)
list_frame.pack(pady=10, fill=tk.BOTH, expand=True)
event_listbox = tk.Listbox(list_frame, height=10, width=70, font=("Arial", 10))
event_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
scrollbar = tk.Scrollbar(list_frame)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
event_listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=event_listbox.yview)
# ----- Buttons -----
button_frame = tk.Frame(root, pady=10)
button_frame.pack(fill=tk.X)
delete_button = tk.Button(button_frame, text="حذف رویداد انتخاب شده", command=delete_event)
delete_button.pack(side=tk.LEFT, padx=10)
# ----- Initialization -----
events = load_events()
set_default_values() # تنظیم مقادیر پیشفرض هنگام شروع
update_event_list()
root.mainloop()
خب کد را اجرا کنید ، صفحه پایین را می بینید.

اینم از این پروژه الان اگر اطلاعات را وارد کنیم و افزودن را بزنیم و دوباره بریم توی برنامه اطلاعات را نشان میدهد .
برای دانلود همین پایتون یا فایل تبدیل شده به برنامه روی نوشته لینک بزنید و 15ثانیه صبر کنید و فایل را دریافت کنید .
اگر ایده یا پروژه ای دیگری میخواهید در نظر ها بنویسید .
مطلبی دیگر از این انتشارات
ساخت یک موتور جست و جو با پایتون
مطلبی دیگر از این انتشارات
نصب کتابخانه آرتین کریمیان
مطلبی دیگر از این انتشارات
پروژه دوم پایتون : ساعت جهانی