执行开始时按键连接
Posted
技术标签:
【中文标题】执行开始时按键连接【英文标题】:Key Press Connect at Start of Execution 【发布时间】:2018-02-02 13:31:27 【问题描述】:我有一个包含 PyQt5 的 Python 3.6.3 脚本。 GUI 有一个按钮,用于切换视频文件的播放和暂停。按空格键还可以切换播放和暂停。该按钮一直工作正常。空格键也可以按预期工作,除了在执行脚本的一开始。在spacebar
正确触发信号以暂停或播放视频之前,我需要先单击其他事件(例如按钮或滑块)。我想在脚本启动时使用spacebar
开始播放视频。这是我在同一 __init__(self)
函数中创建连接的方法。如您所见,单击按钮并按下spacebar
都将信号连接到相同的功能(self.pauseVideo
)。
self.btnPause = QtWidgets.QPushButton(self.centralwidget)
self.btnPause.clicked.connect(self.pauseVideo)
self.spacebar = QShortcut(QKeySequence(Qt.Key_Space), self)
self.spacebar.activated.connect(self.pauseVideo)
关于如何让spacebar
在脚本首次启动时触发信号的建议?
【问题讨论】:
所以您想在打开工具时开始播放视频?为什么不直接在 setupUI 函数中调用 play 函数呢? 不,我不希望视频在打开时开始播放。我想使用空格键开始播放视频,而不是单击开始或暂停按钮。我有内置的键盘快捷键,我更喜欢使用它们而不是使用鼠标。所有键盘快捷键都可以正常工作,我想修复这个小例外。 那么当您尝试在开头点击空格时,窗口是否有焦点?就像如果你只点击标题栏那么空格会起作用吗?我们可能需要查看 pauseVideo() 代码。 @slalomchip。除非您提供minimal reproducible example,否则这是无法回答的。当程序启动时,键盘焦点可能被其他小部件窃取的方式有很多种。显然,您问题中的代码在一个只有一个按钮的简单示例中可以正常工作。 我必须努力开发一个最小、完整和可验证的示例。我理解为什么需要它,但希望不必创建它。当前脚本超过 600 行,不包括 QT Designer 生成的模块。同时,ENTER键也是将视频跳转到某个位置的快捷方式,没有任何问题。我在 pauseVideo() 函数中插入了一条打印语句 - 没有打印任何内容,因此永远无法达到 pauseVideo()。我将 self.spacebar.setEnabled(True) 插入到 __init__() 中,但这没有帮助。 【参考方案1】:经过大量搜索、重新分配键盘快捷键(没有成功)等,我找到了这篇文章PyQt widget keyboard focus。我插入了
self.setFocusPolicy(Qt.StrongFocus)
进入__init__(self)
,它似乎解决了我的问题!现在我只是希望它不会引起其他问题。
【讨论】:
以上是关于执行开始时按键连接的主要内容,如果未能解决你的问题,请参考以下文章