【发布时间】:2014-11-17 08:03:39
【问题描述】:
如何在 PyQt5 中实现键盘快捷键(运行函数)?我知道我应该以某种方式使用QAction,但我不能将两者放在一起,而且所有示例似乎都不适用于 PyQt5,而是 PyQt4。
【问题讨论】:
标签: python pyqt keyboard-shortcuts python-3.4 pyqt5
如何在 PyQt5 中实现键盘快捷键(运行函数)?我知道我应该以某种方式使用QAction,但我不能将两者放在一起,而且所有示例似乎都不适用于 PyQt5,而是 PyQt4。
【问题讨论】:
标签: python pyqt keyboard-shortcuts python-3.4 pyqt5
像这样使用QShortcut 和QKeySequence 类:
import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import QWidget, QShortcut, QLabel, QApplication, QHBoxLayout
class Window(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
self.label = QLabel("Try Ctrl+O", self)
self.shortcut = QShortcut(QKeySequence("Ctrl+O"), self)
self.shortcut.activated.connect(self.on_open)
self.layout = QHBoxLayout()
self.layout.addWidget(self.label)
self.setLayout(self.layout)
self.resize(150, 100)
self.show()
@pyqtSlot()
def on_open(self):
print("Opening!")
app = QApplication(sys.argv)
win = Window()
sys.exit(app.exec_())
【讨论】:
根据您的需要,它可以更简单、更强大:
QShortcut( 'Shift+Ins', tree_view ).activated.connect( lambda : tree_view.add_row( 'next sibling' ) )
...将字符串“下一个兄弟”作为参数传递给方法tree_view.add_row。
还可以查看QKeySequence 中的“标准快捷方式”部分:通常最好坚持特定于平台的约定(不要无意中覆盖它们……),除非有充分的理由不这样做。
【讨论】:
也可以简单地写
my_action.setShortcut(QKeySequence("Ctrl+Shift+A"))
如果您已经在别处定义了该操作。
定义动作的示例如下所示:
from aqt import mw
def testFunction():
showInfo("Hello action!")
my_action = QAction("test", mw)
my_action.triggered.connect(testFunction)
my_action.setShortcut(QKeySequence("Ctrl+Shift+A"))
【讨论】:
my_action是什么或者是什么对象?我觉得你的回答很好!