python - QLineEdit 不使用 QKeyEvent 更新文本

标签 python pyqt qlineedit virtual-keyboard qkeyevent

我正在尝试实现一个虚拟键盘小部件。我能想到的最简单的方法是创建 QKeyEvent 实例并使用 QApplication.postEvent() 将它们发送到焦点窗口小部件。

首先,我尝试更新我拥有的固定 QLineEdit,因此代码是:

   self.pushButton_A.clicked.connect(self.virtualKeyPress)

[...]

   def virtualKeyPress(self):
        self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier)
        QApplication.postEvent(self.lineEdit, self.keyPress)

但是 QLineEdit 实例不会更新其 GUI 中的文本!

线索?干杯并感谢!

已解决:(感谢 HeyYO )

   self.pushButton_A.clicked.connect(self.virtualKeyPress)

[...]

   def virtualKeyPress(self):
        self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier, 'A')
        QApplication.postEvent(self.lineEdit, self.keyPress)

就我而言,我将该参数设置为 0 来代替 Qt.Key_A,以便可以将所有按钮连接到 virtualKeyPress 方法。我还必须将所有按钮的焦点策略设置为“无焦点”(直接在 Qt Designer 中进行)。最终代码如下:

def virtualKeyPress(self):
    self.keyPressed = QString(self.sender().text())
    self.keyPress = QKeyEvent(QEvent.KeyPress, 0, Qt.NoModifier, self.keyPressed)
    self.focusWidget = QApplication.focusWidget()        
    QApplication.postEvent(self.focusWidget, self.keyPress)

最佳答案

您是否尝试过指定文本参数;

self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier, "A")

它在 Qt5&C++ 中对我有用,所以我假设它也对你有用。

关于python - QLineEdit 不使用 QKeyEvent 更新文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676589/

相关文章:

python - Django:名称 'csrf_token' 未定义

Python:QTableWidget 中的数值排序

python - 将数据从 Sqlite3 数据库插入到 QTableWidget 中

python - PyQt5 应用程序中的故障排除(QDialog -> QMainWindow)

python - 如何防止PyQt Line Edit和Message Box陷入无限循环?

python - 如何将不同排名的列表连接成排名 0 的单个列表?

python - 将具有连续 block 项目但不连续 block 的列表拆分为子列表

python - 按下按钮时 Pyside 从 QLineEdit 打印文本

python 3 : How to specify stdin encoding

c++ - QLineEdit:如果用鼠标悬停,则将超长文本显示为工具提示