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()
Ich hatte auch schon im Internet gesucht, aber leider die passende Lösung noch nicht gefunden.
Liebe Grüsse
Lacasp