Anfänger Frage zu Eingabefeldern

Fragen zu Tkinter.
Antworten
tom16092
User
Beiträge: 5
Registriert: Sonntag 3. Mai 2020, 22:13

Guten Abend,

ich habe mich nach langem hin und her dazu entschieden meine Frage doch einmal hier zu stellen. Mir kommt sie zu simpel vor, ich finde aber jetzt schon seit Stunden keine Lösung. Also, ich versuche einen Integer Wert vom Nutzer über ein Eingabefeld abzufragen, welcher dann durch das Programm auf seine Korrektheit überprüft wird und danach weiterverarbeitet werden soll. Da ich für Python noch am Anfang stehe ist es bis jetzt nicht mehr.

Das Problem stellt für mich folgende Fehlermeldung da:

ValueError: invalid literal for int() with base 10: ''

... welche bedeutet, das der int() welcher von mir gefordert wird nicht umgeändert werden kann da es sich um einen String ' ' handelt. Von anderen Sprachen weiß ich, dass es möglich ist einen String in einen Integer Wert zu ändern und auch für Python sollte es, meines Wissens nach, diese Funktion geben indem ich die int() Funktion verwende.

Ich frage den den Wert im unten stehenden Code extra noch einmal ab, da ich mir sicher bin einen Integer zu haben. Leider akzeptiert das Programm den Integer Wert aber nicht, was kann ich tun?

Hier mein Code:

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
from tkinter import *
from tkinter import messagebox

def senden_func():
    noten = []
    counter = 0
    break_counter = 0
    note = int(eingabefeld.get())
    while counter != 11:
        counter = counter + 1
        if note != 1 and note != 2 and note != 3 and note != 4 and note != 5 and note != 6:
            break_counter = break_counter + 1
            print('Error: Das Notenspektrum 1 bis 6 wurde nicht erfüllt.')
            break
        else:
            noten.append(int(eingabefeld.get()))
            eingabefeld.delete(0, END)
    if break_counter == 0:
        summe = sum(noten)
        d_schnitt = summe/11.0
        text = "\
        ************************\n\
        Note: " + str(d_schnitt) + "\n\
        ************************"
        messagebox.showinfo(message = text, title = "Info")
    
fenster = Tk()
fenster.title('Notenberechnung')
title_label = Label(fenster, text = 'Bitte gib deine Noten in das unten \nstehende Feld, nacheinander ein.')
eingabefeld = Entry(fenster, bd = 5, width = 40)
abschicken_button = Button(fenster, text = 'Senden', command = senden_func)
    
title_label.pack()
eingabefeld.pack()
abschicken_button.pack()
    
fenster.mainloop()

Vielen Dank für eure Hilfe!
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Du schreibst doch selbst, dass Du prüfen willst, ob der Nutzer eine Zahl eingegeben hat. Tust Du aber nicht und wunderst Dich, dass Python das für dich tut. Ein leerer String kann halt nicht in eine Zahl umgewandelt werden. Diesen Fehler (Exception) musst Du abfangen (Exception handling).
GUI-Programmierung funktioniert so nicht. Du kannst nicht eine Schleife programmieren und wiederholt das Entry-Feld abfragen. Der Nutzer hat gar keine Möglichkeit, eine Eingabe zu machen. Jedes nicht- triviale GUI-Programm braucht Klassendefinitionen, um sich Zustand zwischen Ereignis-Routinen merken zu können. Also erste Zahl eingeben, Knopf drücken, zweite Zahl eingeben, Knopf drücken, usw.
Antworten