События в pyqt могут получать только унаследованные от QObject обьекты. Потому что внутри их кода и кода в библиотеках qt есть код который "посылает" сообщения и вызывает в объектах метод keyPressEvent . Вы же создаёте новый класс Frame и не унаследуете для него никакие Qt-шные функции. Поэтому функция keyPressEvent не будет в нём вызвана никогда.
Это ответ на вопрос "почему"... а вот ответить как сделать правильно на Qt я не могу...
Однако могу посоветовать копать в сторону сторонней библиотеке
keyboard которая в принципе может и без Qt:
import keyboard
while True:
print(keyboard.is_pressed("space")) # printed True or False