Prüfen ob IntVar leer ist

Fragen zu Tkinter.
Antworten
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

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
Welpe
User
Beiträge: 26
Registriert: Mittwoch 30. Dezember 2020, 10:39

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.
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

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
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

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