![]() |
[PyQt] Increase text size and change color based on temp - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: [PyQt] Increase text size and change color based on temp (/thread-27813.html) |
Increase text size and change color based on temp - pav1983 - Jun-22-2020 I have a weather app I want to do something with. I've adapted it from somehwere else and would like to adapt it further, but I am not sure how to adapt it. Here are the two things I would like to accomplish: 1. Make the temperature and condition font larger. 2. Make the background change color based on the temperature. Here is what I have so far: import requests from tkinter import * import io from PIL import ImageTk, Image import urlopen root=Tk() root.title("Weather Widget") root.resizable(0,0) root.wm_attributes('-topmost',1) root.geometry("375x150") #main area display info = StringVar() weather = Message(root, textvariable = info, width = 200) info.set("What's your weather?") weather.grid(row=1, column=1) #image_address = 'http://openweathermap.org/img/w/13n.png' #image_open = urlopen(image_address) #image_file = io.BytesIO(image_open.read()) #image_png = Image.open(image_file) #image_tk = ImageTk.PhotoImage(image_png.convert("RGB")) #label_img = Label(root,image=image_tk) #label_img.grid(row=1, column=2) #function that gets weather def getWeather(): #Replace YOURAPIKEYHERE with the API key you obtain by signing up at https://openweathermap.org/ api_address = 'http://api.openweathermap.org/data/2.5/weather?appid=ee23153f55519f1ee97a23899dfcda0c&units=imperial&zip=' country_code = ',us' zip_code = e.get() url = api_address + zip_code + country_code json_data = requests.get(url).json() if 'message' in json_data: info.set('Invalid zip code.') else: city = json_data['name'] #description = json_data['weather'][0]['description'] #icon = json_data['weather'][0]['icon'] temperature = str(json_data['main']['temp']) + u'\u00b0' + " F" info.set(city + "\n" + temperature) # now prep image # image_main = 'http://openweathermap.org/img/w/' # image_address = image_main + str(icon) + '.png' # image_open = urlopen(image_address) # image_file = io.BytesIO(image_open.read()) # image_png = Image.open(image_file) # image_tk2 = ImageTk.PhotoImage(image_png.convert("RGB")) # label_img.configure(image=image_tk2) # label_img.image = image_tk2 label=Label(root,text='Enter your zip code: ') label.grid(row=3, column=1, sticky='E') e=Entry(root) e.grid(row=3, column=2) sub = Button(root,text='Get Weather', command = getWeather) sub.grid(row=4, column=2) root.mainloop() RE: Increase text size and change color based on temp - menator01 - Jun-22-2020 Add this in your getWeather function. Then use condition to change. weather['fg'] = 'red' weather['font'] = 'sans 16 normal' weather['bg'] = 'pink' RE: Increase text size and change color based on temp - pav1983 - Jun-22-2020 Thank you. SO far so good. Now I just want to learn how to change the color in the little box based on the temperature. I know what colors I want. I just want to know how to do it so that I can do it myself. Can someone provide an example of that? RE: Increase text size and change color based on temp - menator01 - Jun-22-2020 Rough example and not tested. if temp <= 32: weather['bg'] = 'blue' elif temp >= 65 and temp <= 80: weather['bg'] = 'green' else: weather['bg'] = 'brown' RE: Increase text size and change color based on temp - pav1983 - Jun-22-2020 This is what I came up with, but it didn't work. def getWeather(): #Replace YOURAPIKEYHERE with the API key you obtain by signing up at https://openweathermap.org/ api_address = 'http://api.openweathermap.org/data/2.5/weather?appid=ee23153f55519f1ee97a23899dfcda0c&units=imperial&zip=' country_code = ',us' zip_code = e.get() url = api_address + zip_code + country_code json_data = requests.get(url).json() if 'message' in json_data: info.set('Invalid zip code.') else: city = json_data['name'] #description = json_data['weather'][0]['description'] #icon = json_data['weather'][0]['icon'] temperature = str(json_data['main']['temp']) + u'\u00b0' + " F" #weather['fg'] = 'red' weather['font'] = 'Courier 18 normal' #weather['bg'] = 'pink' info.set(city + "\n" + temperature) if ['temp'] <= 119 and ['temp'] >= 110: weather['bg'] = 'burgundy' elif ['temp'] <= 109 and ['temp'] >=100: weather['bg'] = 'brown' elif ['temp'] <= 99 and ['temp'] >= 90: weather['bg'] = 'red' elif ['temp'] <= 89 and ['temp'] >= 80: weather['bg'] = 'orange' RE: Increase text size and change color based on temp - menator01 - Jun-22-2020 if json_data['main']['temp'] >= 110 and json_data['main']['temp'] <= 119: weather['bg'] = 'burgundy' elif json_data['main']['temp'] >=100 and json_data['main']['temp'] <= 109: weather['bg'] = 'brown' elif json_data['main']['temp'] >= 90 and json_data['main']['temp'] <=99: weather['bg'] = 'red' elif json_data['main']['temp'] >= 80 and json_data['main']['temp'] <=89: weather['bg'] = 'orange' else: weather['bg'] = 'pink' |