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.

El enlace de tecla de Tkinter no funciona con la tecla “PrintScreen”.

Estoy intentando construir un programa de “Prueba de teclas” que debería mostrar si una tecla funciona (soy de la comunidad de teclados personalizados).

Mi código funciona bien para “esc” y “F1”-“F12”, pero no funciona con “PrintScreen”. No sé por qué funciona con todas las demás teclas pero no con printscreen. Aquí está el fragmento de código relevante:

from tkinter import *
window = Tk()
c = Canvas(window, width=1135, height=300, bg="lavender")
c.pack()

Crear el rectángulo para PrintScreen, ScrollLock y Pause

key13 = c.create_rectangle(772.5, 10, 812.5, 50, fill="white") #PrintScreen
key14 = c.create_rectangle(822.5, 10, 862.5, 50, fill="white") #ScrollLock
key15 = c.create_rectangle(872.5, 10, 912.5, 50, fill="white")  # Pause

Texto (alemán) para cada tecla

text13 = c.create_text(791, 20, text="Druck", font=('Helvetica', '8'))
text14 = c.create_text(841, 20, text="Rollen", font=('Helvetica', '8'))
text15 = c.create_text(891, 20, text="Pause", font=('Helvetica', '8'))

Funciones de eventos

def key_event13(event):
    c.itemconfig(key13, fill="DarkSeaGreen2")

def key_event14(event):
    c.itemconfig(key14, fill="DarkSeaGreen2")

def key_event15(event):
    c.itemconfig(key15, fill="DarkSeaGreen2")

Vincular las teclas

c.bind_all("<keypress-print>", key_event13)
c.bind_all("<keypress-scrolllock>", key_event14)
c.bind_all("<keypress-pause>", key_event15)

window.mainloop()

Ya intenté usar

c.bind_all("event.keysymnum == 65377", key_event13)

en lugar de

c.bind_all("<keypress-print>", key_event13)

pero eso tampoco funciona…

Espero que alguien aquí pueda ayudarme. Saludos cordiales, Simon.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hola Simon,

    Parece que el problema puede estar con el keysym para la tecla PrintScreen. ¿Has intentado usar el keysym para esa tecla en lugar de la cadena de texto “Print”? Según la documentación de Tk, el keysym para PrintScreen es “Print”, pero podría valer la pena intentar usar el número keysym en su lugar (65377).

    Así que en lugar de:

    c.bind_all("<keypress-print>", key_event13)
    

    Podrías probar:

    c.bind_all("<keypress-65377>", key_event13)
    

    Avísame si eso te funciona. ¡Buena suerte con tu proyecto!

    Saludos,
    [Tu Nombre]

Comments are closed.