您可以在 Qt Designer (PyQt5) 中配置按键事件处理吗?

Can you configure key event handling in Qt Designer (PyQt5)?

今天才接触到Qt Designer,真是太棒了。

但我是一个键盘狂热者,不想被迫使用鼠标超过绝对必要,或者至少我想用热键替代任何按钮等。

这可以手动编码,但我只是想知道您是否可以通过 Qt Designer 以某种方式设置它?如果这种配置可以保留在自动生成的.ui文件中(然后转换成.py文件),而不是把业务代码弄得乱七八糟。

“输入小部件”下有一个名为“键序列编辑”的项目......但我还没有弄清楚它的作用。这似乎不是答案。我也尝试过右键单击一个小部件(例如 QTreeView),但我在那里找不到明显的答案。

还有一个叫做“动作编辑器”的东西(右下方框中的第二个选项卡)...看起来很有希望,但我不知道目前要做什么。

这个问题需要一个重要的区别。请注意,这对几乎所有基于 environment/framework 的 GUI 都有效,而不仅仅是 Qt。

助记符

我会引用相关的描述Wikipedia article:

A mnemonic is an underlined alphanumeric character, typically appearing in a menu title, menu item, or the text of a button or component of the user interface. A mnemonic indicates to the user which key to press (in conjunction with the Alt key) to activate a command or navigate to a component.

根据使用的平台和框架,但最重要的是助记符的 来源 ,行为可能会略有变化。

对于按钮或“伙伴”(链接到另一个小部件以便使用其助记符将焦点设置在该小部件上的标签),助记符通常与 Alt 一起使用+字母.
相反,对于菜单项,通常直接按字母 即可,无需 Alt 修饰符。

键盘快捷键

它们是(通常)键盘组合,使用至少一个或多个修饰符和另一个标准(可能)字母数字键。
典型的例子是Ctrl+A,用来select当前对象中的所有内容。

请注意,虽然从概念上讲助记符 _是_ 键盘快捷键,并且从技术上讲,您可以构造一个键盘快捷键 而无需 任何修饰符,但它很常见区分它们的约定(并避免没有修饰符的快捷方式)。

Qt 范式和在 Designer 中的使用

在Qt中助记符存在以下几种情况:

  • 动作(当它们被添加到 QMenu 或 QToolbar 时)
  • 按钮(QAbstractButton 子类)
  • tabs(QTabBar标签,通常用于QTabWidget)
  • 分组框(QGroupBox)
  • 标签(使用setBuddy()

在所有情况下,它们都带有带下划线的助记字母 [1],并且可以使用字母前面的 & 字符明确设置该字母将被使用(符号实际上可以使用 && 显示),否则 style 将自动尝试设置它们。

关于最后一个案例的重要说明(让 Qt 设置助记符)。为应用程序设置的样式(默认设置或使用 setStyle() 设置的样式)或为特定小部件设置的样式不仅会自行设置助记符[2],而且还会覆盖对象text()属性。如果你创建一个文本为“Button”的按钮,不仅 Qt 可能会使用“b”字母作为它的助记符,而且 button.text() 也会 return “&Button”。请注意,这 不会 在创建过程中发生,但只有在将小部件添加到父级并显示该父级时才会发生。
这是 另一个 对象比较 (if someWidget.text() == 'someText': do something) 应该 永远不会 使用 text() 属性.

关于助记符需要考虑的另一个重要方面是只有第一个 &-前面的字母将用于助记符。如果您创建一个带有文本“&Some &button”的按钮,则只会考虑“S”字母(即使“b”仍可能带有下划线)。不仅如此:如果您尝试在不同的小部件上使用相同的多个基于 & 的助记符,结果将是 undefined[3].

现在。 Qt Designer 不允许为特定的小部件任意创建快捷方式,这是有充分理由的:键盘快捷方式应该是唯一的并且需要 context。使用 Designer 创建的 UI 应尽可能通用,并且不应在应在编程的逻辑方面完成的实现中过于“深入”。 QActions 就是为此而设计的,它是可以在任何上下文中执行的“动作”,这与依赖键盘焦点和鼠标位置的标准小部件不同,这就是为什么你可以为它们设置快捷方式。

终于。
如果您只是在寻找助记符,请按照上述有关助记符的建议进行操作。
如果您需要实际上可以从任何地方激活的东西,请创建一个 QAction,并将其 triggered 信号连接到代码中的相关函数;如果 某些东西 也将出现在菜单或工具栏上,您可以在设计器上创建相关的 QAction。

备注:
1 某些样式(特别是“breeze”)仅在按下 Alt 时显示带下划线的字母。
2 自动助记符按插入顺序递归地创建到它们的父级。
3 尝试用文本“&test &button”创建两个按钮:第二个按钮可能显示为“test &button”。