[Python] Qtvirtualkeyboard only working in main window not in additional windows

Discussão em 'Python' iniciado por Stack, Abril 29, 2025.

  1. Stack

    Stack Membro Participativo

    I'm running a PyQt5 (5.15.9) application with Python 3.11.2 on a Raspberry Pi 4B (Raspberry Pi OS 64-bit Debian Bookworm) with connected touchscreen.

    Qtvirtualkeyboard is working perfectly fine on all text inputs of my main window. However, I have an additional window, that opens when a button is clicked, but qtvirtualkeyboard is not working on the text input fields of this second window. When a text input field is focussed, the keyboard shows up, but is not responsive nor is any text inputted when keys are pressed.

    I followed this answer to install qtvirtualkeyboard and used the example in this answer to include it in my application.

    Minimal example of my code (the function "handleVisibleChanged" is used as suggested in the linked answer above):

    import sys
    import os
    from PyQt5 import QtCore, QtGui, QtWidgets, uic

    def handleVisibleChanged():
    if not QtGui.QGuiApplication.inputMethod().isVisible():
    return
    for window in QtGui.QGuiApplication.allWindows():
    if window.metaObject().className() == "QtVirtualKeyboard::InputView":
    keyboard = window.findChild(QtCore.QObject, "keyboard")
    if keyboard is not None:
    area = window.geometry()
    area.moveTop(int(keyboard.property("y")))
    window.setMask(QtGui.QRegion(area))
    return

    class MyApp(QtWidgets.QMainWindow):
    '''Main window'''

    def __init__(self):
    super(MyApp, self).__init__()
    uic.loadUi('ui-file.ui', self)
    self.second_window = SecondWindow()
    self.button_for_second_window.clicked.connect(self.second_window.show)
    self.show()

    class SecondWindow(QtWidgets.QDialog):
    '''Second window that opens when a button in MyApp is clicked'''

    def __init__(self):
    super(SecondWindow, self).__init__()
    # Load second window UI, that has QLineEdit
    uic.loadUi('second-ui-file.ui', self)
    self.setWindowModality(Qt.ApplicationModal) # Disable main window when open


    My app is run with the following piece of code (UI created with QtDesigner):

    if __name__ == '__main__':
    os.environ["QT_IM_MODULE"] = "qtvirtualkeyboard"
    app = QtWidgets.QApplication(sys.argv)
    QtGui.QGuiApplication.inputMethod().visibleChanged.connect(handleVisibleChanged)
    ex = MyApp()
    sys.exit(app.exec_())


    What am I missing here? Any hints or suggestions are highly appreciated!

    Continue reading...

Compartilhe esta Página