Seite 1 von 2
Toplevel Fenster schliessen
Verfasst: Mittwoch 20. November 2019, 20:31
von Lacsap93
Hallo zusammen
Ich habe diese Frage schon in einem anderen Forum gestellt, leider konnte man mir da nicht weiterhelfen. Mir wurde empfohlen doch einmal hier nachzufragen:
Ich habe ein root Fenster mit vielen Werten. In diesem wird mit einem Button ein Toplevelfenster geöffnet. In diesem Toplevelfenster habe ich wieder einige Werte und einen Button, mit dem ich
nur das Toplevel Fenster wieder schliessen möchte.
Das Problem ist nun, wenn ich den Button zum schliessen des Toplevelfensters drücke, nur der Inhalt des Toplevelfensters gelöscht wird, aber das Fenster nicht geschlossen wird.
Folgender Code ist lauffähig und ziemlich zusammengeschrumpft. Das HorizontalScrolledFrame habe ich drinn gelassen, damit man sieht woher wetter1b "abstammt".
Code: Alles auswählen
import tkinter as tk
import json
import requests
import time
import datetime
Response = requests.get ("http://api.openweathermap.org/data/2.5/forecast?q=XXXXX,XXXX&APPID=XXXXXXXXXXXXXXX")
WeatherData=Response.json()
print(json.dumps(WeatherData, indent = 4, sort_keys = True))
class HorizontalScrolledFrame:
def __init__(self, master, **kwargs):
width = kwargs.pop('width', None)
height = kwargs.pop('height', None)
bg = kwargs.pop('bg', kwargs.pop('background', None))
self.outer = tk.Frame(master, **kwargs)
self.vsb = tk.Scrollbar(self.outer, orient="horizontal")
self.vsb.pack(fill="x", side="bottom")
self.canvas = tk.Canvas(self.outer, highlightthickness="0", width="600", height="375", bg="white")
self.canvas.pack(side="top", fill="both", expand=True)
self.canvas['xscrollcommand'] = self.vsb.set
self.vsb['command'] = self.canvas.xview
self.inner = tk.Frame(self.canvas, bg="turquoise")
self.canvas.create_window(0, 0, window=self.inner, anchor='nw')
self.inner.bind("<Configure>", self._on_frame_configure)
self.outer_attr = set(dir(tk.Widget))
def __getattr__(self, item):
if item in self.outer_attr:
return getattr(self.outer, item)
else:
return getattr(self.inner, item)
def _on_frame_configure(self, event=None):
x1, y1, x2, y2 = self.canvas.bbox("all")
height = self.canvas.winfo_height()
self.canvas.config(scrollregion = (0,0, x2, max(y2, height)))
class wetter1b (HorizontalScrolledFrame):
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.grid (row=0, column=0, padx=10, pady=10)
self.bild(0,None)
def bild(self,number,color):
if number==0:
zahl=self.neu_Tag0
if color is not None:
self.tag = tk.Button(self,bg=color, command=zahl)
else:
self.tag = tk.Button(self, command=zahl)
WetterBild = tk.PhotoImage(file = '/Users/pboehlen/Desktop/Programme/So.png')
self.tag.config(image=WetterBild, bg="black")
self.tag.image = (WetterBild)
self.tag.grid (row=1, column=number, padx=10, pady=10)
def neu_Tag0(self):
window = tk.Toplevel(self)
label = wetterTag0(window)
label.grid(row=1, column=0, padx=10, pady=10)
class wetterTag0 (HorizontalScrolledFrame):
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.grid (row=0, column=0, padx=10, pady=10)
self.bild0(0,None)
self.bild0(1,"light blue")
def quit(self):
self.destroy()
def bild0(self,number,color):
if color is not None:
self.tag = tk.Label(self,bg=color)
else:
self.tag = tk.Label(self)
WetterBild = tk.PhotoImage(file = '/Users/pboehlen/Desktop/Programme/So.png')
self.tag.config(image=WetterBild, bg="black")
self.tag.image = (WetterBild)
self.tag.grid (row=1, column=number, padx=10, pady=10)
self.schliessen=tk.Button(self, command=self.quit)
self.schliessen.grid (row=2, column=10, padx=10, pady=1)
root=tk.Tk()
root.protocol("WM_DELETE_WINDOW", quit)
if __name__ == "__main__":
root.title("Wetter Heute " + (time.strftime("%d.%m.%Y %H:%M:%S")))
root.geometry('800x450')
root.config(background="#BAFBAF")
app=wetter1b (master=root)
app.mainloop()
Kann mir jemand mit meinem Problem weiterhelfen?
Ich hatte auch schon im Internet gesucht, aber leider die passende Lösung noch nicht gefunden.
Liebe Grüsse
Lacasp
Re: Toplevel Fenster schliessen
Verfasst: Mittwoch 20. November 2019, 21:28
von Sirius3
Das ist alles ziemlich verworren. Alles auf oberster Ebene (außer Definitionen) gehört in eine Funktion, die üblicherweise main genannt wird, und in diesem `if __name__`-Block aufgerufen wird. So wie der da jetzt unmotiviert mitten drin steht, macht das keinen Sinn.
Nach Konvention werden nur Klassen mit großem Anfangsbuchstaben geschrieben, alle Variablennamen und Methodennamen werden klein_mit_unterstrich geschrieben. Dass das stellenweise genau umgekehrt ist, macht das Lesen des Code sehr schwierig. Was soll die 0 bei neu_Tag0, wetterTag0 oder bild0? Namen sollten aussagekräftig sein.
Es macht auch keinen Sinn `bild0` zwei mal aufzurufen, weil darin der Schließen-Button auch zwei mal erstellt wird. Am besten erzeugt mal alle Widgets direkt in __init__, dann findet man sie einfach wieder.
Wo erstellst Du das TopLevel-Fenster und welches Objekt wird beim Schließen zerstört?
Re: Toplevel Fenster schliessen
Verfasst: Donnerstag 21. November 2019, 13:11
von Lacsap93
Hallo Sirius
Danke für die Antwort. Ich habe den Code nun angepasst und hoffe ich habe es so gemacht, wie du gemeint hast:
Code: Alles auswählen
import tkinter as tk
import json
import requests
import time
import datetime
Response = requests.get ("http://api.openweathermap.org/data/2.5/forecast?q=Alchenflüh,CH&APPID=d09ab103ebca7fb9d170815f55aedf98")
WeatherData=Response.json()
print(json.dumps(WeatherData, indent = 4, sort_keys = True))
class HorizontalScrolledFrame:
def __init__(self, master, **kwargs):
width = kwargs.pop('width', None)
height = kwargs.pop('height', None)
bg = kwargs.pop('bg', kwargs.pop('background', None))
self.outer = tk.Frame(master, **kwargs)
self.vsb = tk.Scrollbar(self.outer, orient="horizontal")
self.vsb.pack(fill="x", side="bottom")
self.canvas = tk.Canvas(self.outer, highlightthickness="0", width="600", height="375", bg="white")
self.canvas.pack(side="top", fill="both", expand=True)
self.canvas['xscrollcommand'] = self.vsb.set
self.vsb['command'] = self.canvas.xview
self.inner = tk.Frame(self.canvas, bg="turquoise")
self.canvas.create_window(0, 0, window=self.inner, anchor='nw')
self.inner.bind("<Configure>", self._on_frame_configure)
self.outer_attr = set(dir(tk.Widget))
def __getattr__(self, item):
if item in self.outer_attr:
return getattr(self.outer, item)
else:
return getattr(self.inner, item)
def _on_frame_configure(self, event=None):
x1, y1, x2, y2 = self.canvas.bbox("all")
height = self.canvas.winfo_height()
self.canvas.config(scrollregion = (0,0, x2, max(y2, height)))
class Wetter1b (HorizontalScrolledFrame):
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.grid (row=0, column=0, padx=10, pady=10)
self.bild(0,None)
def bild(self,number,color):
if number==0:
zahl=self.neu_tag0
if color is not None:
self.tag = tk.Button(self,bg=color, command=zahl)
else:
self.tag = tk.Button(self, command=zahl)
wetter_bild = tk.PhotoImage(file = '/Users/pboehlen/Desktop/Programme/So.png')
self.tag.config(image=wetter_bild, bg="black")
self.tag.image = (wetter_bild)
self.tag.grid (row=1, column=number, padx=10, pady=10)
def neu_tag0(self):
window = tk.Toplevel(self)
label = WetterTag0(window)
label.grid(row=1, column=0, padx=10, pady=10)
class WetterTag0 (Wetter1b):
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.grid (row=0, column=0, padx=10, pady=10)
self.schliessen=tk.Button(self, command=self.quit)
self.schliessen.grid (row=2, column=10, padx=10, pady=1)
self.bild0(0,None)
self.bild0(1,"light blue")
def quit(self):
self.destroy()
def bild0(self,number,color):
if color is not None:
self.tag = tk.Label(self,bg=color)
else:
self.tag = tk.Label(self)
wetter_bild = tk.PhotoImage(file = '/Users/pboehlen/Desktop/Programme/So.png')
self.tag.config(image=wetter_bild, bg="black")
self.tag.image = (wetter_bild)
self.tag.grid (row=1, column=number, padx=10, pady=10)
if __name__ == "__main__":
root=tk.Tk()
root.title("Wetter Heute " + (time.strftime("%d.%m.%Y %H:%M:%S")))
root.geometry('800x450')
root.config(background="#BAFBAF")
root.protocol("WM_DELETE_WINDOW", quit)
app=Wetter1b (master=root)
app.mainloop()
Dies ist nur ein Teil des Codes. Es würde WetterTag0-WetterTag4 geben. Wobei 0 für heute steht und 4 für über- übermorgen (also in 3 Tagen). Ich weiss dass die Wahl der Namen nicht ganz optimal ist, aber ich dachte, dass dies einfacher wäre als die Variable WetterUeberUebermorgen zu nennen. Und so haben alle Variablen in der Klasse WetterTag0 auch eine Null hinten dran so wie bild0 und neu_Tag0, damit man sieht, wohin sie genau gehört.
Das Toplevel-Fenster wird in der Klasse Wetter1b erstellt und ich dachte eigentlich, dass WetterTag0 zerstört wird. Aber wenn du mich nun so fragst bin ich mir unsicher.
Re: Toplevel Fenster schliessen
Verfasst: Donnerstag 21. November 2019, 14:31
von Sirius3
Was unterscheidet denn einen morgen von übermorgen? Das sollten keine eigenen Klassen mit lustig durchnummerierten Methoden und Funktionen sein, sondern eine Klasse, die man für beliebige Tage benutzen kann. Welcher Tag konkret, wird über die Argumente festgelegt.
In Wetter1b.bild ist `zahl` nur definiert, wenn number == 0 ist, das führt also sonst zu einem Fehler.
Die Unterscheidung nach ob `color is None` oder nicht sollte so wenig Code wie möglich enthalten, also nicht die gesamte Label-Generierung in beiden Zweigen vorkommen.
Re: Toplevel Fenster schliessen
Verfasst: Freitag 22. November 2019, 12:54
von Lacsap93
@Sirius3 Wenn ich das alles geändert habe, sollte der Schliessbefehl dann funktionieren? Ich habe im Moment zu wenig Zeit das Programm anzupassen aber vielleicht schaffe ich es am Wochenende.
Re: Toplevel Fenster schliessen
Verfasst: Freitag 22. November 2019, 13:16
von __deets__
Der Schliessbefehl funktioniert, wenn er auf dem richtigen Objekt aufgerufen wird. Das es das nicht wird hat erstmal mit der Struktur nichts zu tun, aber mit guter Struktur kommt hoffentlich Verstaendnis fuer das Problem.
Re: Toplevel Fenster schliessen
Verfasst: Dienstag 26. November 2019, 13:11
von Lacsap93
Hallo zusammen
Wie kann ich denn machen, dass eine einzige Klasse für den Toplevel-Aufruf reicht, da ja nicht immer derselbe Inhalt im Toplevel-Fenster ist? Ich habe es mit if-Anweisungen versucht, aber das klappt leider nicht (jedenfalls nicht so wie ich das versucht habe).
Ich hatte verschiedene Lösungsansätze, aber leider funktionierte keiner. Der unten stehende Code ist einer davon. Dieser gibt im Toplevelfenster vier Bilder aus, wobei die zwei ersten Buttons und die hinteren zwei Labels sind. Es sieht so aus, als würde mir hier noch die Hauptklasse dazwischenfunken, denn eigentlich sollten nur die hinteren zwei Labels ausgegeben werden.
Code: Alles auswählen
import tkinter as tk
import json
import requests
import time
import datetime
Response = requests.get ("http://api.openweathermap.org/data/2.5/forecast?q=Alchenflüh,CH&APPID=d09ab103ebca7fb9d170815f55aedf98")
WeatherData=Response.json()
print(json.dumps(WeatherData, indent = 4, sort_keys = True))
class HorizontalScrolledFrame:
def __init__(self, master, **kwargs):
width = kwargs.pop('width', None)
height = kwargs.pop('height', None)
bg = kwargs.pop('bg', kwargs.pop('background', None))
self.outer = tk.Frame(master, **kwargs)
self.vsb = tk.Scrollbar(self.outer, orient="horizontal")
self.vsb.pack(fill="x", side="bottom")
self.canvas = tk.Canvas(self.outer, highlightthickness="0", width="600", height="375", bg="white")
self.canvas.pack(side="top", fill="both", expand=True)
self.canvas['xscrollcommand'] = self.vsb.set
self.vsb['command'] = self.canvas.xview
self.inner = tk.Frame(self.canvas, bg="turquoise")
self.canvas.create_window(0, 0, window=self.inner, anchor='nw')
self.inner.bind("<Configure>", self._on_frame_configure)
self.outer_attr = set(dir(tk.Widget))
def __getattr__(self, item):
if item in self.outer_attr:
return getattr(self.outer, item)
else:
return getattr(self.inner, item)
def _on_frame_configure(self, event=None):
x1, y1, x2, y2 = self.canvas.bbox("all")
height = self.canvas.winfo_height()
self.canvas.config(scrollregion = (0,0, x2, max(y2, height)))
class Wetter1b (HorizontalScrolledFrame):
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.grid (row=0, column=0, padx=10, pady=10)
self.bild(0,None)
self.bild(1,None)
def bild(self,number,color):
if number==0:
zahl=self.neu_tag0
if number==1:
zahl=self.neu_tag1
if color is not None:
self.tag = tk.Button(self,bg=color, command=zahl)
else:
self.tag = tk.Button(self, command=zahl)
wetter_bild = tk.PhotoImage(file = '/Users/pboehlen/Desktop/Programme/So.png')
self.tag.config(image=wetter_bild, bg="black")
self.tag.image = (wetter_bild)
self.tag.grid (row=1, column=number, padx=10, pady=10)
def neu_tag0(self):
window = tk.Toplevel(self)
label = WetterTag0(window)
label.grid(row=1, column=0, padx=10, pady=10)
def neu_tag1(self):
window = tk.Toplevel(self)
label = WetterTag0(window)
label.grid(row=1, column=0, padx=10, pady=10)
class WetterTag0 (Wetter1b):
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.grid (row=0, column=0, padx=10, pady=10)
self.schliessen=tk.Button(self, command=self.quit)
self.schliessen.grid (row=2, column=10, padx=10, pady=1)
if Wetter1b.neu_tag0==True:
self.bild0(0,"light blue")
self.bild0(1,"light blue")
elif Wetter1b.neu_tag1==True:
self.bild0(2,"red")
self.bild0(3,"red")
else:
self.bild0(4,"green")
self.bild0(5,"green")
def quit(self):
self.destroy()
def bild0(self,number,color):
if color is not None:
self.tag = tk.Label(self,bg=color)
else:
self.tag = tk.Label(self)
wetter_bild = tk.PhotoImage(file = '/Users/pboehlen/Desktop/Programme/So.png')
self.tag.config(image=wetter_bild, bg="black")
self.tag.image = (wetter_bild)
self.tag.grid (row=1, column=number, padx=10, pady=10)
if __name__ == "__main__":
root=tk.Tk()
root.title("Wetter Heute " + (time.strftime("%d.%m.%Y %H:%M:%S")))
root.geometry('800x450')
root.config(background="#BAFBAF")
root.protocol("WM_DELETE_WINDOW", quit)
app=Wetter1b (master=root)
app.mainloop()
Re: Toplevel Fenster schliessen
Verfasst: Dienstag 26. November 2019, 13:24
von Sirius3
Dein Programm leidet immer noch an den selben Fehlern, die ich schon am Anfang beschrieben hatte, jetzt kommt noch hinzu, dass in WetterTag0 auf Wetter1b.neu_tag0 zugegriffen wird, was so keinen Sinn ergibt und man auch nicht raten kann, was Du denn damit bezwecken wolltest.
Natürlich funkt die Hauptklasse dazwischen, weil Du WetterTag0 von Wetter1b ableitest.
Re: Toplevel Fenster schliessen
Verfasst: Donnerstag 28. November 2019, 12:54
von Lacsap93
Sirius3 hat geschrieben: Mittwoch 20. November 2019, 21:28
Hallo Sirius
Ich wollte erreichen, dass wenn ich auf den Button von "Heute" (Tag0) klicke auch die Detailansicht von heute öffnet. Und wenn ich auf den Button von morgen (Tag1) klicke auch die Detailansicht von morgen öffnet.
Sirius3 hat geschrieben: Dienstag 26. November 2019, 13:24
jetzt kommt noch hinzu, dass in WetterTag0 auf Wetter1b.neu_tag0 zugegriffen wird, was so keinen Sinn ergibt und man auch nicht raten kann, was Du denn damit bezwecken wolltest.
Ich weiss, dass das nicht gut ist, denn es geht ja auch gar nicht. deshalb habe ich oben gefragt ob mir jemand erklären kann, wie das funktioniert.
Sirius3 hat geschrieben: Dienstag 26. November 2019, 13:24
Dein Programm leidet immer noch an den selben Fehlern, die ich schon am Anfang beschrieben hatte,
Sirius3 hat geschrieben: Mittwoch 20. November 2019, 21:28
Alles auf oberster Ebene (außer Definitionen) gehört in eine Funktion, die üblicherweise main genannt wird, und in diesem `if __name__`-Block aufgerufen wird.
Wie muss ich denn das mit der Funktion auf der obersten Ebene machen? Dieser Teil muss ich in der Doku übersehen haben.
Re: Toplevel Fenster schliessen
Verfasst: Donnerstag 28. November 2019, 13:00
von __deets__
Zur letzten Frage sieht das Muster immer gleich aus:
Code: Alles auswählen
def main():
diese_variable_ist_nicht_global_und_das_ist_gut = MainWindow()
...
if __name__ == "__main__": # import guard der verhindert, dass main() aufgerufen wird, wenn das Skript nicht direkt ausgefuehrt, sondern importiert wird
main()
Re: Toplevel Fenster schliessen
Verfasst: Donnerstag 28. November 2019, 13:06
von Sirius3
@Lacsap93: ja, aber was hat WetterTag0, was mit Deiner Beschreibung jetzt klarer ist, eigentlich WetterDetails heißen sollte, mit Wetter1b, das eigentlich WetterUbersicht heißen sollte, zu tun?
Trenne das sauber, dann hast Du auch kein Problem.
Re: Toplevel Fenster schliessen
Verfasst: Freitag 29. November 2019, 13:56
von Lacsap93
Danke für die Antworten
@__deets__
Aber so wie unten ist doch das auch nicht korrekt oder? Denn das bringt ja nichts. Aber wenn ich mein Hauptfenster (app=WetterUebersicht (master=root)) in die main Definition einfüge, habe ich dann natürlich das Problem, dass app von "app.mainloop()" nicht definiert ist. Und app.mainloop() darf ja nicht in die def-Anweisung hinein soviel ich weiss.
Code: Alles auswählen
root=tk.Tk()
def main():
root.title("Wetter Heute " + (time.strftime("%d.%m.%Y %H:%M:%S")))
root.geometry('800x450')
root.config(background="#BAFBAF")
root.protocol("WM_DELETE_WINDOW", quit)
if __name__ == "__main__": # import guard der verhindert, dass main() aufgerufen wird, wenn das Skript nicht direkt ausgefuehrt, sondern importiert wird
main()
app=WetterUebersicht (master=root)
app.mainloop()
Was muss denn alles in die Definition?
@Sirius3
Wie kann ich denn in der Detail-Klasse die Unterscheidung machen, von welchem Tag die Detail-Daten geöffnet werden sollen, wenn ich beide Klassen trennen soll? Denn die Unterscheidung was geöffnet werden soll, wird ja in der Übersichts-Klasse gemacht.
==> Mir Ist bewusst, dass dies vielleicht ein bisschen "dumme" Fragen sind. Aber ich komme echt nicht drauf im Moment.
Re: Toplevel Fenster schliessen
Verfasst: Freitag 29. November 2019, 14:34
von Sirius3
Warum sollte denn `mainloop` nicht hineindürfen? Wer verbietet das?
Code: Alles auswählen
def main():
root=tk.Tk()
root.title("Wetter Heute " + (time.strftime("%d.%m.%Y %H:%M:%S")))
root.geometry('800x450')
root.config(background="#BAFBAF")
root.protocol("WM_DELETE_WINDOW", quit)
app=WetterUebersicht (master=root)
app.mainloop()
if __name__ == "__main__":
main()
Klassen haben auch Parameter. Nutzt Du auch fleißig. Der Detail-Klasse mußt Du den Tag übergeben.
Re: Toplevel Fenster schliessen
Verfasst: Dienstag 3. Dezember 2019, 13:15
von Lacsap93
Hallo Sirius
Danke für die Antwort.
Ich steh wieder einmal komplett auf dem Schlauch... Verstehe ich dich richtig, dass man die Anweisung, welcher Tag genommen werden soll, über die Parameter der Detail-Klasse gemacht werden soll?
Re: Toplevel Fenster schliessen
Verfasst: Dienstag 3. Dezember 2019, 14:17
von __deets__
Du schreibst
Was du stattdessen tun solltest ist (in Ansaetzen):
Code: Alles auswählen
class WetterProTag:
def __init__(self, tages_abstand):
self._tages_abstand = tages_abstand
... #
morgen = WetterProTag(1)
uebermorgen = WetterProTag(2)
ueberuebermorgen = WetterProTag(3)
in_vier_tagen = WetterProTag(4)
Oder einfach
Code: Alles auswählen
wochen_wetter = [WetterProTag(abstand) for abstand in range(1, 8)]
Re: Toplevel Fenster schliessen
Verfasst: Dienstag 3. Dezember 2019, 15:14
von __deets__
Ein minimales und nicht sehr huebsches Beispiel:
Code: Alles auswählen
import tkinter as tk
import random
class WetterProTag:
def __init__(self, offset):
self._offset = offset
self._frame = None
self._temperature_var = tk.StringVar()
def setup_ui(self, parent):
frame = tk.Frame(parent)
description = tk.Label(frame, text=f"Tag {self._offset}")
temperature = tk.Label(frame, textvariable=self._temperature_var)
description.pack(side=tk.LEFT, anchor=tk.W)
temperature.pack(side=tk.RIGHT, anchor=tk.E)
return frame
def update(self, text):
self._temperature_var.set(text)
def setup_weather_display(root):
days = [WetterProTag(i) for i in range(7)]
for day in days:
frame = day.setup_ui(root)
frame.pack(anchor=tk.N)
def update(temperatures):
for day, temp in zip(days, temperatures):
day.update(f"{temp}C")
return update
def cyclic_update(root, update_function):
temperatures = random.sample(list(range(20, 35)), 7)
update_function(temperatures)
root.after(1000, lambda: cyclic_update(root, update_function))
def main():
root = tk.Tk()
update_function = setup_weather_display(root)
cyclic_update(root, update_function)
root.mainloop()
if __name__ == '__main__':
main()
Re: Toplevel Fenster schliessen
Verfasst: Freitag 6. Dezember 2019, 14:37
von Lacsap93
Danke ihr beiden. Ich werde das frühestens morgen ausprobieren können.
Ich freue mich schon drauf

Re: Toplevel Fenster schliessen
Verfasst: Sonntag 8. Dezember 2019, 14:32
von Lacsap93
@__deets__ wozu sind den die beiden "f" in
Code: Alles auswählen
description = tk.Label(frame, text=f"Tag {self._offset}")
und in
Wenn ich diese im Programm lasse, gibt es mir einen Fehler und wenn ich sie rauslösche, dann ist das Programm lauffähig, aber es werden keine Werte angezeigt nur ein Fenster in dem 7x steht "Tag {self._offset}{temp}C"
Die Anzahl hängt ja damit zusammen:
und das ist ja auch das, was mir Sirius geschrieben hat.
Aber wo muss ich denn nun die Verlinkung von der anderen Klasse (Wetter Übersicht) machen, damit das Programm weiss, welche Tages-Details es öffnen muss.
Leider habe ich bei deinem Programm überhaupt keinen Durchblick was ich wo, wie und warum einfügen muss, dass es zu meinem Programm passt.
Ich versuche aber noch den Durchblick zu erhalten
Re: Toplevel Fenster schliessen
Verfasst: Sonntag 8. Dezember 2019, 14:38
von Fire Spike
der fstring funktioniert erst ab Python3.6 und höher.
Re: Toplevel Fenster schliessen
Verfasst: Sonntag 8. Dezember 2019, 14:43
von Sirius3
Deine Python-Version ist zu alt, als dass sie f-Strings kennen würde. Da es das aber schon seit einigen Jahren gibt, solltest Du mal ein Update in Erwägung ziehen.
Dein Programm ist so verquer, dass es kaum zu retten ist. Fang einfach mit __deets__` Vorlage frisch an.