qt5.4在Python中Ctrl+Z快捷方式冲突?按钮按下后才工作

2024-10-02 18:15:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在qtdesigner5.4中,我有一个QPushButton,并将其快捷方式设置为Ctrl+Z。我使用pyuic5将其转换为Python代码。这是Python代码中的结果行:

self.quickTextUndoButton.setShortcut(_translate("newEntryDialog", "Ctrl+Z"))

运行应用程序时,按Ctrl+Z不会按预期调用插槽,直到按下QPushButton(它确实调用插槽);此后,按Ctrl+Z会按预期调用插槽。在

这种“初始化”行为不会发生在其他快捷键F1F12的按钮上。在

这是否与现有的Ctrl+Z的解释冲突?如果是这样,有没有一种简单的方法来避免这种冲突?也许只是适当地设置ShortcutContext?在


Tags: 代码self应用程序快捷键translatef1快捷方式插槽
2条回答

Try QKeySequence

例如:

ctrl_z = "Ctrl+Z"
key_seq = QtGui.QKeySequence(ctrl_z)
btn.setShortcut(key_seq)

单击该按钮将使其获得键盘焦点,更重要的是,从具有相同快捷方式设置的任何其他小部件中移除焦点。在

所有可编辑的输入小部件(如QLineEditQTextEdit等)都对各种操作进行了硬编码default key bindings,包括Ctrl+Z(这将撤消最后一个操作)。如果这样的小部件具有键盘焦点,那么它的快捷方式将优先于为按钮设置的快捷方式(反之亦然)。在

当多个小部件具有相同的快捷方式时,可以设置事件筛选器并使用ShortcutOverride来消除它们之间的歧义:

    self.lineEdit.installEventFilter(self)
    ...

def eventFilter(self, source, event):
    if (event.type() == QtCore.QEvent.ShortcutOverride and
        event.modifiers() == QtCore.Qt.ControlModifier and
        event.key() == QtCore.Qt.Key_Z):
        # eat the shortcut on the line-edit
        return True
    return super(Window, self).eventFilter(source, event)

然而,作为一个用户,我真的不喜欢那些做这种事情的应用程序。当我使用标准输入小部件时,我希望能够使用所有标准键盘绑定。如果它们没有如预期的那样工作,那看起来就像一个bug。在

相关问题 更多 >