Seite 1 von 2

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

Code: Alles auswählen

 day.update(f"{temp}C")
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:

Code: Alles auswählen

    days = [WetterProTag(i) for i in range(7)]
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.

Re: Toplevel Fenster schliessen

Verfasst: Mittwoch 11. Dezember 2019, 12:41
von Lacsap93
Hallo zusammen
Danke für den Tipp mit dem neuen Programm :-) Ich versuch Mal mit __deets__ "Vorlage klar zu kommen und das Programm noch einmal zu schreiben.