Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 您可以在Qt设计器(PyQt5)中配置密钥事件处理吗?_Python_Pyqt5_Qt Designer_Keyevent_Hotkeys - Fatal编程技术网

Python 您可以在Qt设计器(PyQt5)中配置密钥事件处理吗?

Python 您可以在Qt设计器(PyQt5)中配置密钥事件处理吗?,python,pyqt5,qt-designer,keyevent,hotkeys,Python,Pyqt5,Qt Designer,Keyevent,Hotkeys,我今天刚刚发现了Qt Designer,它非常棒 但我是一个键盘迷,我不想被强迫使用鼠标超过严格必要的程度,或者至少我想用热键替代任何按钮,等等 这可以手动编码,但我只是想知道您是否可以通过Qt Designer进行设置?如果这种配置可以保存在自动生成的.ui文件中(然后转换为.py文件),而不是把业务代码弄得乱七八糟,那就太好了 “输入小部件”下有一个项目称为“键序列编辑”。。。但我还没弄清楚这是怎么回事。这似乎不是答案。我也试过右键点击一个小部件(例如QTreeView),但我在那里找不到明

我今天刚刚发现了Qt Designer,它非常棒

但我是一个键盘迷,我不想被强迫使用鼠标超过严格必要的程度,或者至少我想用热键替代任何按钮,等等

这可以手动编码,但我只是想知道您是否可以通过Qt Designer进行设置?如果这种配置可以保存在自动生成的.ui文件中(然后转换为.py文件),而不是把业务代码弄得乱七八糟,那就太好了

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


还有一个叫做“动作编辑器”(右下框的第二个选项卡)。。。看起来很有希望,但我现在不知道该做什么。

这个问题需要一个重要的区别。请注意,这几乎适用于任何基于GUI的环境/框架,而不仅仅是Qt

助记符 我将在相关文件中引用这一描述:

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

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

对于按钮或“伙伴”(链接到另一个小部件以使用其助记符设置该小部件焦点的标签),助记符通常与Alt+字母一起使用。
相反,对于菜单项,不使用Alt修饰符直接按字母就足够了

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

请注意,从概念上讲,助记符是一种键盘快捷键,从技术上讲,您可以构建一个没有任何修改器的键盘快捷键,但区分它们是常见的惯例(避免使用没有修改器的快捷键)

Qt-paradygm及其在设计器中的使用 在Qt记忆法中,存在以下情况:

  • 操作(添加到QMenu或QToolbar时)
  • 按钮(QAbstractButton子类)
  • 选项卡(QTabBar选项卡,通常用于QTabWidget)
  • 分组框(QGroupBox)
  • 标签(使用
在所有情况下,它们都以带下划线的助记字母[1]显示,并且可以使用将要使用的字母前面的
&
字符显式设置该字母(可以使用
&&
实际显示符号and),否则样式将自动尝试设置它们

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

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

现在.Qt设计器不允许任意为特定的小部件创建快捷键,这是有充分理由的:键盘快捷键应该是唯一的,并且需要上下文。使用设计器创建的UI应该尽可能通用,并且不应该太“深”QActions就是为了实现这一点而设计的,它可能是在任何上下文之外执行的“动作”,不同于依赖于键盘焦点和鼠标位置的标准小部件,这就是为什么可以为它们设置快捷键

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

注:
1某些样式(特别是“微风”)在按下Alt键时仅显示带下划线的字母。
2个自动助记符是按插入顺序递归创建到其父项的。

3尝试创建两个带有文本“&test&button”的按钮:第二个按钮可能会显示为“test&button”。

您指的是自定义快捷键(例如ctrl+字母)或者所谓的助记符,通常用下划线字母显示并用alt+字母激活?可能是……在Java世界中,有助记符,但也有其他可以分配给任意任务的热键。助记符(在Java中)正如您所说,通常采用alt-[key]的形式,但您也可以设置热键以使用Ctrl、Shift、Alt,可能的话