Я не уверен, почему проверка перестает работать после замены пробелов в строке. Проверка работает нормально для большинства вещей, которые мне нужны. Он допускает только цифры и до 10 из них, а также позволяет оставить пробелы и выделить все и расстояние между ними. Он также работает один раз при вставке значений, которые содержат пробелы.
Например, если я попытаюсь вставить 12 34
в поле ввода, это правильно изменит значение на 1234
, но после этого проверка просто перестает работать.
Обновление:
Кажется, что проверка перестает работать после entry.delete()
, хотя я все еще не уверен, как это исправить. Я пытался переопределить валидацию, но это не сработало.
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.vcmd = (self.register(self.validate), '%d', '%P', '%s')
self.entry = tk.Entry(self, validate='key', validatecommand=self.vcmd)
self.entry.pack()
def validate(self, *a):
b = a[1].replace(' ', '')
if b.isdigit() and len(b) <= 10 or ((b == '' or b < a[2]) and a[0] == '0'):
if ' ' in a[1]:
x = a[1]
x = x.replace(' ', '')
self.entry.delete(0, 'end')
self.entry.insert(0, x)
return True
else:
return False
App().mainloop()
Обновление:
Мне удалось заставить его работать, удалив поле ввода и переопределив его и его валидацию после вставки новая строка Но это кажется неправильным способом сделать это.
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.vcmd = (self.register(self.validate), '%d', '%P', '%s')
self.entry = tk.Entry(self, validate='key', validatecommand=self.vcmd)
self.entry.pack()
def validate(self, *a):
b = a[1].replace(' ', '')
if b.isdigit() and len(b) <= 10 or ((b == '' or b < a[2]) and a[0] == '0'):
if ' ' in a[1]:
x = a[1]
x = x.replace(' ', '')
self.entry.destroy()
self.entry = tk.Entry(self)
self.entry.insert(0, x)
self.entry.config(validate='key', validatecommand=self.vcmd)
self.entry.pack()
return True
else:
return False
App().mainloop()