Eu uso o Tkinter (na verdade, customtkinter, se for importante). O que eu preciso é de combinações de teclas (escape, por exemplo). Deve funcionar de forma diferente em frames diferentes, e em alguns frames não preciso disso. Eu uso o sistema de quadros como uma espécie de aba. Com base nas respostas de outros tópicos, presumi que os frames não possuem vinculação de evento de chave por padrão, e as pessoas recomendam escrever
frame.focus_set()
para poder vincular os botões do teclado. Mas esta bela solução não me ajudou. Mas o maior mistério para mim é por que este exemplo funciona bem:
from tkinter import *
main = Tk()
def leftKey(event):
print ("Left key pressed")
def rightKey(event):
print ("Right key pressed")
frame = Frame(main, width=100, height=100)
frame.bind('<Left>', leftKey)
frame.bind('<Right>', rightKey)
frame.focus_set()
frame.pack()
main.mainloop()
E meu código ignora o botão de escape: (alerta! Eu sei que meu estilo de código é horrível, por favor, sem insulto)
class MainFrame(customtkinter.CTkFrame):
def __init__(self, master, **kwargs):
super().__init__(master, corner_radius=0, **kwargs)
'''some code'''
class WorldInfoFrame(MainFrame):
def __init__(self, master):
super().__init__(master)
'''some code'''
self.bind("<Escape>", self.wrapper_info_button_pressed)
self.focus_set()
@staticmethod
def info_button_pressed():
print("static")
app.world_frame.info_button_released()
'''some code'''
def wrapper_info_button_pressed(self, event):
print("Wrapper")
self.info_button_pressed()
O que está dentro app.world_frame.info_button_released()
não importa, meu código nem imprime "Wrapper". Bem, espero que alguém possa me ajudar ou me empurrar na direção certa ...