Mit Thinker einen Zähler programmieren

Fragen zu Tkinter.
Antworten
LordMord01
User
Beiträge: 2
Registriert: Montag 21. Juni 2021, 20:05

Das ist das Programm
import time
from tkinter import*
def acion1():
t = eingabe1.get()
e = eingabe2.get()
try:
t = float(t)
e = int(e)
n = 0
while n != e+1:
label2.config(text=n)
n = n+1
time.sleep(t)
except ValueError:
label2.config(text="Nur Zahlen du Dummkopf")
def acion2():
fens.destroy()

fens = Tk()
fens.minsize(width=300,height= 150)
label1 = Label(fens, text="Wie schnell soll gezählt werden?(max. 0.0001) ")
label2 = Label(fens, text="0")
label3 = Label(fens, text="Wie lang soll die Aufzählung sein?")
eingabe1 = Entry(fens)
eingabe2 = Entry(fens)
knopf1 = Button(fens, text="Generieren", command=acion1)
knopf2 = Button(fens, text="Beenden", command=acion2)

label1.pack()
eingabe1.pack()
label3.pack()
eingabe2.pack()
knopf1.pack()
label2.pack()
knopf2.pack()

fens.mainloop()

So das Problem das ich damit habe ist das ich möchte das dieses Programm mir in Echtzeit die einzelnen Schritte anzeigt( nicht das Endergebnis keine Liste sondern die Echtzeitberechungen (also wie bei einem Timer)) wäre super wenn mir dabei irgendwer helfen könnte
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

*-Importe sind schlecht, weil man damit verschleiert, woher welcher Name kommt.
Benutze aussagekräftige Variablennamen, t und e sind das nicht, vor allem wenn sie mehrmals verwendet werden. Nummern an Namen sind auch nicht aussagekräftig. Benutze keine kryptischen Abkürzungen. Was haben Sümpfe mit einer GUI zu tun?
Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen.
Und nun der Fehler, den viele bei GUIs machen: man darf keine Langlaufenden Schleifen benutzen, eine Funktion muß so schnell wie möglich wieder an die GUI-Hauptschleife zurückkehren.
Das macht man mit `after`, wie hunderte Beiträge hier im Forum das erklären.
Anwender mögen es, beleidigt zu werden.

Code: Alles auswählen

import tkinter as tk
from functools import partial

def run_counter(aktuell, geschwindigkeit, maximalwert, ausgabe):
    ausgabe['text'] = aktuell
    if aktuell < maximalwert:
        ausgabe.after(int(geschwindigkeit*1000), run_counter, aktuell + 1, geschwindigkeit, maximalwert, ausgabe)

def start_counter(eingabe1, eingabe2, ausgabe):
    try:
        geschwindigkeit = float(eingabe1.get())
        maximalwert = int(eingabe2.get())
    except ValueError:
        ausgabe['text'] = "Nur Zahlen, bitte"
    else:
        run_counter(0, geschwindigkeit, maximalwert, ausgabe)

def main():
    fenster = tk.Tk()
    fenster.minsize(width=300, height=150)
    tk.Label(fenster, text="Wie schnell soll gezählt werden? (max. 0.0001) ").pack()
    eingabe1 = tk.Entry(fenster)
    eingabe1.pack()
    tk.Label(fenster, text="Wie lang soll die Aufzählung sein?").pack()
    eingabe2 = tk.Entry(fenster)
    eingabe2.pack()
    ausgabe = tk.Label(fenster, text="0")
    tk.Button(fenster, text="Generieren", command=partial(start_counter, eingabe1, eingabe2, ausgabe)).pack()
    ausgabe.pack()
    tk.Button(fenster, text="Beenden", command=fenster.destroy).pack()
    fenster.mainloop()

if __name__ == "__main__":
    main()
LordMord01
User
Beiträge: 2
Registriert: Montag 21. Juni 2021, 20:05

Erst mal Vielen Dank! Ich fange erst gerade mit dem Programmieren an und dachte ich könnte mit dem Wissen was ich jetzt schon habe so etwas bauen was wohl nicht der Fall war ich dachte dieses Programm nie für die Öffentlichkeit sondern nur für meinen Privaten gebrauch sonst hätte ich natürlich die Beleidigungen raus genommen.
Antworten