Seite 1 von 1

Prüfen ob IntVar leer ist

Verfasst: Sonntag 25. April 2021, 21:16
von Kahnbein.Kai
Guten Abend,
ich möchte ein Entryfeld vor dem Programmstart auf dessen Inhalt prüfen. Es darf für diesen Fall nicht leer sein, andere Fälle sollen hier erst mal nicht behandelt werden.
Ich habe folgenden Code:

Code: Alles auswählen

import tkinter as tk

class Programm(tk.Tk):
    
    def __init__(self):
        super().__init__()
        
        self.title("Test Ablaufprogramm")
        
        self.wiederholungen = tk.IntVar(self, 5)
        
        self.ausgabe = tk.StringVar(self, "Ausgabe")
        
        self.ausgabe_mitte = tk.StringVar(self, "")
        
        tk.Label(self, text='Wiederholungen:').grid(row= 0,column = 0 )
        
        tk.Entry(self,width=5, textvariable=self.wiederholungen).grid(row=0, column=1)
        
        tk.Label(self, textvariable=self.ausgabe).grid(row=2,columnspan=10)
        
        self.label_mitte = tk.Label(self,height = 10, width= 40, bg= 'green', textvariable = self.ausgabe_mitte, font = ("Arial", 20))
        self.label_mitte.grid(row=3, columnspan=10)
        
        self.button_start = tk.Button(self, text="Start", width=10, command=self.start)
        self.button_start.grid(row=4, columnspan=10)
     
    def start(self):
        if len(str(self.wiederholungen.get())) == 0:
            self.ausgabe_mitte.set("ENTER A NUMBER")
        print(self.wiederholungen.get())
        self.ausgabe_mitte.set(self.wiederholungen.get())            

def main():
    root = Programm()
    root.mainloop()
    
if __name__ == "__main__":
    main()
        
Durch die Abfrage

Code: Alles auswählen

if len(str(self.wiederholungen.get())) == 0:
            self.ausgabe_mitte.set("ENTER A NUMBER")
sollte doch eigentlich Überprüft werden, ob die Variable self.wiederholungen die Länge 0 hat.
Irgendwie kommt mir Tkinter mit dieser Fehlermeldung zuvor.
_tkinter.TclError: expected floating-point number but got ""

Kann ich die Abfrage so gestalten das tkinter nicht dazwischen funkt ?

Gruß Kai

Re: Prüfen ob IntVar leer ist

Verfasst: Sonntag 25. April 2021, 21:43
von Welpe
Du hast self.wiederholungen als IntVar deklariert, warum wandelst Du das in der Abfrage in einen String um? Wenn das Feld die Länge 0 hat, ist es doch leer.

Dann würde doch das mehr Sinn machen.

Code: Alles auswählen


if self.wiederholungen.get() = ‘‘:
    self.ausgabe_mitte.set("ENTER A NUMBER")
Bin Anfänger und habe grad keinen Rechner zum testen da aber das würde ich mal probieren.

Re: Prüfen ob IntVar leer ist

Verfasst: Sonntag 25. April 2021, 22:23
von __blackjack__
@Kahnbein.Kai: `IntVar.get()` liefert keine Zeichenkette sondern eine ganze Zahl. Ein Vergleich mit "" oder der Versuch `len()` auf eine ganze Zahl anzuwenden ist also nicht sinnvoll. Sollte der Benutzer in das Eingabefeld etwas eingegeben haben was nicht in eine Zahl umgewandelt werden kann, dann löst `get()` eine `TclError` aus. Und *das* ist der Weg das zu erkennen. Du musst die Ausnahme entsprechend behandeln.

Re: Prüfen ob IntVar leer ist

Verfasst: Montag 26. April 2021, 19:00
von Kahnbein.Kai
Ok,
@Welpe,
auf einen Int kann man nicht len anwenden, daher dachte ich, in meinen jugendlichen Leichtsinn machen wir aus dem Int einfach ein Str und dann daraus halt die len ;).


@_blackjack_

Ok, ich versuche mal mein Glück und melde mich wieder.

Gruß Kai

Re: Prüfen ob IntVar leer ist

Verfasst: Dienstag 27. April 2021, 11:14
von Sirius3
Bei `get` wird im Fehlerfall eine Exception geworfen:

Code: Alles auswählen

    def start(self):
        try:
            wiederholungen = self.wiederholungen.get()
        except tk.TclError:
            self.ausgabe_mitte.set("ENTER A NUMBER")
        else:
            print(wiederholungen)
            self.ausgabe_mitte.set(wiederholungen)