это мой первый вопрос здесь, так что извините, если я делаю что-то не так.
Я создаю класс записи, который будет проверять длину ввода, а затем фокусировать следующий виджет. Приведенный ниже код делает это, но он вызывает изменение фокуса на нажатии клавиши ПОСЛЕ нужной длины, что приводит к потере этого нажатия
Пример: если вы введете 123456789 в первое поле ввода, конечный результат будет 1234 в поле ввода 1 и 6789 в поле ввода 2
import tkinter as tk
class ValidateEntry(tk.Frame):
def __init__(self, parent, width=20, txt=None):
tk.Frame.__init__(self, parent)
self.width = width
vcmd = (self.register(self.validate), '%i', '%S', '%d', '%P')
self.entry = tk.Entry(self, width=self.width, validate='key', vcmd=vcmd)
if txt is not None:
self.entry.insert('end', txt)
self.entry.pack()
def validate(self, i, S, d, P):# i = index, S = insert character, d = action, P = entry value
if len(P)-1 == self.width and d != 0:
self.entry.tk_focusNext().focus()
return False
return True
root = tk.Tk()
entry1 = ValidateEntry(root, width=4)
entry2 = tk.Entry(root, width=8)
entry1.pack()
entry2.pack()
root.mainloop()
Я не могу найти способ изменить фокус и удерживать нажатой 5-ю клавишу в примере выше