已解决: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 用键盘敲击按钮的主要内容,如果未能解决你的问题,请参考以下文章
已解决Win10系统点击ikbc机械键盘win键无效的解决方法