Python Qt 5.4 Ctrl+Z 快捷键冲突?在按下按钮之前不起作用
Qt 5.4 Ctrl+Z shortcut conflict in Python? Doesn't work until its button has been pressed
在 Qt Designer 5.4 中,我有一个 QPushButton 并将其快捷方式设置为 Ctrl+Z。我正在使用 pyuic5 将其转换为 Python 代码。这是 Python 代码中的结果行:
self.quickTextUndoButton.setShortcut(_translate("newEntryDialog", "Ctrl+Z"))
当运行应用程序时,按Ctrl+Z不会按预期调用槽,直到QPushButton有被按下(调用插槽);此后,按 Ctrl+Z 确实按预期调用插槽。
其他具有快捷键 F1 至 F12.
的按钮不会发生这种 'initializing' 行为
这是否与Ctrl+Z的现有解释冲突?如果是这样,是否有一种简单的方法可以避免这种冲突?也许只是适当地设置 ShortcutContext?
Try QKeySequence
例如;
ctrl_z = "Ctrl+Z"
key_seq = QtGui.QKeySequence(ctrl_z)
btn.setShortcut(key_seq)
单击该按钮将为其提供键盘焦点,更重要的是,它会从具有相同快捷方式集的任何其他小部件上移除焦点。
所有可编辑的输入小部件(例如 QLineEdit
、QTextEdit
等)都针对各种操作进行了硬编码 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)
但是,作为用户,我真的讨厌做这种事情的应用程序。当我使用标准输入小部件时,我希望能够使用所有标准键盘绑定。如果它们没有按预期工作,它看起来就像一个错误。
在 Qt Designer 5.4 中,我有一个 QPushButton 并将其快捷方式设置为 Ctrl+Z。我正在使用 pyuic5 将其转换为 Python 代码。这是 Python 代码中的结果行:
self.quickTextUndoButton.setShortcut(_translate("newEntryDialog", "Ctrl+Z"))
当运行应用程序时,按Ctrl+Z不会按预期调用槽,直到QPushButton有被按下(调用插槽);此后,按 Ctrl+Z 确实按预期调用插槽。
其他具有快捷键 F1 至 F12.
的按钮不会发生这种 'initializing' 行为这是否与Ctrl+Z的现有解释冲突?如果是这样,是否有一种简单的方法可以避免这种冲突?也许只是适当地设置 ShortcutContext?
Try QKeySequence
例如;
ctrl_z = "Ctrl+Z"
key_seq = QtGui.QKeySequence(ctrl_z)
btn.setShortcut(key_seq)
单击该按钮将为其提供键盘焦点,更重要的是,它会从具有相同快捷方式集的任何其他小部件上移除焦点。
所有可编辑的输入小部件(例如 QLineEdit
、QTextEdit
等)都针对各种操作进行了硬编码 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)
但是,作为用户,我真的讨厌做这种事情的应用程序。当我使用标准输入小部件时,我希望能够使用所有标准键盘绑定。如果它们没有按预期工作,它看起来就像一个错误。