Форум сайта python.su
Добрый день.
Tkinter, ttk, Entry. Как в <validate>, определить и отменить выделение текста в строке редактирования.
Пытаюсь написать процедуру ввода по шаблону на примере сотового телефона.
Если нет выделения в строке, то все более менее работает,
иначе получается не очень красиво.
# -*- coding: utf-8 -*- import tkinter as tk from tkinter import ttk def validate( action, index, value_if_allowed, prior_value, text, validation_type, trigger_type, widget_): index = int(index) #print(index, text) if int(action) == 0: # Удалили символ if template[index] == '_': # Меняем число на _ var_stl.set(prior_value[0:index] + '_' + prior_value[index+1:]) entry_stl.icursor(index) return False elif index > len(template[:-1]) : return False elif text == template[index]: entry_stl.icursor(index + 1) elif text in '0123456789': if template[index] != '_': for i, t in enumerate(template[index + 1:]): if t == '_': break index += i + 1 value_ = prior_value[0:index] + text + prior_value[index+1:] var_stl.set(value_) index += 1 if index < len(template): if template[index] != '_': for i, t in enumerate(template[index:]): if t == '_': index = index + i break entry_stl.icursor(index) return True return False if __name__ == '__main__': template = '8 (___) ___ __ __' root = tk.Tk() var_stl = tk.StringVar() var_stl.set(template) vcmd = (root.register(validate), '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W') entry_stl = ttk.Entry(root, textvariable=var_stl, width=20, validate='key', validatecommand=vcmd, font=('Helvetica', 20, 'bold')) entry_stl.pack() root.mainloop()
Отредактировано v3_62 (Фев. 12, 2018 03:13:43)
Прикреплённый файлы:
entry_python_su.py (1,7 KБ)
Офлайн
В функции validate в самой первой строке напишите entry_stl.selection_clear().
Офлайн
rami
В функции validate в самой первой строке напишите entry_stl.selection_clear().
Офлайн