python - 从 Qt Designer 将键盘快捷键分配给 QLineEdit

标签 python keyboard-shortcuts pyqt5 qt-designer qlineedit

我有一个在 Qt Designer(使用 PyQt5)中设计的表单。我在那里使用行编辑来输入一些输入。我想要的是在行编辑中添加使用键盘组合(如 Ctrl+B 或功能键之一)的功能。一旦按下组合键或功能键,我将运行一个函数/方法,以“特殊”方式粘贴剪贴板内容(意味着它将过滤和调整剪贴板中的值)。

这看起来很简单,而且很多人以前肯定做过这样的事情。但我无法找到一种单一的、简单的、易于理解的方式来做我想做的事情。这是我正在寻找的解决方案。以下是保存 MainForm 代码的类:

self.ui.my_lineedit.keyboard_key_pressed.connect(self.my_func, ctrl+b)

def my_func(self):
    pass

我编写了 keyboard_key_pressed 部分(以及其他部分),以便您了解我的目的。有没有像上面的例子一样直接的方法来做我想做的事情?

最佳答案

最简单的方法是使用 QShortcut :

self.shortcut = QtWidgets.QShortcut(
    QtCore.QKeySequence('Ctrl+B'), self.ui.my_lineedit, self.my_func)

只有当小部件具有键盘焦点时才会激活此功能。

您还可以使用event-filter达到同样的目的。这提供了更大的灵活性,允许您监听所有 events给定的小部件并以您想要的任何方式修改默认行为(如果有)。当使用您无法(或不希望)子类化的小部件时,此方法非常有用。

代码看起来像这样:

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        ...
        self.ui.my_lineedit.installEventFilter(self)

    def eventFilter(self, source, event):
        if (event.type() == QtCore.QEvent.KeyPress and
            source is self.ui.my_lineedit):
            if (event.modifiers() & QtCore.Qt.ControlModifier and
                event.key() == QtCore.Qt.Key_B):            
                self.my_func()
                # return True here to stop further processing
        return super(MainWindow, self).eventFilter(source, event)

这里的事件是QKeyEvent ,其中(除其他外)提供有关特定 modifiers 的信息和 key被压制。

关于python - 从 Qt Designer 将键盘快捷键分配给 QLineEdit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47960368/

相关文章:

python - 将字符串传递给 sub.re 在 Python 中不起作用

python - python脚本中的mysql编码问题

firefox - 如何使用键盘检查 Firefox Web 控制台中的对象?

Eclipse 跳转到编辑器选项卡快捷方式

eclipse - 在 Zend Studio for Eclipse 中查找文件的最快方法是什么?

python - 使用 pyrcc5 时出错

python - 在 PySide2 中设置垂直和水平对齐方式

python - 单击时发出 QTableWidgetItem 特定信号

Python:当在append()函数中输入的对象发生变化时,对象列表也会发生变化

python - 在 python 中排除以下划线开头或长度超过六个字符的文件夹