Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 21.33 KB | None | 0 0
  1. #!/usr/bin/env python
  2. from __future__ import print_function     #IMPORTING ALL LIBRARIES....
  3. from tkinter import *     #TKINTER ALLOWS FOR WINDOWS
  4. import tkinter     #TKINTER ALLOWS FOR WINDOWS
  5. from PIL import Image     #ALLOWS OUTPUT OF IMAGING IN A WINDOW
  6. from PIL import ImageTk     #ALLOWS OUTPUT OF IMAGING IN A WINDOW
  7. import time     #GIVES THE TIME
  8. import pyowm     #ALLOWS FOR CONNECTION TO WEATHER API
  9. from pyowm import OWM     #ALLOWS FOR CONNECTION TO WEATHER API      
  10. import datetime     #GIVES THE DATE
  11. from googleapiclient.discovery import build     #ALLOWS FOR CONNECTION TO GOOGLE API WHICH ALLOWS ACCESS TO CALENDAR
  12. from httplib2 import Http     #ALLOWS FOR CONNECTION TO GOOGLE API
  13. from oauth2client import file, client, tools     #ALLOWS FOR CONNECTION TO GOOGLE API
  14. import pygame
  15. import subprocess
  16. pygame.init()
  17. #SETTING SOME GLOBAL VARIABLES...
  18. event1 = [1]    #THIS IS DONE SO THAT WITHIN THE FIRST CYCLE OF CALENDAR event1 IS DEFINED AND IT DOES NOT EQUAL NULL, AS IF events_1 AND events = NULL IN THE FIRST CYCLE NO RMEINDERS WON'T BE DISPLAYED
  19. y = 2
  20. finalStatus2 = ''
  21. timeString = ''
  22. month = [' January',' Febuary',' March',' April',' May',' June',' July',' August',' September',' October',' November',' December']    
  23. def calender():
  24.      global timeString
  25.      def main():     #THIS ALLOWS ME TO USE IF MAIN == NAME WHICH ALLOWS THE CODE IN THE MODULE TO BE IMPOTABLE BY OTHER MODULES
  26.       tmrw = datetime.date.today() + datetime.timedelta(days=1)     #TMRW WILL HOLD TOMMOROWS DATE#
  27.       tmrw = str(tmrw)     #TMRW IS TURNED TO A STRING AS ITS OLD DATA TYPE COULD NOT BE SHORTENED USING [:X]
  28.       x = 20     #THIS IS THE STARTING ROW AT WHICH THE REMINDERS ARE OUTPUTTED
  29.       global event1     #BRINGING IN A GLOBAL VARIABLE TO THE PROCEDURE
  30.       global y     #BRINGING IN A GLOBAL VARIABLE TO THE PROCEDURE
  31.       store = file.Storage('token.json')     #TOKEN.JSON IS STORED IN THIS DIRECTORY
  32.       creds = store.get()     #GETS JSON FILE
  33.       if not creds or creds.invalid:
  34.           flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
  35.           creds = tools.run_flow(flow, store)
  36.       service = build('calendar', 'v3', http=creds.authorize(Http()))     # Call the Calendar API
  37.       now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time, NOW WILL HOLD THE TIME
  38.       eventsResult = service.events().list(calendarId='primary', timeMin=now,     #GETS THE NEXT 10 EVENTS
  39.                                           maxResults=10, singleEvents=True,
  40.                                           orderBy='startTime').execute()
  41.       start_date = time.strftime('20%y-%m-%d')        #GETS THE CURRENT DATE IN THE FORM YYYY-MM-DD
  42.       date1 = datetime.datetime.strptime(start_date,'20%y-%m-%d')    #THIS IS DONE SO I CAN APPLY A DATETIME METHOD TO DATE1
  43.       z = False
  44.       if timeString == '12: 01 AM':     #Z WILL BE TRUE WHEN IT IS 00:01
  45.           z = True     #THIS IS DONE TO RE WRITE EVENTS WHEN THE DAY HAS CHANGED AS TOMMOROW REMINDERS WILL BECOME TODAY REMINDERS AND TODAY REMINDERS WILL VANISH
  46.       events = eventsResult.get('items', [])     #REFORMATS eventsResult TO REOMVE IRRELEVANT DATA
  47.       if event1 != events or z == True:     #IF THE LIST OF EVENTS HAS CHANGED OF IF IT'S 00:01
  48.           sound = pygame.mixer.Sound("sound.wav")     #LOAD THE FILE sound.wav TO sound SO IT CAN BE PLAYED  
  49.           sound.play()     #PLAY SOUND.WAV
  50.           for event in event1:     #THE NUMBER OF EVENTS BEFORE A CHANGE IN EVENTS IS THE NUMBER OF BLANKS OUTPUTTED TO COVER UP THE EXACT NUMBER OF PREVIOUS EVENTS
  51.               the_event = '                                                                                                                                                                                                                                                                                        '     #THE_EVENT HOLDS A LONG SPACE WHICH WHEN OUTPUTTED WILL COVER UP THE PREVIOUS OUTPUTS OF EVENT
  52.               Label (window, text= the_event, bg='black', fg='black', font=('times', 32)) .grid(row=x, column=2, sticky=W)     #OUTPUTS MESSAGE IN BLACK IN ORDER TO COVER UP PREVIOUS MEESAGE IN WHITE SO EVENTS DONT WRITE OVER EACH OTHER
  53.               x = x+1     #SO THE NEXT LABEL IS OUTPUTTED ON THE NEXT ROW
  54.       x = 1     #SO X DOES NOT EQUAL 20 AND NO REMINDRRS ISNT DISPLAYED WHEN THERE ARE REMINDERS
  55.       if event1 != events or z == True:     #IF THE LIST OF EVENTS HAS CHANGED OF IF IT'S 00:01
  56.           x = 20     #THIS IS TO OUTPUT EACH EVENT ON A DIFFERENT LINE STARTING WITH 11
  57.           event1 = events    #THIS IS DONE SO I CAN CHECK IF THERE HAS BEEN A CHANGE TO THE CALENDAR FOR THE NEXT ITERATION OF MAIN()          
  58.           if events != [] and y == 1:     #IF  THERE IS SOMETHING IN EVENTS AND 'NO REMINDERS' WAS OUTPUTTED LAST ITERATION OF MAIN()
  59.               Label (window, text='    No upcoming reminders found', bg='black', fg='black', font=('times', 32)) .grid(row=20, column=2, sticky=W) #COVER PREVIOUS OUTPUT OF NO UPCOMING REMINDERS FOUND                
  60.           for event in events:    #REPEAT THIS FOR EACH EVENT IN EVENTS
  61.               g = False     #SETTING VARIABLES TO FALSE SO THEY CAN BE COMPARED IF THEY ARE NOT CHANGED TO TRUE
  62.               today2 = False
  63.               tmrw2 = False        
  64.               start = event['start'].get('dateTime', event['start'].get('date'))     #START IS A TUPLE COUNTAINING THE START TIME (IF THERE IS ONE) OF THE EVENT AND THE START DATE
  65.              
  66.               for i in range (2,7):     #THIS LOOP CHECKS IF THE REMINDER IS IN THE NEXT 6 DAYS (BUT NOT TOMMOROW)  
  67.                   date2 = date1 + datetime.timedelta(days=i)     #DATE2 WILL HOLD THE DATE OF TODAY PLUS i DAYS
  68.                   date2 = str(date2)     #CHANGING DATE2 TO A STRING SO THAT THE NEXT LINE OF CODE CAN WORK
  69.                   date2 = date2[:10]    
  70.                   if  date2 == start[:10]:     #IF DATE2 IS THE SAME DAYE OF THE EVENT
  71.                       year, month, day = (int(e) for e in date2.split('-'))    #REFORMATTING EVENT SO I CAN EXTRACT THE DAY
  72.                       ans = datetime.date(year, month, day)     #APPLYING THE DATETIME METHOD SO THE NEXT LINE WILL WORK  
  73.                       dow = (ans.strftime('%A'))     #GET THE DAY OF DATE2 (E.G. THURSDAY, SUNDAY ....)
  74.                       g = True                  
  75.               if now[:10] == start[:10]:     #IF THE EVENT IS TODAY
  76.                   today2 = True
  77.               elif tmrw[:10] == start[:10]:     #IF THE EVENT IS TOMMORW
  78.                   tmrw2 = True
  79.              
  80.               if 'summary' in event:
  81.                   the_event = (start, event['summary'],'  ')     #EVENT SUMMARY IS THE DESCRIPTION OF THE EVENT (E.G. DENTISTS APPOINTMENT)
  82.               else:
  83.                   the_event = (start, 'no title','  ')     #HERE I HAVE VALIDATED MY PROGRAM AS IF THE CLIENT HAS NOT ENTERED A TITLE MY PROGRAM WON'T CRASH                                
  84.               if 'T' in the_event[0]:     #IF THE EVENT HAS A SPECIFIC TIME
  85.                   start = start.split('T')     #SPLIT START INTO THE DATE AND TIME    
  86.                   date = start[0][5:]     #FIRST 5 CHARACTER OF START[0] ARE MM-DD
  87.                   time3 = '  '+start[1][:5]     #TIME88 IT RE-WRITTEN IN THE FORM HH-MM (IF HAVE USED TIME88 INSTEAD OF TIME AS TIME. IS A METHOD AND THAT CAN CONFUSE PYTHON SOMETIMES)
  88.                   if today2 == True:     #IF THE EVENT IS TODAY
  89.                      date = '*TODAY*'    
  90.                   elif tmrw2 == True:     #IF THE EVENT IS TOMORROW
  91.                      date = 'Tomorrow'
  92.                   elif g ==True:     #IF THE EVENT IS WITHIN THE NEXT 6 DAYS (NOT INCLUDING TOMORROW)
  93.                       date = dow     #THE DAY OF THE WEEK OF THE REMINDER IS PUT IN TO DATE                        
  94.                   else:     #DEPENDING ON THE MONTH DATE IS CHANGED SO THE MONTH IS WRITTEN AND THE DAY IS AN NUMBER IN THE FORM DD MMM..
  95.                       date = monthh(date)     #THE FUNCTION MONTH RETURNS THE MONTH FOR A GIVEN DATE IN WRITTEN FORM                                          
  96.                   the_event = '   ' + date + ': ' + the_event[1] + time3                  
  97.               else:     #IF THE REMINDER IS AN ALL DAY REMINDER (NO TIME)        
  98.                   date = start[5:]     #REFORMATS DATE TO MM-DD
  99.                   if today2 == True:     #IF THE EVENT IS TODAY
  100.                      date = '*TODAY*'
  101.                   elif tmrw2 == True:     #IF THE EVENT IS TOMORROW
  102.                      date = 'Tomorrow'
  103.                   elif g ==True:     #IF THE EVENT IS WITHIN THE NEXT 6 DAYS (NOT INCLUDING TOMORROW)
  104.                       date = dow     #THE DAY OF THE WEEK OF THE REMINDER IS PUT IN TO DATE
  105.                  
  106.                   else:     #DEPENDING ON THE MONTH DATE IS CHANGED SO THE MONTH IS WRITTEN AND THE DAY IS AN NUMBER IN THE FORM DD MMM..
  107.                       date = monthh(date)     #THE FUNCTION MONTH RETURNS THE MONTH FOR A GIVEN DATE IN WRITTEN FORM
  108.                      
  109.                  
  110.                   the_event = '   ' + date + ': ' + the_event[1]     #the_event HOLDS ALL THE INFORMATION THAT WILL GO UP AS A REMINDER FOR A PARTICULAR EVENT
  111.              
  112.  
  113.               if today2 == True:     #IF THE EVENT IS TODAY IT WILL BE RED, IF IT IS TOMOROW IT WILL BE PINK, AND IF NONE IT WILL BE WHITE
  114.                   color = 'red2'
  115.               elif tmrw2 == True:
  116.                   color = 'deep pink'
  117.               else:
  118.                   color = 'white'
  119.               Label (window, text= the_event, bg='black', fg= color, font=('times', 32)) .grid(row=x, column=2, sticky=W)     #OUTPUTS THE EVENT
  120.               x = x+1     #ADDS 1 TO X SO NEXT REMINDER IS ON THE NEXT ROW
  121.               y = 0     #Y IS SET TO 0 SO MY FUNCTION KNOWS THAT THERE ARE REMINDERS (EVENTS != NULL)
  122.          
  123.       if x == 20:     #X WILL ONLY=20 WHEN X HAS NOT BEEN INCREMENTED MEANING EVENTS IS EMPTY AND HERE HAS BEEN A CHANGE IN EVENTS
  124.           Label (window, text='    No upcoming reminders found', bg='black', fg='white', font=('times', 32)) .grid(row=20, column=2, sticky=W) #OUTPUTS No upcoming reminders found
  125.           y = 1     #Y IS SET TO 1 SO MY FUNCTION KNOWS THAT THERE ARE NO REMINDERS (EVENTS == NULL)              
  126.      if __name__ == '__main__':
  127.       main()
  128.      window.after(2000, calender)     #REPEATS EVERY 900000 MILISECONDS    
  129. def remind():
  130.      def main2():    
  131.           store = file.Storage('token.json')     #TOKEN.JSON IS STORED IN THIS DIRECTORY
  132.           creds = store.get()     #GETS JSON FILE
  133.           if not creds or creds.invalid:
  134.               flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
  135.               creds = tools.run_flow(flow, store)
  136.           service = build('calendar', 'v3', http=creds.authorize(Http()))     # Call the Calendar API
  137.           now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time, NOW WILL HOLD THE TIME
  138.           eventsResult = service.events().list(calendarId='primary', timeMin=now,     #GETS THE NEXT 10 EVENTS
  139.                                               maxResults=10, singleEvents=True,
  140.                                               orderBy='startTime').execute()
  141.           events = eventsResult.get('items', [])     #REFORMATS eventsResult TO REMOVE IRRELEVANT DATA
  142.           timeString1 = time.strftime('%H: %M')     #timeString1 WILL HOLD THE TIME IN 24HR HH:MM
  143.           hour = int(timeString1[:2])     #hour IS AN INTEGER WHICH HOLDS THE CURRENT HOUR BY TAKING THE FIRST TWO VALUES OF timeString1
  144.           minute = int(timeString1[4:])     #minute IS AN INTEGER WHICH HOLDS THE CURRENT minute BY TAKING THE last TWO VALUES OF timeString1  
  145.           a = datetime.datetime(100, 1, 1, hour, minute, 00)     #a HOLDS THE TIME, I DID THE PREVIOUS TWO STEPS SO I COULD APPLY THE DATETIME METHOD TO THE TIME SO THAT I CAN ADD TIME TOGETHER (SHOWN BELOW). AFTER MINUTE THE 00 SETS THE SECONDS TO 0
  146.           b = a + datetime.timedelta(minutes=5)     #b HOLDS THE TIME & DATE IN 5 MINUTES
  147.           c = a + datetime.timedelta(minutes=10)     #c HOLDS THE TIME & DATE IN 10 MINUTES
  148.           b = str(b.time())    #b HOLDS THE TIME IN 5 MINUTES AS A STRING IN THE FORM HH:MM:SS WHERE SS == 00
  149.           c = str(c.time())    #c HOLDS THE TIME IN 5 MINUTES AS A STRING IN THE FORM HH:MM:SS WHERE SS == 00
  150.           for event2 in events:     #FOR ALL OF THE NEXT 10 EVENTS IN GOOGLE CALENDAR (IN ASCENDING ORDER OF TIME)
  151.               if 'summary' in event2:     #IF THE EVENT HAS A SUMMARY
  152.                   the_summary = event2['summary']     #PUT THE SUMMARY OF THE EVENT IN the_summary
  153.                   if the_summary.endswith('!'):     #IF THE SUMMARY ENDS WITH A '!'
  154.                       if 'dateTime' in event2['start']:     #IF THE EVENT HAS A TIME
  155.                           getTime = (event2['start'])['dateTime']     #PUT THE TIME & DATE OF THE EVENT IN getTime
  156.                           getTime = getTime.split('T')     #SPLIT getTime INTO THE DATE AND TIME    
  157.                           getTime = getTime[1][:5]     #getTime IT RE-WRITTEN IN THE FORM HH-MM
  158.                           getTime = getTime + ':00'    #ADDING THE SECONDS (SS) SO THAT b AND c CAN BE COMPARED WITH getTime
  159.                           getTime = str(getTime)     #TURN getTime INTO A STRING SO IT CAN BE COMPARED WITH a & b
  160.                           if getTime == b or getTime == c:     #IF THE EVENT IS IN 5 OR 10 MINUTES                                          
  161.                                   sound = pygame.mixer.Sound("alert.wav")     #PUT THE sound.wav FILE INTO SOUND    
  162.                                   sound.play()     #PLAY THE SOUND                                      
  163.      if __name__ == '__main__':
  164.       main2()
  165.      window.after(57000, remind)     #REPEATS EVERY 900000 MILISECONDS
  166. def monthh(date):
  167.     global month     #RETRIEVES LIST OF MONTHS
  168.     theMonth = int(date[:2])     #TURNS THE MONTH E.G. 04 INTO AN INT SO IT BECOMES 4
  169.     for i in range (0,12):     #LOOP FOR EACH MONTH
  170.         if theMonth == i+1:     #IF THE CURRENT MONTH IS i + 1
  171.             date = str(int(date[3:])) + month[i]     #PUT THE DAY AND MONTH INTO DATE
  172.             break     #SO THE LOOP DOESNT CARRY ON WHEN THERE IS NOTHING TO DO
  173.     return date
  174. def tick():
  175.     global timeString
  176.     timeString = time.strftime('%I: %M %p')     #HOUR MINUTE (LAYOUT) THIS IS THE TIME
  177.     clock.config(text=timeString)
  178.     clock.after(10000, tick)     #REPEATS EVERY 60000 MILISECONDS
  179.     now = datetime.datetime.now()
  180.     hour = now.hour
  181.     if hour == 23:
  182.         subprocess.call(['./killmirror.sh'])    
  183. def day():
  184.     day1 = time.strftime('%A')     #ONLY SELECTS THE DAY FROM TIME
  185.     dayOfTheWeek.config(text=day1)
  186.     dayOfTheWeek.after(800000, day)      #REPEATS EVERY 800000 MILISECONDS    
  187. def date():
  188.     date1 = time.strftime('%b %d, %Y')     #GETS THE CURRENT DATE IN THE FORM MONTH D Y
  189.     date2.config(text=date1)
  190.     date2.after(800000, date)     #REPEATS EVERY 800000 MILISECONDS
  191. def weather():
  192.     global finalStatus2     #BRINGING IN A GLOBAL VARIABLE TO THE PROCEDURE
  193.     blank = Label(window, text= '          ', bg='black', fg='black', font=('times', 23))     #OUTPUTS TEMPERATURE
  194.     blank.place(x=1080, y=147)     #PLACES THE LABEL AT THE CORRESPONDING CO-ORDINATES
  195.     blank2 = Label(window, text= '                                                 ', bg='black', fg='black', font=('times', 23))     #OUTPUTS TEMPERATURE
  196.     blank2.place(x=1080, y=180)     #PLACES THE LABEL AT THE CORRESPONDING CO-ORDINATES
  197.     try:
  198.         owm = pyowm.OWM('9e9c1df91cf57fd15c67f2b883e7c9ee')     #API USED TO CONNECT TO WEATHER SERVICES OVER THE INTERNET
  199.     except:
  200.         try:
  201.             owm = pyowm.OWM('b039fd94b6d27892dd194866a0077fdb')     #API USED TO CONNECT TO WEATHER SERVICES OVER THE INTERNET
  202.         except:
  203.             try:
  204.                 owm = pyowm.OWM('2399c51c67515a394b74e834149aea2a')     #API USED TO CONNECT TO WEATHER SERVICES OVER THE INTERNET
  205.             except:
  206.                 print('error, weather not working')            
  207.     observation = owm.weather_at_place('New Malden,GB')
  208.     Weather_info = observation.get_weather()     #GET WEATHER INFORMATION
  209.     temp_info = Weather_info.get_temperature('celsius')     #GET INFORMATION ABOUT TEMPERATURE IN CELCIUS
  210.     y = str(Weather_info)     #TURNING WEATHER INFORMATION TO A STRING SO I CAN SEARCH WITHIN THE VARIABLE
  211.     find = y.find('detailed')    #SEARCHING FOR SPECIFIC INFORMATION WITHIN THE WEATHER INFORMATION...
  212.     status = y[(find-2):]     #REFINING Y TO GET THE WEATHER...
  213.     status2 = status.find('status=') #REFINING STATUS TO GET THE WEATHER...    
  214.     status = status[(status2+7):]     #REFINING STATUS2 TO GET THE WEATHER...
  215.     finalStatus1 = status.rstrip('>') #finalStatus1 HOLDS THE CURRENT WEATHER
  216.     temp = temp_info['temp']                          #'temp' IS THE ACTUAL TEMPERATURE
  217.     temp = float(temp)     #MODIFYING TEMP...
  218.     temp = round(temp, 0 )
  219.     temp = str(temp)
  220.     temp = temp[:-2]
  221.     temp = temp +' celsius'
  222.     finalStatus2 = finalStatus1.strip()
  223.     #OUTPUTS:
  224.     temp1 = Label(window, text= temp, bg='black', fg='white', font=('times', 23))     #OUTPUTS TEMPERATURE
  225.     temp1.place(x=1080, y=147)     #PLACES THE LABEL AT THE CORRESPONDING CO-ORDINATES
  226.     temp1.after(1500000, weather)     #REPEATS EVERY 25 MINUTES    
  227. def pic():
  228.     global finalStatus2     #BRINGING IN A GLOBAL VARIABLE TO THE PROCEDURE
  229.     global timeString     #BRINGING IN A GLOBAL VARIABLE TO THE PROCEDURE    
  230.     time1 = int(timeString[:2])     #TIME HOLDS THE TIME IN THE FORM HH
  231.     time2 = timeString[7:]     #TIME2 HOLDS EITHER AM OR PM    
  232.     if 12 > time1 > 6 and time2 == 'PM' or time1 < 6 and time2 == 'AM' or time1 == 12 and time2 == 'AM':     #IF ITS DARK OUTSIDE:  
  233.             if 'drizzle' in finalStatus2 or 'rain' in finalStatus2:
  234.                 photo = Image.open('assets/Rain.png')
  235.             elif 'thunderstorm' in finalStatus2:
  236.                 photo = Image.open('assets/Storm.png')
  237.             elif 'snow' in finalStatus2 or 'sleet' in finalStatus2:
  238.                 photo = Image.open('assets/Snow.png')          
  239.             else:
  240.                 photo = Image.open('assets/Moon.png')                
  241.     else:
  242.             if finalStatus2 =='mist' or finalStatus2 =='haze' or finalStatus2 =='smoke' or finalStatus2 =='sand, dust whirls' or finalStatus2 =='fog' or finalStatus2 =='sand' or finalStatus2 =='dust' or finalStatus2 =='volcanic ash' or finalStatus2 =='squalls' or finalStatus2 =='tornado':
  243.                 photo = Image.open('assets/Haze.png')  
  244.             elif 'drizzle' in finalStatus2 or 'rain' in finalStatus2:
  245.                 photo = Image.open('assets/Rain.png')
  246.             elif 'thunderstorm' in finalStatus2 == True:
  247.                 photo = Image.open('assets/Storm.png')
  248.             elif 'clouds' in finalStatus2:
  249.                 if finalStatus2 =='few clouds' or finalStatus2 =='scattered clouds':
  250.                      photo = Image.open('assets/PartlySunny.png')
  251.                 else:
  252.                      photo = Image.open('assets/Cloud.png')                  
  253.             elif finalStatus2 == 'clear sky':
  254.                 photo = Image.open('assets/Sun.png')        
  255.             elif 'snow' in finalStatus2 or 'sleet' in finalStatus2:
  256.                 photo = Image.open('assets/Snow.png')            
  257.             else:
  258.                 photo = Image.open('assets/PartlySunny.png')                
  259.     #OUTPUTS THE PHOTO:
  260.     photo = photo.resize((100,100), Image.ANTIALIAS) #RESIZES IMAGE
  261.     photo = ImageTk.PhotoImage(photo)    
  262.     photo1 = Label(window, image=photo, bg = 'black')
  263.     photo1.photo = photo
  264.     photo1.place(x=1300, y=40)     #PLACES THE LABEL AT THE CORRESPONDING CO-ORDINATES
  265.     photo1.after(1500000, pic)     #REPEATS EVERY 25 MINUTES  
  266. #CREATES A WINDOW
  267. window = Tk()      #CREATES A WINDOW
  268. window.title('My Smart Mirror')     #NAMES THE WINDOW
  269. window.configure(background='black')     #SETS BACKGROUND OF THE WINDOW TO BLACK
  270. window.attributes('-fullscreen', True)     #MAKES THE WINDOW FULL SCREEN
  271. window.bind('<Escape>', lambda e: window.destroy())     #ALLOWS FOR ME TO CLOSE THE WINDOW
  272. Label (window, text= ' \n \n \n \n ', bg='black', fg='black', font=('times', 32)) .grid(row=0, column=2, sticky=W)     #OUTPUTS MESSAGE IN BLACK IN ORDER TO COVER UP PREVIOUS MEESAGE IN WHITE SO EVENTS DONT WRITE OVER EACH OTHER
  273. #OUTPUTS THE DATE
  274. date2 = Label(window, font = ('times', 35, 'bold'), bg='black', fg='white')     #DISPLAYS THE CLOCK
  275. date2.place(x=545, y=160)     #POSITIONS THE CLOCK
  276. date()
  277. #OUTPUTS THE DAY OF THE WEEK:
  278. dayOfTheWeek = Label(window, font = ('times', 35, 'bold'), bg='black', fg='white')     #DISPLAYS THE CLOCK
  279. dayOfTheWeek.place(x=590, y=100)    #POSITIONS THE CLOCK
  280. day()
  281. #DISPLAYS THE TIME:
  282. clock = Label(window, font = ('times', 50, 'bold'), bg='black', fg='white')     #DISPLAYS THE CLOCK
  283. clock.place(x=525, y=20)     #POSITIONS THE CLOCK
  284. tick()
  285. Label (window, text='Reminders:', bg='black', fg='white', font=('times', 35)) .place(x=45, y=160)     #OUTPUTS MESSAGE
  286. label_number_title = Label(window, text='Phone Numbers:     Raj: 07--------- Aarti: 07--------- You: 07---------', fg='white', bg = 'black', font=('times', 30))
  287. label_number_title.place(x=200, y=833)     #PLACES THE LABEL AT THE CORRESPONDING CO-ORDINATES
  288. #CALLING THE PROCEDURES:
  289. weather()
  290. calender()
  291. pic()
  292. remind()
  293. window.mainloop()     #RUNS THE WINDOW
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement