如何设计虚拟键盘中的输入按钮功能?

How to design enter button functionality in virtual keyboard?

我的程序中有一些 QLineEdit 小部件。我将他们的 returnPressed 信号连接到不同的函数。我也有一个虚拟键盘。当这些 QLineEdit 小部件之一处于焦点下并且我在我的虚拟键盘中按下 enter 时,我如何 运行 该输入的功能?

from PyQt5.QtWidgets import QMainWindow, QApplication, QLineEdit, QPushButton
from PyQt5.QtCore import Qt
import sys


class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.resize(400, 200)
        self.inputA = QLineEdit('inputA', self)
        self.inputB = QLineEdit('inputB', self)
        self.inputA.returnPressed.connect(self.funcInputA)
        self.inputB.returnPressed.connect(self.funcInputB)
        self.inputB.move(150, 0)
        self.btnEnter = QPushButton('Enter', self)
        self.btnEnter.move(0, 100)
        self.btnEnter.clicked.connect(self.enter)
        self.btnEnter.setFocusPolicy(Qt.NoFocus)

    
    def funcInputA(self):
        print('inputA')

    def funcInputB(self):
        print('inputB')

    def enter(self):
        widget = QApplication.focusWidget()
        print(widget.text())


app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())

大多数事件都可以合成,包括关键事件,并中继到目标小部件。

请注意,为了保持一致性,您应该始终为每个“虚拟”按键发送按键和释放事件。

    def enter(self):
        widget = QApplication.focusWidget()
        if widget is not None:
            modifiers = Qt.KeyboardModifiers()
            for evType in (QEvent.KeyPress, QEvent.KeyRelease):
                event = QKeyEvent(evType, Qt.Key_Return, modifiers)
                QApplication.postEvent(widget, event)