Advertisement
Guest User

Untitled

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