Обработчик, назначенный registerKeyPressHandler, выполняется в потоке, где отслеживаются ключи, в вашем случае printKey выполняется во вторичном потоке, где вы пытаетесь создать виджет, но это запрещено Qt.
Решение состоит в том, чтобы создать объект QObject и подать сигнал (поскольку сигналы являются поточно-ориентированными), отправив нажатую клавишу, а затем подключиться к слоту, где вы получаете информацию:
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject
from PyQt5.QtWidgets import QLabel, QPushButton, QWidget
from pad4pi import rpi_gpio
class KeypadManager(QObject):
keyPressed = pyqtSignal(object)
def __init__(self, parent=None):
super().__init__(parent)
factory = rpi_gpio.KeypadFactory()
self._keypad = factory.create_4_by_4_keypad()
self._keypad.registerKeyPressHandler(self._key_press_handler)
def _key_press_handler(self, key):
self.keyPressed.emit(key)
class DigitalClock(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("OM SAI RAM")
self._keypad_manager = KeypadManager()
self._keypad_manager.keyPressed.connect(self.printKey)
# self.setCursor(Qt.BlankCursor)
button = QPushButton("Click", self)
button.clicked.connect(self.show_authentication_page)
button.move(10, 10)
self.showFullScreen()
def show_authentication_page(self):
self.newpage = Authentication_page()
self.close()
@pyqtSlot(object)
def printKey(self, key):
if key == "A":
self.show_authentication_page()
class Authentication_page(QWidget):
# ...