为啥 PyQt 中的 keyPress 事件对 Enter 键不起作用?

Posted

技术标签:

【中文标题】为啥 PyQt 中的 keyPress 事件对 Enter 键不起作用?【英文标题】:Why keyPress Event in PyQt does not work for key Enter?为什么 PyQt 中的 keyPress 事件对 Enter 键不起作用? 【发布时间】:2013-03-07 04:25:14 【问题描述】:

为什么,当我按 Enter 时,keyPressEvent 方法不能满足我的需要?它只是将光标移动到新行。

class TextArea(QTextEdit):
    def __init__(self, parent):
        super().__init__(parent=parent)
        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.show()

    def SLOT_SendMsg(self):
        return lambda: self.get_and_send()

    def get_and_send(self):
        text = self.toPlainText()
        self.clear()
        get_connect(text)

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Enter: 
            self.get_and_send()
        else:
            super().keyPressEvent(event)

【问题讨论】:

【参考方案1】:

Qt.Key_Enter 是键盘上的 Enter:

Qt::Key_Return  0x01000004   
Qt::Key_Enter   0x01000005  Typically located on the keypad.

用途:

def keyPressEvent(self, qKeyEvent):
    print(qKeyEvent.key())
    if qKeyEvent.key() == QtCore.Qt.Key_Return: 
        print('Enter pressed')
    else:
        super().keyPressEvent(qKeyEvent)

【讨论】:

以上是关于为啥 PyQt 中的 keyPress 事件对 Enter 键不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

求C# KeyPress 事件中,所有e.KeyChar值的意思

keypress 和 keyup - 为啥 keyCode 不同?

c# keydown事件问题

使用文本框C#winform的KeyPress事件[复制]

按下美元键时如何找出在 keyup 或 keypress 事件上按下的键

keyup、keydown 和 keypress 事件在移动设备上不起作用