已解决:PyQt5 用键盘敲击按钮

Posted

技术标签:

【中文标题】已解决:PyQt5 用键盘敲击按钮【英文标题】:Solved: PyQt5 push a button with a keyboard stroke 【发布时间】:2021-04-21 22:13:40 【问题描述】:

我正在开发一个 PyQt5 gui。 我尝试实现一个按钮,当我按下键盘上的一个键时会按下该按钮。让我们说“K”。 我已经尝试过了,但它不起作用。有什么想法吗?

from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout,QTabWidget, QFileDialog, QShortcut
from PyQt5.QtGui import QIcon, QPixmap, QKeySequence
from PyQt5 import QtCore, QtGui, QtWidgets, uic

Ui_TabWidget, QtBaseClass = uic.loadUiType(qtcreator_file)

class TabWidget(QTabWidget, Ui_TabWidget):
    def __init__(self):
        QtWidgets.QTabWidget.__init__(self)
        Ui_TabWidget.__init__(self)
        self.setupUi(self)
        self.pushButtonGood.clicked.connect(lambda : self.writeOutliers(False))
        self.pushButtonOutliers.clicked.connect(lambda : self.writeOutliers(True))

        self.shortcut_open = QShortcut(QKeySequence('K'), self)
        self.shortcut_open.activated.connect(lambda : self.writeOutliers(True))

#######编辑######## 多亏了 cmets,问题得以解决。请参阅下面的解决方案。

【问题讨论】:

现在你的代码理论上应该可以工作。您是否可能在某处也有一些文本输入,例如 QLineEdit 或 QTextEdit,并且该字段具有键盘焦点? 确实如此。但我不知道如何取消选择字段 尝试使用 self.setFocus() 给主窗口键盘焦点 @user1885349 当文本字段在同一个 ui 上时使用单键快捷方式很少是一件好事,而且从 UX 的角度来看是一个糟糕的主意。您可以在文本字段上使用clearFocus(),或者按照 Vasco 的建议尝试在显示的窗口上使用setFocus(),但问题仍然存在:即使假设用户清楚地知道存在字母 K 的单键快捷方式,这会造成混淆:如何在编辑文本字段后再次“重新激活”快捷方式?如果他们认为自己点击了某个文本字段但错过了,并错误地输入了字母 k,该怎么办? @user1885349 信号连接必须有一个 callable 作为参数(而参数 can 是一个函数,该函数无论如何都应该返回一个可调用的,并且setFocus() 显然没有)。所以,它应该是self.pushButtonGood.clicked.connect(self.setFocus)setFocus 上没有匹配的括号!)。 【参考方案1】:
from PyQt5.QtGui import QIcon, QPixmap, QKeySequence
from PyQt5 import QtCore, QtGui, QtWidgets, uic

Ui_TabWidget, QtBaseClass = uic.loadUiType(qtcreator_file)

class TabWidget(QTabWidget, Ui_TabWidget):
    def __init__(self):
        QtWidgets.QTabWidget.__init__(self)
        Ui_TabWidget.__init__(self)
        self.setupUi(self)
        self.pushButtonGood.clicked.connect(lambda : self.writeOutliers(False))
        self.pushButtonOutliers.clicked.connect(lambda : self.writeOutliers(True))

        self.pushButtonGood.clicked.connect(self.setFocus)

self.setFocus 在第一次点击pushButtonGood 时将键盘焦点移到编辑文本的其他位置。

然后在 QTdesigner 中使用“Editeur de Propriétés”定义按钮的快捷键。

做一个复杂的快捷键'ctrl+K'

【讨论】:

以上是关于已解决:PyQt5 用键盘敲击按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何查看电脑已打的补丁

敲击键盘时触发 hotTest

怎么把分页按钮(首页,尾页等)放在表格右下角处?(已解决)

已解决Win10系统点击ikbc机械键盘win键无效的解决方法

已解决Win10系统点击ikbc机械键盘win键无效的解决方法

已解决 - 链接顶部的 html 按钮