Python Forum

Full Version: Increase text size and change color based on temp
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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()
Add this in your getWeather function. Then use condition to change.

weather['fg'] = 'red'
weather['font'] = 'sans 16 normal'
weather['bg'] = 'pink'
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?
Rough example and not tested.
if temp <= 32:
    weather['bg'] = 'blue'
elif temp >= 65 and temp <= 80:
    weather['bg'] = 'green'
else:
    weather['bg'] = 'brown'
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'
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'