es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comprueba si se han presionado las teclas ‘Enter’ y ‘del’ en la entrada de tkinter.

Creé n tk.Entry en una interfaz gráfica de usuario mediante un bucle for usando una clase. El método add_input_entries crea las entradas y las vinculé a la actualización del evento Keypress y la actualización al evento keyrelease.

def add_input_entries(self): # método de la clase que crea las entradas en un bucle
    for item in self.entry:
        item.grid(row=self.row, column=self.__col)
        self.__col += self.__col
        item.bind("<KeyRelease>", self._accept) # actualiza los valores de la entrada al soltar la tecla
        item.bind("<KeyPress>", self._validate) # valida la entrada al presionar la tecla

este es el método para la validación.

def _validate(self, event):
    item = event.char
    if item not in ('.', ',') and not item.isnumeric():
        messagebox.showerror(title='Título', message='Carácter no válido - solo se permiten caracteres numéricos!')
        return 'break'
    else:
        if self.nac == 0:
            self.entry_values[1].set(self.entry_values[0].get())
        print(item)

ahora no puedo escribir ninguna otra tecla que no esté definida. ¿Cómo puedo permitir al usuario eliminar el carácter de la entrada y presionar Enter?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para permitir al usuario eliminar un carácter de la entrada, puede agregar el evento '<BackSpace>' al método bind() en el método add_input_entries(). Esto permitirá al usuario eliminar el carácter presionando la tecla de retroceso.

    Para permitir al usuario presionar Enter, también puede agregar el evento '<Return>' al método bind(). Esto activará la función _accept() cuando el usuario presione Enter.

    Por lo tanto, el método add_input_entries() actualizado debería verse así:

    def add_input_entries(self):
        for item in self.entry:
            item.grid(row=self.row, column=self.__col)
            self.__col += self.__col
            item.bind("<KeyRelease>", self._accept)
            item.bind("<KeyPress>", self._validate)
            item.bind("<BackSpace>", lambda _: self._accept(None))
            item.bind("<Return>", self._accept)
    

    Con la unión lambda _: self._accept(None), llamamos a la función _accept() con None como argumento cuando el usuario presiona la tecla de retroceso. Esto permite al usuario eliminar el carácter de la entrada.

Comments are closed.