Guest User

Untitled

a guest
May 30th, 2018
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.71 KB | None | 0 0
  1. from Tkinter import *
  2. import locale
  3. import threading
  4. import time
  5. import requests
  6. import feedparser
  7. import json
  8. import traceback
  9. import urllib2
  10. import praw
  11.  
  12. from PIL import Image, ImageTk
  13. from contextlib import contextmanager
  14.  
  15. #Font Variables
  16. font_type = 'Helvetica'
  17. font_colour = "White"
  18. xlarge_text_size = 48
  19. large_text_size = 30
  20. medium_text_size = 20
  21. small_text_size = 12
  22. xsmall_text_size =8
  23. #News Variables
  24. NEWS_COUNTRY_CODE = 'au'
  25. #Weather Variables
  26. READ_API_KEY = 'D71A7607GOWJSZ6D'
  27. CHANNEL_ID = 502804
  28. #Reddit Variables
  29. SUBREDDIT_SELECTION = 'technology'
  30.  
  31.  
  32. class Clock(Frame):
  33. def __init__(self, parent, *args, **kwargs):
  34. Frame.__init__(self, parent, bg='black')
  35. #Time Label
  36. self.time1 = ''
  37. self.timeLbl = Label(self, font=(font_type, xlarge_text_size), fg=font_colour, bg="black")
  38. self.timeLbl.pack(side=TOP, anchor=E)
  39. #Day Of the Week label
  40. self.weekday1 = ''
  41. self.weekdayLbl = Label(self, font=(font_type,medium_text_size), fg=font_colour, bg="black")
  42. self.weekdayLbl.pack(side=TOP,anchor=E)
  43. #Date Label
  44. self.date1 = ''
  45. self.dateLbl = Label(self,font=(font_type,medium_text_size), fg=font_colour, bg="black")
  46. self.dateLbl.pack(side=TOP,anchor=E)
  47. self.tick()
  48.  
  49. def tick(self):
  50. #Set Clock
  51. time2 = time.strftime('%H:%M')
  52. if time2 != self.time1:
  53. time1 = time2
  54. self.timeLbl.config(text=time2)
  55. self.timeLbl.after(200, self.tick)
  56. # Set Day of the Week
  57. weekday2 = time.strftime('%A')
  58. if weekday2 != self.weekday1:
  59. self.weekday1 = weekday2
  60. self.weekdayLbl.config(text=weekday2)
  61. # Set date
  62. date2 = time.strftime("%d %b, %Y")
  63. if date2 != self.date1:
  64. self.date1 = date2
  65. self.dateLbl.config(text=date2)
  66. class Weather(Frame):
  67. def __init__(self, parent, *args, **kwargs):
  68. Frame.__init__(self, parent, bg='black')
  69. self.temperature = ''
  70. self.humidity = ''
  71. self.uv = ''
  72. self.apparenttemp = ''
  73. self.icon = ''
  74.  
  75. self.degreeFrm = Frame(self, bg="black")
  76. self.degreeFrm.pack(side=TOP, anchor=W)
  77.  
  78. self.temperatureLbl = Label(self.degreeFrm, font=('Helvetica', xlarge_text_size), fg="white", bg="black")
  79. self.temperatureLbl.pack(side=LEFT, anchor=N)
  80.  
  81. self.uvLbl = Label(self, font=('Helvetica', large_text_size), fg="white", bg="black")
  82. self.uvLbl.pack(side=TOP, anchor=W)
  83.  
  84. self.humidityLbl = Label(self, font=('Helvetica', medium_text_size),fg="white",bg="black")
  85. self.humidityLbl.pack(side=TOP, anchor=W)
  86.  
  87. self.apparenttempLbl = Label(self, font=('Helvetica', medium_text_size), fg="white", bg="black")
  88. self.apparenttempLbl.pack(side=TOP, anchor=W)
  89.  
  90. self.get_local_weather()
  91.  
  92. def get_local_weather(self):
  93. try:
  94. degree_sign = u'N{DEGREE SIGN}'
  95. tempval = ''
  96. humidval = ''
  97. uvval = ''
  98. apptempval = ''
  99.  
  100. conn = urllib2.urlopen("http://api.thingspeak.com/channels/%s/feeds/last.json?api_key=%s"
  101. % (CHANNEL_ID, READ_API_KEY))
  102.  
  103. response = conn.read()
  104. data = json.loads(response)
  105. conn.close()
  106.  
  107. tempval = "%.2f%s" % (float(str(data['field1'])), degree_sign)
  108. humidval = "%s%.2f%s" % ("Humidity ", float(str(data['field2'])), "%")
  109. uvval = "%s%s" % ("UV Level ", int(data['field3']))
  110. apptempval = "%s%.2f%s" % ("Feel's like ", float(str(data['field4'])), degree_sign)
  111.  
  112. if self.temperature != None:
  113. self.temperature = tempval
  114. self.temperatureLbl.config(text=tempval)
  115.  
  116. if self.humidity != None:
  117. self.humidity = humidval
  118. self.humidityLbl.config(text=humidval)
  119.  
  120. if self.uv != None:
  121. self.uv = uvval
  122. self.uvLbl.config(text=uvval)
  123.  
  124. if self.apparenttemp != None:
  125. self.apparenttemp = apptempval
  126. self.apparenttempLbl.config(text=apptempval)
  127.  
  128. except Exception as e:
  129. traceback.print_exc()
  130. print "Error: %s. Cannot get weather." % e
  131.  
  132. self.after(500, self.get_local_weather)
  133. class News(Frame):
  134. def __init__(self, parent, *args, **kwargs):
  135. Frame.__init__(self, parent, *args, **kwargs)
  136. self.config(bg='black')
  137. self.title = 'News'
  138. self.newsLbl = Label(self, text=self.title, font=('Helvetica', medium_text_size), fg="white", bg="black")
  139. self.newsLbl.pack(side=TOP, anchor=W)
  140. self.headlinesContainer = Frame(self, bg="black")
  141. self.headlinesContainer.pack(side=TOP)
  142. self.get_headlines()
  143.  
  144. def get_headlines(self):
  145. try:
  146. for widget in self.headlinesContainer.winfo_children():
  147. widget.destroy()
  148. if NEWS_COUNTRY_CODE == None:
  149. headlines_url = "https://news.google.com/news?ned=au&output=rss"
  150. else:
  151. headlines_url = "https://news.google.com/news?ned=%s&output=rss" % NEWS_COUNTRY_CODE
  152.  
  153. feed = feedparser.parse(headlines_url)
  154.  
  155. for post in feed.entries[0:5]:
  156. headline = NewsHeadline(self.headlinesContainer, post.title)
  157. headline.pack(side=TOP, anchor=W)
  158. except Exception as e:
  159. traceback.print_exc()
  160. print "Error: %s. Cannot get news." % e
  161.  
  162. self.after(600000, self.get_headlines)
  163. class NewsHeadline(Frame):
  164. def __init__(self, parent, event_name=""):
  165. Frame.__init__(self, parent, bg='black')
  166.  
  167. image = Image.open("assets/Newspaper.png")
  168. image = image.resize((25, 25), Image.ANTIALIAS)
  169. image = image.convert('RGB')
  170. photo = ImageTk.PhotoImage(image)
  171.  
  172. self.iconLbl = Label(self, bg='black', image=photo)
  173. self.iconLbl.image = photo
  174. self.iconLbl.pack(side=LEFT, anchor=N)
  175.  
  176. self.eventName = event_name
  177. self.eventNameLbl = Label(self, text=self.eventName, font=('Helvetica', small_text_size), fg="white", bg="black")
  178. self.eventNameLbl.pack(side=LEFT, anchor=N)
  179. class Reddit(Frame):
  180. def __init__(self, parent, *args, **kwargs):
  181. Frame.__init__(self, parent, *args, **kwargs)
  182. # Reddit Title Label
  183. self.title = 'Reddit Top 1:'
  184. self.redditLbl = Label(self, text=self.title, font=(font_type, medium_text_size), fg=font_colour, bg="black")
  185. self.redditLbl.pack(side=TOP, anchor=W)
  186. # Reddit article label
  187. self.postContainer= Frame(self, bg="black")
  188. self.postContainer.pack(side=TOP)
  189. self.get_reddit_post()
  190.  
  191. def get_reddit_post(self):
  192. try:
  193. reddit = praw.Reddit(client_id='someinfo',
  194. client_secret='someinfo', password='someinfo',
  195. user_agent='someinfo', username='someinfor')
  196.  
  197. subreddit = reddit.subreddit(SUBREDDIT_SELECTION)
  198. top_subreddit = subreddit.hot(limit=3)
  199.  
  200. for submission in top_subreddit:
  201. if not submission.stickied:
  202. top_post = Reddit(self.postContainer,"%s" % (submission.title))
  203. top_post.pack(side=TOP, anchor =W)
  204.  
  205. except Exception as f:
  206. traceback.print_exc()
  207. print "Error: %s. This is a BIG REDDIT ERROR." % f
  208. class FullscreenWindow:
  209.  
  210. def __init__(self):
  211. self.tk = Tk()
  212. self.tk.configure(background='black')
  213. self.topFrame = Frame(self.tk, background = 'black')
  214. self.bottomFrame = Frame(self.tk, background = 'black')
  215. self.topFrame.pack(side = TOP, fill=BOTH, expand = YES)
  216. self.bottomFrame.pack(side = BOTTOM, fill=BOTH, expand = YES)
  217. self.state = False
  218. self.tk.bind("<Return>", self.toggle_fullscreen)
  219. self.tk.bind("<Escape>", self.end_fullscreen)
  220. # clock
  221. self.clock = Clock(self.topFrame)
  222. self.clock.pack(side=RIGHT, anchor=N, padx=100, pady=60)
  223. # weather
  224. self.weather = Weather(self.topFrame)
  225. self.weather.pack(side=LEFT, anchor=N, padx=100, pady=60)
  226. # news
  227. self.news = News(self.bottomFrame)
  228. self.news.pack(side=LEFT, anchor=S, padx=100, pady=60)
  229. # reddit
  230. self.reddit = Reddit(self.bottomFrame)
  231. self.reddit.pack(side = RIGHT, anchor=S, padx=100, pady=60)
  232.  
  233. def toggle_fullscreen(self, event=None):
  234. self.state = not self.state # Just toggling the boolean
  235. self.tk.attributes("-fullscreen", self.state)
  236. return "break"
  237.  
  238. def end_fullscreen(self, event=None):
  239. self.state = False
  240. self.tk.attributes("-fullscreen", False)
  241. return "break"
  242.  
  243. if __name__ == '__main__':
  244. w = FullscreenWindow()
  245. w.tk.mainloop()
Add Comment
Please, Sign In to add comment