Frage zu Notenprogramm

Fragen zu Tkinter.
Antworten
Kleonx
User
Beiträge: 14
Registriert: Dienstag 31. Mai 2016, 17:38

Code: Alles auswählen

from tkinter import *


liste = []
liste2 = []
# Die folgende Funktion soll ausgeführt werden, wenn
# der Benutzer den Button Klick OK anklickt
def button_action():
    ycord = 10
    xcord = 0
    entry_text = eingabefeld.get()
    notenanzahl = int(entry_text)
    if (entry_text == ""):
        starting_label.config(text="Gib zuerst die Notenanzahl ein.")

    else:
        global notenanzahl, eingabefeld2, Entry ## globalisiert diese Variabeln
        starting_label.grid_forget()
        eingabefeld.grid_forget()
        starting_button.grid_forget()
        exit_button.grid_forget()
        for i in range(notenanzahl):
            ycord += 20
            liste.append(Entry(fenster))
            liste[-1].place(x = xcord,y=ycord)

        notenanzahl = len(liste)
        ycord += 30
        eingabefelder_label = Label(fenster)
        eingabefelder_label.config(text="Gib deinen Notenschnitt ein:")
        eingabefelder_label.place(x= -30, y = ycord, width = 200, height=30)
        ycord += 30
        eingabefeld2 = Entry(fenster)
        eingabefeld2.place(x=0, y=ycord, width=125, height=20)
        ycord += 30
        calcualtion_button = Button(fenster,text="OK!", command=calculate_needed_mark)
        calcualtion_button.place(x=0, y=ycord, width=125, height=20)
        ycord += 30
        needed_mark_label = Label(fenster)
        needed_mark_label.place(x= -30, y = ycord, width = 200, height=30)

## Rechnet die Note aus die noch benötigt wird
def calculate_needed_mark():
    for i in range(notenanzahl):
            liste2.append(int(Entry.get()))
  ##  needed_mark = (notenanzahl+1)*notenschnitt-allenoten
    print(liste2)

## Fenster Einstellungen

fenster = Tk()
fenster.title("Notenprogramm")
fenster.geometry("500x500")

# Anweisungs-Label
my_label = Label(fenster, text="Gib deine Noten ein: ")

starting_label = Label(fenster)

# Hier kann der Benutzer eine Eingabe machen
eingabefeld = Entry(fenster, bd=5, width=40)

starting_button = Button(fenster, text="Weiter", command=button_action)
exit_button = Button(fenster, text="Beenden", command=fenster.quit)


# Nun fügen wir die Komponenten unserem Fenster hinzu
my_label.grid(row = 0, column = 0)
eingabefeld.grid(row = 0, column = 1)
starting_button.grid(row = 1, column = 0)
exit_button.grid(row = 1, column = 1)
starting_label.grid(row= 2, column =0)

mainloop()

Welche Eingebefelder muss ich bei der for schleife nehmen?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kleonx: wenn Du den Überblick verloren hast, dann mußt Du Dein Programm besser strukturieren. Eine Funktion die mehr als 30 Zeilen hat, ist meist schon zu lang. Du machst in der Funktion auch zu viele verschiedene Sachen. Zudem macht Dein händisches grid per place den Code auch nicht übersichtlicher. Um sich zurechtzufinden helfen sinnvolle Variablennamen. Hättest Du eine Variable noteneingabefelder aka grade_inputfields wäre doch klar, woher Du Deine Noten lesen müßtest. Würdest Du keine globalen Variablen verwenden, könntest Du ganz einfach zurückverfolgen, wo welcher Wert herkommt, den Du in irgendeiner Funktion brauchst. Du siehst also, die Tipps, die wir Dir schon von Anfang an geben, sind nicht einfach nur dazu da, um Dich zu ärgern, sondern gehören zum Handwerkszeug eines jeden Programmierers, damit er nicht früher oder später vor dem selben Problem steht wie Du, dass er nämlich den Überblick verloren hat.
Antworten