您可以在Qt DesignerPyQt5中配置键事件处理吗?

问题描述

我今天才发现Qt Designer,这真是太好了。

但是我是一个键盘狂热者,不想被迫超出严格的要求范围内使用鼠标,或者至少我想拥有替代任何按钮的热键等。

这可以手动编码,但我只是想知道您是否可以通过Qt Designer进行设置?如果可以将这种配置保留在自动生成的.ui文件中(然后将其转换为.py文件),而不是弄乱业务代码,那将是很好的选择。

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

还有一个叫做“动作编辑器”的东西(右下角的第二个选项卡)……看起来很有前途,但我不知道目前该怎么做。

解决方法

这个问题有一个重要的区别。请注意,这对几乎所有基于GUI的环境/框架均有效,而不仅仅是Qt。

助记符

我将在相关的Wikipedia article中引用说明:

助记符是带下划线的字母数字字符,通常出现在菜单标题,菜单项或用户界面的按钮或组件的文本中。助记符向用户指示要按下哪个键(结合Alt键)以激活命令或导航到组件。

取决于所使用的平台和框架,但最重要的是助记符的 source ,其行为可能会略有变化。

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

键盘快捷键

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

请注意,虽然从概念上来说助记符 _is _ 是键盘快捷键,但从技术上讲,您可以在没有任何修饰符的情况下构造键盘快捷键 ,但区分它们(避免使用快捷键)是常见的约定没有修饰符)。

Qt范式及其在Designer中的使用

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

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

在所有情况下,它们都用带下划线的 [1] 下划线显示,并且可以在要使用的字母前面使用&字符来显式设置该字母(可以使用&&实际显示与号,否则 style 会自动尝试设置它们。

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

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

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

最后。
如果您只是在寻找助记符,请遵循以上有关助记符的建议。
如果您需要实际上可以从任何地方激活的功能,则创建一个QAction,并将其triggered信号连接到代码中的相关函数;如果该东西也将出现在菜单或工具栏上,则可以在Designer上创建相关的QAction。

注释:
1 某些样式(尤其是“微风”)仅在按下 Alt 时显示带下划线的字母。
2 自动助记符按其父级的插入顺序递归创建。
3 尝试创建两个带有文本“&test&button”的按钮:第二个按钮可能会显示为“ test&button”。