Apr-09-2020, 05:20 AM
My code is really long with multiple programs running at the same time. Is it really a must to use GPIO.cleanup()? And if it is, where should I use it in my code?
from tkinter import * import RPi.GPIO as GPIO from tkinter import ttk from tkinter import font as tkfont import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(17,GPIO.OUT)#motor GPIO.setup(27,GPIO.OUT)#LED GPIO.setup(26,GPIO.OUT)#buzzer GPIO.output (17, False) GPIO.output (27, False) GPIO.output (26, False) root = Tk() root.geometry("2000x1900") root.config(bg="light blue") root.frame = Frame(root) label = Label(root, bg = "light blue", fg = "dark blue", font=("Arial 50 italic")) label.place(relx=0.48, rely = 0.32, anchor = CENTER) title_label=Label(root, text="MEDICATION SCHEDULE", font = "Arial 80 ",bg="light grey",fg='black',relief='solid',bd=8) title_label.place(relx=0.47, rely = 0.16,anchor = CENTER) root.title("Smart Medicine Box") alarm1_input_compare= '' alarm2_input_compare= '' alarm3_input_compare = '' AFTER=None def set_alarm1(): global alarm1_input_compare alarm1_input_compare=comboHour1.get()+":"+comboMin1.get()+":00"+comboAM1.get() alarm1_input_display=comboHour1.get()+":"+comboMin1.get()+" "+comboAM1.get() alarm1_label.config(text="Time Set: "+alarm1_input_display) alarm1_label.place(relx=0.135, rely = 0.5, anchor = NW) print(alarm1_input_compare) comboHour1.place_forget() comboMin1.place_forget() comboAM1.place_forget() colon1_label.place_forget() morning_alarm_button.place_forget() change_morn_alarm_button.place(relx=0.2, rely = 0.58, anchor = CENTER) def change_alarm1(): change_morn_alarm_button.place_forget() morning_alarm_button.place(relx=0.198, rely = 0.58, anchor = CENTER) comboHour1.place(relx=0.16, rely = 0.52, anchor = CENTER) comboMin1.place(relx=0.2, rely = 0.52, anchor = CENTER) comboAM1.place(relx=0.235, rely = 0.52, anchor = CENTER) alarm1_label.place_forget() def set_alarm2(): global alarm2_input_compare alarm2_input_compare=comboHour2.get()+":"+comboMin2.get()+":00"+comboAM2.get() alarm2_input_display=comboHour2.get()+":"+comboMin2.get()+" "+comboAM2.get() alarm2_label.config(text="Time Set: "+alarm2_input_display) alarm2_label.place(relx=0.38, rely = 0.5, anchor = NW) print(alarm2_input_compare) comboHour2.place_forget() comboMin2.place_forget() comboAM2.place_forget() noon_alarm_button.place_forget() colon2_label.place_forget() change_aft_alarm_button.place(relx=0.45, rely = 0.58, anchor = CENTER) def change_alarm2(): change_aft_alarm_button.place_forget() noon_alarm_button.place(relx=0.45, rely = 0.58, anchor = CENTER) comboHour2.place(relx=0.415, rely = 0.52, anchor = CENTER) comboMin2.place(relx=0.46, rely = 0.52, anchor = CENTER) comboAM2.place(relx=0.495, rely = 0.52, anchor = CENTER) alarm2_label.place_forget() def set_alarm3(): global alarm3_input_compare alarm3_input_compare=comboHour3.get()+":"+comboMin3.get()+":00"+comboAM3.get() alarm3_input_display=comboHour3.get()+":"+comboMin3.get()+" "+comboAM3.get() alarm3_label.config(text="Time Set: "+alarm3_input_display) alarm3_label.place(relx=0.64, rely = 0.5, anchor = NW) print(alarm3_input_compare) comboHour3.place_forget() comboMin3.place_forget() comboAM3.place_forget() colon3_label.place_forget() change_even_alarm_button.place(relx=0.705, rely = 0.58, anchor = CENTER) def change_alarm3(): change_even_alarm_button.place_forget() even_alarm_button.place(relx=0.705, rely = 0.58, anchor = CENTER) comboHour3.place(relx=0.67, rely = 0.52, anchor = CENTER) comboMin3.place(relx=0.718, rely = 0.52, anchor = CENTER) comboAM3.place(relx=0.753, rely = 0.52, anchor = CENTER) alarm3_label.place_forget() def add_medication1(): noon_med_button["state"]='disabled' even_med_button["state"]='disabled' morn_med_Text.place(relx=0.21, rely = 0.85, anchor = CENTER) morn_med_label.place_forget() morn_med_button.place_forget() confirm_button1.place(relx=0.105, rely = 0.85, anchor = CENTER) keyboard(1) def confirm1(): noon_med_button["state"]='normal' even_med_button["state"]='normal' morn_med=morn_med_Text.get("1.0",END) morn_med_label.place(relx=0.21, rely = 0.88, anchor = CENTER) morn_med_Text.place_forget() confirm_button1.place_forget() morn_med_button.place(relx=0.21, rely = 0.72, anchor = CENTER) morn_med_label.config(text=morn_med) root.frame.grid_forget() def add_medication2(): morn_med_button["state"]='disabled' even_med_button["state"]='disabled' noon_med_Text.place(relx=0.45, rely = 0.845, anchor = CENTER) noon_med_button.place_forget() noon_med_label.place_forget() confirm_button2.place(relx=0.345, rely = 0.85, anchor = CENTER) keyboard(2) def confirm2(): morn_med_button["state"]='normal' even_med_button["state"]='normal' noon_med=noon_med_Text.get("1.0",END) noon_med_label.place(relx=0.46, rely = 0.88,anchor = CENTER) noon_med_Text.place_forget() confirm_button2.place_forget() noon_med_button.place(relx=0.458, rely = 0.72, anchor = CENTER) noon_med_label.config(text=noon_med) root.frame.grid_forget() def add_medication3(): noon_med_button["state"]='disabled' morn_med_button["state"]='disabled' even_med_Text.place(relx=0.72, rely = 0.85, anchor = CENTER) even_med_button.place_forget() even_med_label.place_forget() confirm_button3.place(relx=0.615, rely = 0.85, anchor = CENTER) keyboard(3) def confirm3(): noon_med_button["state"]='normal' morn_med_button["state"]='normal' even_med=even_med_Text.get("1.0",END) even_med_label.place(relx=0.72, rely = 0.88,anchor = CENTER) even_med_Text.place_forget() confirm_button3.place_forget() even_med_button.place(relx=0.72, rely = 0.72, anchor = CENTER) even_med_label.config(text=even_med) root.frame.grid_forget() def keyboard(number): root.frame = Frame(bg="light blue") root.frame.grid() def select(value): if number==1: cursor_position=morn_med_Text.index(INSERT) if value == "Clear": morn_med_Text.delete(1.0,END) elif value == "Enter": morn_med_Text.insert(INSERT,'\n') elif value=="Bkspce": text=morn_med_Text.get(1.0,cursor_position) newtext=text[:-1] morn_med_Text.delete(1.0,cursor_position) morn_med_Text.insert(INSERT,newtext) else: morn_med_Text.insert(cursor_position, value) elif number==2: cursor_position=noon_med_Text.index(INSERT) if value == "Clear": noon_med_Text.delete(1.0,END) elif value == "Enter": noon_med_Text.insert(INSERT,'\n') elif value=="Bkspce": text=noon_med_Text.get(1.0,cursor_position) newtext=text[:-1] noon_med_Text.delete(1.0,cursor_position) noon_med_Text.insert(INSERT,newtext) else: noon_med_Text.insert(cursor_position,value) else: cursor_position=even_med_Text.index(INSERT) if value == "Clear": even_med_Text.delete(1.0,END) elif value == "Enter": even_med_Text.insert(INSERT,'\n') elif value=="Bkspce": text=even_med_Text.get(1.0,cursor_position) newtext=text[:-1] even_med_Text.delete(1.0,cursor_position) even_med_Text.insert(INSERT,newtext) else: even_med_Text.insert(cursor_position, value) buttons=[ '~','1','2','3','4','5','6','7','8','9','0','Bkspce', 'q','w','e','r','t','y','u','i','o','p','-','"', 'a','s','d','f','g','h','j','k','l','+','Enter','Clear', 'z','x','c','v','b','n','m',',','.','/','(',')', ' ' ] label1=Label(root.frame,text='\n\n\n\n\n\n\n\n') label1.grid(row=7,columnspan=1) label2=Label(root.frame,text='\n\n\n\n\n\n\n') label2.grid(row=15,columnspan=1) varRow=9 varColumn=0 for button in buttons: command=lambda x=button: select(x) if button!=" ": Button(root.frame,text=button,width=7,bg="black",fg="white", activebackground="white",activeforeground="black",relief='raised',padx=0, pady=7,bd=4,command=command,font=("Arial",28 )).grid(row=varRow,column=varColumn) if button==" ": Button(root.frame,text=button,width=80,bg="black",fg="white", activebackground="white",activeforeground="black",relief='raised',padx=4, pady=7,bd=8,command=command,font=("Arial",15 )).grid(row=13,columnspan=17) varColumn+=1 if varColumn>11 and varRow==9: varColumn=0 varRow+=1 if varColumn>11 and varRow==10: varColumn=0 varRow+=1 if varColumn>11 and varRow==11: varColumn=0 varRow+=1 def alarm_message(): root.frame = Frame(bg="red") root.frame.grid() change_colour() title_message=Label(root.frame, text="TAKE YOUR \n MEDICATION ", font = "Arial 150 ",fg='white',bg='black') title_message.grid(row=0,column=0,padx=80,pady=300) taken_button = Button(root.frame, text="Done",command=button_pressed, font=("Arial", 80),bd=10) taken_button.grid(row=0,column=1,padx=45,pady=100) def change_colour(): global AFTER colour1=root.frame.cget("bg") if colour1=="red": GPIO.output(27, True) root.frame.config(bg="blue") if colour1=="blue": GPIO.output(27, False) root.frame.config(bg="red") AFTER=root.after(1000,change_colour) root.after(1000,change_colour) def button_pressed(): root.frame.grid_forget() print('Button pressed') root.after_cancel(AFTER) GPIO.output (27, False) GPIO.output (26, False) time.sleep(0.2) def tick(): current_time_display = time.strftime("%I:%M %p, %d %B %Y, %A", time.localtime()) current_time_compare = time.strftime("%I:%M:%S%p", time.localtime()) label.config(text=current_time_display) if (alarm1_input_compare == current_time_compare) or (alarm2_input_compare== current_time_compare) or (alarm3_input_compare== current_time_compare): root.frame.grid_forget() root.after_cancel(AFTER) print("1on") #GPIO.output (27, True)#LED GPIO.output (26, True)#buzzer GPIO.output (17, True)#motor time.sleep(5) GPIO.output (17, False) alarm_message() #updates label every 200ms label.after(200, tick) #morning combobox comboHour1= ttk.Combobox(root, width = 3, values=["01","02","03","04","05","06","07","08","09","10","11","12"],font=("Arial", 20)) comboMin1 = ttk.Combobox(root, width = 3,values=["00","01","02","03","04","05","06","07","08","09", "10","11","12","13","14" ,"15","16","17","18","19","20","21","22","23","24", "25", "26","27","28","29","30","31","32","33","34", "35","36","37", "40","41","42","43" ,"44","45","47","48", "50","51","54", "55","57"],font=("Arial", 20)) comboHour1.current(0) comboMin1.current(0) comboAM1 = ttk.Combobox(root, width = 3,values=["AM","PM"],font=("Arial", 20)) comboAM1.current(0) #set font for "Morning/Afternoon/Evening" labels fontlabel=tkfont.Font(family='Arial', size=46,weight=tkfont.BOLD,underline=1) #"Morning" label alarm1_label1=Label(root, text="Morning", font = fontlabel,bg="light blue") alarm1_label1.place(relx=0.135, rely = 0.4, anchor = NW) #time set label alarm1_label=Label(root,bg="light blue",font="Arial 20 italic bold",fg="maroon") #colon in between morning combobox colon1_label=Label(root, text=":", font = "Arial 20",bg="light blue") colon1_label.place(relx=0.176, rely = 0.504, anchor = NW) #button to set morning alarm morning_alarm_button = Button(root, text="Set Morning Alarm", command=set_alarm1,font=("Arial", 18)) change_morn_alarm_button = Button(root, text="Change Morning Alarm", command=change_alarm1,font=("Arial", 18)) change_alarm1() #afternoon combobox comboHour2= ttk.Combobox(root, width = 3, values=["01","02","03","04","05","06","07","08","09","10","11","12"],font=("Arial", 20)) comboMin2 = ttk.Combobox(root, width = 3,values=["00", "05", "10", "15", "20", "22","23","24","25", "30", "35", "40", "45", "50", "55"],font=("Arial", 20)) comboHour2.current(0) comboMin2.current(0) comboAM2 = ttk.Combobox(root, width = 3,values=["AM","PM"],font=("Arial", 20)) comboAM2.current(0) #"Afternoon" label alarm2_label1=Label(root, text="Afternoon", font = fontlabel,bg="light blue") alarm2_label1.place(relx=0.37, rely = 0.4, anchor = NW) #colon in between afternoon combobox colon2_label=Label(root, text=":", font = "Arial 20 ",bg="light blue") colon2_label.place(relx=0.435, rely = 0.504, anchor = NW) alarm2_label=Label(root, bg="light blue",font="Arial 20 bold italic",fg="maroon") #button to set afternoon alarm noon_alarm_button = Button(root, text="Set Afternoon Alarm", command=set_alarm2, font=("Arial", 18)) change_aft_alarm_button = Button(root, text="Change Afternoon Alarm", command=change_alarm2,font=("Arial", 18)) change_alarm2() #evening combobox comboHour3= ttk.Combobox(root, width = 3, values=["01","02","03","04","05","06","07","08","09","10","11","12"],font=("Arial", 20)) comboMin3 = ttk.Combobox(root, width = 3,values=["00", "05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55"],font=("Arial", 20)) comboHour3.current(0) comboMin3.current(0) comboAM3 = ttk.Combobox(root, width = 3,values=["AM","PM"],font=("Arial", 20)) comboAM3.current(0) #"Evening" label alarm3_label1=Label(root, text="Evening", font = fontlabel,bg="light blue") alarm3_label1.place(relx=0.64, rely = 0.4, anchor = NW) alarm3_label=Label(root, bg="light blue",font="Arial 20 bold italic",fg="maroon") #colon in between evening combobox colon3_label=Label(root, text=":", font = "Times 20",bg="light blue") colon3_label.place(relx=0.69, rely = 0.504, anchor = NW) #button to set evening alarm even_alarm_button = Button(root, text="Set Evening Alarm", command=set_alarm3, font=("Arial", 18)) change_even_alarm_button = Button(root, text="Change Evening Alarm", command=change_alarm3,font=("Arial", 18)) change_alarm3() #Textbox to input morning medications morn_med_Text=Text(root,width=18,height=8,font=("Arial", 20)) morn_med_label=Label(root,bg="light blue", font=("Arial",20)) morn_med_button = Button(root, text="Add Medication(s)", command=add_medication1, font=("Arial", 18),state='normal') morn_med_button.place(relx=0.21, rely = 0.72, anchor = CENTER) confirm_button1=Button(root, text="Confirm", command=confirm1, font=("Arial", 18)) med_label1=Label(root, text="Morning Medication(s): ",bg="light blue", font=("Arial 18 bold")) med_label1.place(relx=0.14, rely = 0.66) #Textbox to input afternoon medications noon_med_Text=Text(root,width=18,height=8,font=("Arial", 20)) noon_med_label=Label(root,bg="light blue", font=("Arial",20 )) #button to input medications;converts input in textbox to label noon_med_button = Button(root, text="Add Medication(s)", command=add_medication2, font=("Arial", 18),state='normal') noon_med_button.place(relx=0.458, rely = 0.72, anchor = CENTER) confirm_button2=Button(root, text="Confirm", command=confirm2, font=("Arial", 18)) med_label2=Label(root, text="Afternoon Medication(s): ",bg="light blue", font=("Arial 18 bold")) med_label2.place(relx=0.385, rely = 0.66) even_med_label=Label(root, bg="light blue", font=("Arial",20 )) #Textbox to input evening medications even_med_Text=Text(root,width=18,height=8,font=("Arial", 20)) #button to input medications;converts input in textbox to label even_med_button = Button(root, text="Add Medication(s)", command=add_medication3, font=("Arial", 18),state='normal') even_med_button.place(relx=0.72, rely = 0.72, anchor = CENTER) confirm_button3=Button(root, text="Confirm", command=confirm3, font=("Arial", 18)) med_label3=Label(root, text="Evening Medication(s): ",bg="light blue", font=("Arial 18 bold")) med_label3.place(relx=0.65, rely = 0.66) #call clock function tick() root.mainloop()