Toplevel Fenster schliessen

Fragen zu Tkinter.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

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()

Lacsap93
User
Beiträge: 23
Registriert: Mittwoch 20. November 2019, 08:50

Danke ihr beiden. Ich werde das frühestens morgen ausprobieren können.
Ich freue mich schon drauf :-)
Lacsap93
User
Beiträge: 23
Registriert: Mittwoch 20. November 2019, 08:50

@__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
Fire Spike
User
Beiträge: 329
Registriert: Montag 13. Mai 2019, 16:05
Wohnort: Erde

der fstring funktioniert erst ab Python3.6 und höher.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Lacsap93
User
Beiträge: 23
Registriert: Mittwoch 20. November 2019, 08:50

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.
Antworten