Mensajes: 64
Temas: 28
Registro en: Apr 2018
Reputación:
0
Buenas, tengo un control de tipo Entry, y quiero validar o controlar que solamente se introduzcan numeros o un punto, por ejemplo los caracteres aceptados serian [0,1,2,3,4,5,6,7,8,9,.]
Como puedo hacerlo?
Gracias, un saludo.
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
Hola Alfredo. Puedes usar el argumento validatecommand para pasar una función que chequee si cada carácter agregado es válido.
Código: #!/usr/bin/env python
# -*- coding: utf-8 -*-
from tkinter import ttk
import tkinter as tk
def is_valid_char(char):
return char in "0123456789."
root = tk.Tk()
validatecommand = root.register(is_valid_char)
entry = ttk.Entry(root, validate="key", validatecommand=(validatecommand, "%S"))
entry.pack()
root.mainloop()
Saludos!
Mensajes: 64
Temas: 28
Registro en: Apr 2018
Reputación:
0
Muchas gracias Francisco, y para que en un campo ENTRY solamente pueda introducir un cierto numero de caracteres? Por ejemplo para una fecha en formato mm/dd/yyyy solo me debería dejar introducir numeros y barras, EJ: 01/01/2018 y como máximo un total de 10 caracteres.
Gracias por la ayuda Francisco, un saludo.
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
25-06-2018, 06:09 PM
(Última modificación: 25-06-2018, 06:09 PM por Francisco.)
De nada. Podría ser algo así:
Código: from tkinter import ttk
import tkinter as tk
def is_valid_date(action, char, text):
# Solo chequear cuando se añade un carácter.
if action != "1":
return True
return char in "0123456789/" and len(text) < 10
root = tk.Tk()
validatecommand = root.register(is_valid_date)
entry = ttk.Entry(root, validate="key",
validatecommand=(validatecommand, "%d", "%S", "%s"))
entry.pack()
root.mainloop()
Tienes la referencia sobre los parámetros en este enlace.
Saludos!
Mensajes: 64
Temas: 28
Registro en: Apr 2018
Reputación:
0
Mensajes: 2
Temas: 0
Registro en: Jan 2020
Reputación:
0
29-01-2020, 10:11 PM
(Última modificación: 30-01-2020, 02:14 AM por Francisco.)
(22-06-2018, 12:54 PM)Francisco escribió: Hola Alfredo. Puedes usar el argumento validatecommand para pasar una función que chequee si cada carácter agregado es válido.
Código: #!/usr/bin/env python
# -*- coding: utf-8 -*-
from tkinter import ttk
import tkinter as tk
def is_valid_char(char):
return char in "0123456789."
root = tk.Tk()
validatecommand = root.register(is_valid_char)
entry = ttk.Entry(root, validate="key", validatecommand=(validatecommand, "%S"))
entry.pack()
root.mainloop()
Saludos!
Hola muy buen código pero ahora que lo implemente no puedo usar el copiar pegar y cortarctrl+c ctrl+v etc. Que tendría que modificar. Gracias
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
30-01-2020, 02:29 AM
(Última modificación: 30-01-2020, 02:32 AM por Francisco.)
Creo que esta modificación podría funcionar:
Código: def is_valid_date(action, char, text):
# Solo chequear cuando se añade un carácter.
if action != "1":
return True
if len(char) + len(text) > 10:
return False
if len(char) > 1:
# Si es más de un carácter, chequear uno por uno.
return all(is_valid_date(action, c, text) for c in char)
return char in "0123456789/"
Para referencia de la función all(): https://micro.recursospython.com/recurso...n-all.html. Y sobre la comprensión de colecciones (línea 9): https://recursospython.com/guias-y-manua...lecciones/.
Saludos
Mensajes: 2
Temas: 0
Registro en: Jan 2020
Reputación:
0
30-01-2020, 12:28 PM
(Última modificación: 31-01-2020, 10:28 PM por Francisco.)
(30-01-2020, 02:29 AM)Francisco escribió: Creo que esta modificación podría funcionar:
Código: def is_valid_date(action, char, text):
# Solo chequear cuando se añade un carácter.
if action != "1":
return True
if len(char) + len(text) > 10:
return False
if len(char) > 1:
# Si es más de un carácter, chequear uno por uno.
return all(is_valid_date(action, c, text) for c in char)
return char in "0123456789/"
Para referencia de la función all(): https://micro.recursospython.com/recurso...n-all.html. Y sobre la comprensión de colecciones (línea 9): https://recursospython.com/guias-y-manua...lecciones/.
Saludos
Funciona muy bien, muchas gracias Francisco
|