Automatisch Entrys erzeugen - Fehler abfangen
Verfasst: Freitag 17. April 2020, 13:43
Hallo,
im folgenden Code, kann der Benutzer eine Zahl N eingeben. Das Programm erzeugt dann automatisch (mithilfe von tkinter Variablen und Trace) N Zeilen.
Wenn man die eingegebene Zahl löscht um eine neue Zahl einzugeben, taucht eine Fehlermeldung auf:
Der Grund für diese Fehlermeldung ist wahrscheinlich:
Der Wert von N wird verfolgt, d.h., dass bei jeder Änderung create_rows aufgerufen wird. Auch kurz nachdem die ursprüngliche Nummer gelöscht wird, aber bevor eine neue Nummer eingeben wird.
Ich möchte diesen Fehler abfangen, indem ich N.get() in einen try/except Block schreibe.
Leider weiß ich jedoch nicht, wie das umsetzen soll. Ich habe versucht N.get() durch
zu ersetzen, was leider nicht geklappt hat. Hat jemand von euch eine Idee, wie man das Problem lösen kann.
im folgenden Code, kann der Benutzer eine Zahl N eingeben. Das Programm erzeugt dann automatisch (mithilfe von tkinter Variablen und Trace) N Zeilen.
Code: Alles auswählen
from tkinter import *
root = Tk()
Label(root, text = "Enter Number of columns").grid(row = 0, column = 0)
N = IntVar()
e_N = Entry(root, textvariable = N).grid(row = 0, column = 1)
# Put trace callbacks on the Entry IntVar
def create_rows(name, index, mode):
rows = N.get()
for i in range(rows):
Entry(root).grid(row = i + 1, column = 0)
N.trace('w', create_rows)
# Setting the vars will trigger the trace
N.set(2)
mainloop()
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "/home/erich/anaconda3/lib/python3.7/tkinter/__init__.py", line 508, in get
return self._tk.getint(value)
_tkinter.TclError: expected integer but got ""
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/erich/anaconda3/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "<ipython-input-120-42d7236d23c8>", line 10, in create_rows
rows = N.get()
File "/home/erich/anaconda3/lib/python3.7/tkinter/__init__.py", line 510, in get
return int(self._tk.getdouble(value))
_tkinter.TclError: expected floating-point number but got ""
Der Wert von N wird verfolgt, d.h., dass bei jeder Änderung create_rows aufgerufen wird. Auch kurz nachdem die ursprüngliche Nummer gelöscht wird, aber bevor eine neue Nummer eingeben wird.
Ich möchte diesen Fehler abfangen, indem ich N.get() in einen try/except Block schreibe.
Leider weiß ich jedoch nicht, wie das umsetzen soll. Ich habe versucht N.get() durch
Code: Alles auswählen
try:
rows = N.get()
except _tkinter.TclError:
" "