This is the coding eror
runfile('C:Python Reminders app/Reminders.py', wdir='C:/Users/Python Reminders app')Exception in Tkinter callbackTraceback (most recent call last): File "C:\Usersanacond/a3\Lib\tkinter\__init__.py", line 1948, in __call__ return self.func(*args) ^^^^^^^^^^^^^^^^ File "c:\users\python reminders app\reminders.py", line 67, in <lambda> tk.Button(self.calendar_window, text="OK", command=lambda idx=index: self.set_selected_date(idx)).pack(pady=5) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "c:\users\python reminders app\reminders.py", line 82, in set_selected_date self.save_tasks() File "c:\users\python reminders app\reminders.py", line 31, in save_tasks for i, (goal_entry, deadline) in enumerate(self.goal_entries, start=1): ^^^^^^^^^^^^^^^^^^^^^^ File "C:\anaconda3\Lib\tkinter\__init__.py", line 1708, in cget return self.tk.call(self._w, 'cget', '-'+ key) ~~~~^~~~~TypeError: can only concatenate str (not "int") to strException in Tkinter callbackTraceback (most recent call last): File , line 1948, in __call__ return self.func(*args) ^^^^^^^^^^^^^^^^ File "c:, line 103, in done self.save_tasks() File , line 31, in save_tasks for i, (goal_entry, deadline) in enumerate(self.goal_entries, start=1): ^^^^^^^^^^^^^^^^^^^^^^ File , line 1708, in cget return self.tk.call(self._w, 'cget', '-'+ key) ~~~~^~~~~TypeError: can only concatenate str (not "int") to str
It is spose to save the data in an excel sheet but it gives this error and i have recheked and redone the save task but it doesn't fix anything. I know some of the extensions are unnecessary but i plane on using them in the future. the excel file they need to go in is task.xlsx. I am a beginner to coding thus why i am hear. If you need any more info for help ples ask I can provide that.
This is the code:
import tkinter as tk import tkcalendar as tkc from tkinter import messagebox, ttk from datetime import datetime, date, timedelta import threading from plyer import notification from openpyxl import Workbook, load_workbook class GoalApp: def __init__(self, master): self.master = master self.master.title("Daily Goals App") self.goal_entries = [] # List to store all goal entry widgets self.load_tasks() # Load tasks from Excel sheet self.create_widgets() def load_tasks(self): try: workbook = load_workbook("tasks.xlsx") sheet = workbook.active for row in sheet.iter_rows(values_only=True): goal_entry = row[0] deadline = row[1] self.goal_entries.append((goal_entry, deadline)) workbook.close() except FileNotFoundError: pass def save_tasks(self): workbook = Workbook() sheet = workbook.active for i, (goal_entry, deadline) in enumerate(self.goal_entries, start=1): sheet.cell(row=i, column=1, value=str(goal_entry)) # Convert to string sheet.cell(row=i, column=2, value=str(deadline)) # Convert to string workbook.save("tasks.xlsx") def create_widgets(self): self.goal_label = tk.Label(self.master, text="Enter Your Goals for Today:") self.goal_label.grid(row=0, column=0, sticky="w") self.add_goal_button = tk.Button(self.master, text="Add Goal", command=self.add_goal) self.add_goal_button.grid(row=0, column=1, padx=5) self.done_button = tk.Button(self.master, text="Done", command=self.done) self.done_button.grid(row=0, column=2, padx=5) def add_goal(self): current_row = len(self.goal_entries) + 1 goal_entry = tk.Entry(self.master) goal_entry.grid(row=current_row, column=0, pady=5) self.goal_entries.append(goal_entry) date_button = tk.Button(self.master, text="Select Date", command=lambda idx=current_row: self.select_date(idx)) date_button.grid(row=current_row, column=1, padx=5) # Add a label to display selected date next to the entry box selected_date_label = tk.Label(self.master, text="") selected_date_label.grid(row=current_row, column=2, padx=5) self.goal_entries[-1].selected_date_label = selected_date_label def select_date(self, index): self.calendar_window = tk.Toplevel(self.master) self.calendar_window.title("Select Deadline") self.calendar = tkc.Calendar(self.calendar_window, selectmode='day') self.calendar.pack(padx=10, pady=10) tk.Button(self.calendar_window, text="OK", command=lambda idx=index: self.set_selected_date(idx)).pack(pady=5) def set_selected_date(self, index): selected_date = self.calendar.get_date() if selected_date: try: date_obj = datetime.strptime(selected_date, "%m/%d/%y").date() formatted_date = date_obj.strftime("%Y-%m-%d") self.goal_entries[index - 1].deadline = formatted_date # Store the deadline in the goal entry widget self.goal_entries[index - 1].selected_date_label.config(text=selected_date) # Update the label with selected date self.calendar_window.destroy() except ValueError: messagebox.showerror("Error", "Invalid date format. Please select a date from the calendar.") # Save tasks to Excel sheet after updating self.save_tasks() def done(self): self.master.iconify() # Minimize the window for entry in self.goal_entries: goal = entry.get() deadline = getattr(entry, "deadline", None) if deadline: try: goal_date = datetime.strptime(deadline, "%Y-%m-%d").date() current_date = date.today() if current_date <= goal_date: days_until_deadline = (goal_date - current_date).days for i in range(1, days_until_deadline + 1): reminder_date = current_date + timedelta(days=i) threading.Timer(30 * i, self.remind, args=[goal]).start() except ValueError: messagebox.showerror("Error", "Invalid date format. Please use YYYY-MM-DD.") # Save tasks to Excel sheet after updating self.save_tasks() def remind(self, goal): # Calculate the time until the next day now = datetime.now() tomorrow = now.replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(days=1) time_until_tomorrow = (tomorrow - now).total_seconds() # Schedule the reminder for tomorrow threading.Timer(time_until_tomorrow, self.remind, args=[goal]).start() reminder_msg = f"Don't forget to: {goal}" notification.notify( title='Reminder', message=reminder_msg, app_name='Daily Goals App', timeout=10 # Set the notification timeout (in seconds) ) result = messagebox.askyesno("Reminder", reminder_msg +"\n\nDo you want to mark this task as done?") if result: messagebox.showinfo("Task Marked as Done", "You won't receive further reminders for this task.") return # Stop further reminders for this task def main(): root = tk.Tk() app = GoalApp(root) root.mainloop() if __name__ == "__main__": main()`