ich habe folgenden Code um nur die Eingabe eines gültigen Timecodes zu erlauben, jedoch kann ich den Doppelpunkt nicht selbst eingeben (was ich jedoch gerne tun würde). Sobald ich drei Zahlen eingebe und die dritte Zahl dadurch automatisch mit einem Doppelpunkt ersetzt wird, setzt die Validierung komplett aus und ich kann fortlaufend eintragen was ich will, weil die Validierung nicht mehr funktioniert. Worin kann der Fehler liegen?
Code: Alles auswählen
runtime_label = tk.Label(metadata_window, text="Runtime (01:30:20:10):", background=GUI_BG_COLOR,
foreground=GUI_TEXT_COLOR)
runtime_label.pack(padx=0, pady=8)
self.runtime_entry = tk.Entry(metadata_window, background="#333333", foreground=GUI_TEXT_COLOR, width=42,
textvariable=runtime_var, validate="key")
self.runtime_entry.pack()
validate_runtime_entry_command = metadata_window.register(self.validate_runtime_entry)
self.runtime_entry.config(validatecommand=(validate_runtime_entry_command, '%S'))
def validate_runtime_entry(self, input):
time_str = self.runtime_entry.get().strip()
if input.isdigit() and len(time_str.replace(':', '')) < 8:
# Add colon after every two digits
if len(time_str.replace(':', '')) in [2, 4, 6]:
self.runtime_entry.insert(len(time_str), ':')
return True
elif input == '\b':
return True
else:
try:
# Check format first
datetime.datetime.strptime(time_str, '%H:%M:%S:%f')
# Then check if it's a valid time
h, m, s, f = map(int, time_str.split(':'))
if not (0 <= h <= 23 and 0 <= m <= 59 and 0 <= s <= 59 and 0 <= f <= 47):
raise ValueError
return True
except ValueError:
return False