ja das Thema gab's schonmal, meine Frage ist aber anders.
Der Gedanke:
Ich will erreichen dass das ändern der Variablen »weather« in der Datei ›Wetter.py‹ sich das Bild »weatherpic« in der Datei ›UI.py‹ ändert. Es gibt ein Bild für kein Ereignis und für jede Wetterlage eins.
Die Schwierigkeiten
Es traten folgende Fehler auf.
- Es passiert nichts
- Das bild für kein Ergebnis verschwindet
- Das bild für kein Ergebnis verschwindet, es gibt die Fehlermeldung dass das geforderte Bild nicht existiert,
Ich hab einen Weg gefunden der tatsächlich funktioniert. Wenn ich den Wechsel so:
Code: Alles auswählen
if weather == "01d":
self.weatherpic.config(image=clear)
command=UI.tada
Aber nur wenn dieser oder ein anderer Sinn freier aufruf erfolgt funktioniert es. Sinnfrei heißt es löst nichts aus.
Ich erhalte die Fehlermeldung: name 'UI' is not defined
Wenn ich ein »def« aufrufe die im selben Skript z.B. einfach nur per »print«-Befehl ein "OK" ausgeben soll erscheint zwar das "OK" aber das Bild für kein Ereignis verschwindet.
Warum geht das nur wenn ich die Fehlermeldung erhalte?
Was kann ich tun damit es funktioniert und kein Fehler auftaucht?
(Der Aufruf heißt »tada« weil mir nichts gescheites eingefallen ist für etwas das keinen zweck erfüllt)
Die Oberfläche (UI.py):
Code: Alles auswählen
#!/usr/bin/env python3
import json
from urllib.request import urlopen
from tkinter import(mainloop, Button, RIGHT, LEFT, E, W, N, Tk, Frame, RIDGE,
Label, Entry, Menu, PhotoImage)
from Wetter import *
from Menue import *
fgc='white' # Schriftfarbe
bgc='darkred' # Hintergrundfarbe
tl='Arial' # Text der Label
sg=10 # Schriftgröße
sge=11 # Schriftgröße Button
class GUI:
def __init__(self):
self.oberfläche()
def oberfläche(self):
self.fenster=Tk()
self.fenster.title("Wetter Weltweit")
self.fenster.config(bg='darkred')
snow=PhotoImage(file='weather-snow.png')
clouds=PhotoImage(file='weather-few-clouds.png')
cloudsn=PhotoImage(file='weather-few-clouds-night.png')
clear=PhotoImage(file='weather-clear.png')
clearn=PhotoImage(file='weather-clear-night.png')
mist=PhotoImage(file='weather-fog.png')
rain=PhotoImage(file='weather-showers.png')
drizzle=PhotoImage(file='weather-showers-scattered.png')
cloudy=PhotoImage(file='weather-overcast.png')
thunder=PhotoImage(file='weather-storm.png')
world=PhotoImage(file='world.png')
wetterbild=world
#self.wetterbild=StringVar()
#self.fenster.iconbitmap('@symbolw.xbm')
self.rahmen = Frame(master=self.fenster, relief=RIDGE, bd=4,
padx=5,pady=5, bg=bgc)
self.title = Label(master=self.rahmen, width=25, bg=bgc, fg=fgc,
text="Wetter aktuell", font=("Courier", 14))
self.rahmen.grid()
self.title.grid(column=0, row=0, columnspan=3)
self._addMenueleiste()
self._addHilfemenue()
label1=PhotoImage(file='snow.png')
# Suche
self.sucheLabel=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="Ort/Stadt:")
self.sucheEntry=Entry(master=self.rahmen, width=20, justify=RIGHT)
self.fenster.bind('<KeyPress-Return>', self.button)
self.fenster.bind('<KeyPress-KP_Enter>', self.button)
self.sucheEntry.focus()
self.sucheLabel.grid(column=0, row=1)
self.sucheEntry.grid(column=1, row=1, columnspan= 2, pady=5, sticky=W)
# Ausgabe Ort
self.ortLabel=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="Ort: ")
self.ortOut=Label(master=self.rahmen, width=20)
# Layout
self.ortLabel.grid(column=0, row=2)
self.ortOut.grid(column=1, row=2, columnspan=2, sticky=W)
# Temperatur
self.tempLabel=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="Temperatur:")
self.tempOut=Label(master=self.rahmen, width=10, justify=RIGHT)
self.feelLabel=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="Gefühlt:")
self.feelOut=Label(master=self.rahmen, width=10, justify=RIGHT)
# Layout
self.tempLabel.grid(column=0, row=3)
self.tempOut.grid(column=1, row=3, pady=5, sticky=W)
self.feelLabel.grid(column=0, row=4)
self.feelOut.grid(column=1, row=4, sticky=W)
# Feuchtigkeit
self.humiLabel=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="Luftfeuchtigkeit:")
self.humiOut=Label(master=self.rahmen, width=10, justify=RIGHT)
#Layout
self.humiLabel.grid(column=0, row=5)
self.humiOut.grid(column=1, row=5, pady=5, sticky=W)
# Wind
self.windLabel=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="Windgeschwindigkeit:")
self.windOut=Label(master=self.rahmen, width=10, justify=RIGHT)
self.windSpeed=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="km/h")
self.direct=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="Windrichtung:")
self.directOut=Label(master=self.rahmen, width=10, justify=RIGHT)
self.directDirect=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="°")
self.staerke=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="Windstärke:")
self.staerkeOut=Label(master=self.rahmen, width=20, justify=RIGHT)
# Layout
self.windLabel.grid(column=0, row=6)
self.windOut.grid(column=1, row=6, sticky=W)
self.windSpeed.grid(column=2, row=6, sticky=W)
self.direct.grid(column=0, row=7)
self.directOut.grid(column=1, row=7, pady=5, sticky=W)
self.directDirect.grid(column=2, row=7, sticky=W)
self.staerke.grid(column=0, row=8)
self.staerkeOut.grid(column=1, row=8, columnspan=2, sticky=W)
# Land
self.countryLabel=Label(master=self.rahmen, bg=bgc, fg=fgc,
text="Ländercode")
self.countryEntry=Entry(master=self.rahmen, width=8)
self.countryEntry.insert(0,"deu")
self.countryLabel.grid(column=0, row=9)
self.countryEntry.grid(column=1, row=9, pady=5, sticky=W)
# Wetterbild
self.weatherpic=Label(master=self.rahmen, bg=bgc,
image=wetterbild)
self.weatherpic.grid(column=2, row=3, rowspan=3, padx=5)
self.weatherpic1=Label(master=self.rahmen, bg=bgc, image=clouds)
#self.weatherpic1.grid(column=2, row=10)
# Wetterlage
self.wetterlage=Label(master=self.rahmen, width=10)
#self.wetterlage.grid(column=1, row=10)
self.fenster.mainloop()
#def buttonS(self):
# command=Wetter.auswertung(self)
def button(self, event):
command=Wetter.auswertung(self)
# Menüleiste
def _addMenueleiste(self):
self.menueleiste=Menu(self.fenster)
self.fenster.configure(menu=self.menueleiste)
def _addHilfemenue(self):
self.hilfemenue=Menu(master=self.menueleiste)
self.menueleiste.add_cascade(label="Hilfe",
menu=self.hilfemenue)
self.hilfemenue.add_command(label="Über",
command=self.ueber)
def ueber(self):
command=Menue.ueber(self)
def tada(self):
print("ja")
g=GUI()
w=Wetter()
m=Menue()
Code: Alles auswählen
import json
from urllib.request import urlopen
from tkinter import PhotoImage
ID = "6052e99753d39f75c9fa3f11cf0d1d8e" #1
URL = """
http://api.openweathermap.org/data/2.5/weather?q={},{}&APPID={}&units=metric&lang=de
""" #2
class Wetter:
def auswertung(self):
snow=PhotoImage(file='weather-snow.png')
clouds=PhotoImage(file='weather-few-clouds.png')
cloudsn=PhotoImage(file='weather-few-clouds-night.png')
mist=PhotoImage(file='weather-fog.png')
clear=PhotoImage(file='weather-clear.png')
clearn=PhotoImage(file='weather-clear-night.png')
rain=PhotoImage(file='weather-showers.png')
drizzle=PhotoImage(file='weather-showers-scattered.png')
cloudy=PhotoImage(file='weather-overcast.png')
thunder=PhotoImage(file='weather-storm.png')
z=0 #3
while z < 1:
city = self.sucheEntry.get()
city = city.replace(" ", "%20") #4
city = city.replace("ö", "oe")
city = city.replace("ü", "ue")
city = city.replace("ä", "ae")
city = city.replace("ß", "ss")
country_code = self.countryEntry.get()
CC = country_code.replace(" ", "")
if not city:
break
with urlopen(URL.format(city, CC, ID)) as file: #5
data = json.load(file)
city_name = data["name"]
temperature = data["main"]["temp"]
pressure = data["main"]["pressure"]
humidity = data["main"]["humidity"]
feels_like = data["main"]["feels_like"]
speed = data["wind"]["speed"]
deg = data["wind"]["deg"]
weather = data["weather"][0]["icon"] #10
visibility = data["visibility"]
speedkmh = speed * 3.6 # Umrechnung von m/s in km/h print(weather)
print(URL.format(city, CC, ID))
# Anfang Übergabe in UI
# Windgeschwindigkeit #6
if speedkmh > 117:
self.staerkeOut.config(text="12 Orkan")
elif speedkmh > 102:
self.staerkeOut.config(text="11 orkanartiger Sturm")
elif speedkmh > 88:
self.staerkeOut.config(text="10 schwerer Sturm")
elif speedkmh > 74:
self.staerkeOut.config(text="9 Sturm")
elif speedkmh > 61:
self.staerkeOut.config(text="8 stürmischer Wind ")
elif speedkmh > 49:
self.staerkeOut.config(text="7 steifer Wind")
elif speedkmh > 38:
self.staerkeOut.config(text="6 starker Wind")
elif speedkmh > 28:
self.staerkeOut.config(text="5 frische Brise")
elif speedkmh > 19:
self.staerkeOut.config(text="4 mäßige Brise")
elif speedkmh > 11:
self.staerkeOut.config(text="3 schwche Brise")
elif speedkmh > 5:
self.staerkeOut.config(text="2 leichte Briese")
else:
self.staerkeOut.config(text="0 - 1")
# Windrichtung #7
if 340 > deg >= 290:
self.directDirect.config(text="NW")
elif 290 > deg >= 250:
self.directDirect.config(text="W")
elif 250 > deg >= 200:
self.directDirect.config(text="SW")
elif 200 > deg >= 160:
self.directDirect.config(text="S")
elif 160 > deg >= 110:
self.directDirect.config(text="SE")
elif 110 > deg >= 70:
self.directDirect.config(text="E")
elif 70 > deg >= 20:
self.directDirect.config(text="NE")
else:
self.directDirect.config(text="N")
# Farbskalen #8
# Wind
if speedkmh < 117:
self.staerkeOut.config(bg='red')
if speedkmh < 89:
self.staerkeOut.config(bg='orange')
if speedkmh < 62:
self.staerkeOut.config(bg='yellow')
if speedkmh < 29:
self.staerkeOut.config(bg='lightgreen')
else: self.staerkeOut.config(bg='purple')
# Temperatur
if temperature < 32:
self.tempOut.config(bg='orange')
if temperature < 26:
self.tempOut.config(bg='yellow')
if temperature < 20:
self.tempOut.config(bg='lightgreen')
if temperature < 13:
self.tempOut.config(bg='turquoise')
if temperature < 6:
self.tempOut.config(bg='darkturquoise')
if temperature < 1:
self.tempOut.config(bg='blue')
if temperature < -5:
self.tempOut.config(bg='violet')
else: self.tempOut.config(bg='red')
# Werte #9
self.ortOut.config(text=city_name)
self.tempOut.config(text=(temperature, "°C"))
self.feelOut.config(text=(feels_like, "°C"))
self.humiOut.config(text=(humidity, "%"))
self.windOut.config(text=format(speedkmh, ",.2f"))
self.directOut.config(text=(deg,"°"))
self.wetterlage.config(text=weather)
# Wetterbilder
if weather == "01d":
self.weatherpic.config(image=clear)
command=UI.tada
elif weather == "01n":
self.weatherpic.config(image=clearn)
command=UI.tada
elif weather == "02d":
self.weatherpic.config(image=clouds)
command=UI.tada
elif weather == "02n":
self.weatherpic.config(image=cloudsn)
command=UI.tada
elif "03d" <= weather <= "04n":
self.weatherpic.config(image=cloudy)
command=UI.tada
elif weather == "09d":
self.weatherpic.config(image=rain)
command=UI.tada
elif "10d" <= weather <= "10nd":
self.weatherpic.config(image=drizzle)
command=UI.tada
elif "11d" <= weather <= "11n":
self.weatherpic.config(image=thunder)
command=UI.tada
elif "13d" <= weather <= "13n":
self.weatherpic.config(image=snow)
command=UI.tada
elif "50d" <= weather <= "50n":
self.weatherpic.config(image=mist)
command=UI.tada
# Ende Übergabe
z=z+1
Die Verwendeten Bilddateien befinden sich bei Ubuntu im Ordner: /usr/share/icons/gnome/48x48/status/
Schon mal Danke fürs lesen und nachdenken
Gruß
Valentin