python - 有没有办法将按键重新分配给 Qt 中的不同功能?

标签 python qt pyqt4 qaction

我正在尝试根据哪个选项卡处于事件状态来重新分配触发不同事件的键盘按钮。

下面是我的初始化:

action = QtGui.QAction(self)
action.setShortcut(QtGui.QKeySequence("w"))
self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonForward, \
                 QtCore.SLOT("animateClick()"))
self.addAction(action)

action = QtGui.QAction(self)
action.setShortcut(QtGui.QKeySequence("s"))
self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonReverse, \
                 QtCore.SLOT("animateClick()"))
self.addAction(action)

action = QtGui.QAction(self)
action.setShortcut(QtGui.QKeySequence("a"))
self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonLeft, \
                 QtCore.SLOT("animateClick()"))
self.addAction(action)

action = QtGui.QAction(self)
action.setShortcut(QtGui.QKeySequence("d"))
self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonRight, \
                 QtCore.SLOT("animateClick()"))
self.addAction(action)

action = QtGui.QAction(self)
action.setShortcut(QtGui.QKeySequence("Space"))
self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonStop, \
                 QtCore.SLOT("animateClick()"))
self.addAction(action)  

所以当我启动我的应用程序时,这些是原始的键盘命令。如果我尝试将键“a”设置为 self.pushButtonSelectLeft 并将键“d”设置为驻留在不同选项卡上的 self.pushButtonSelectRight,则没有任何反应,并且原始 WASD 命令仍然存在。

我已经尝试删除操作列表并重新初始化操作列表,但这只是完全删除了所有操作并且没有按键工作:

if tabIndex == 2:
    actionList = self.actions()
    for i in actionList:
        del i

    action = QtGui.QAction(self)
    action.setShortcut(QtGui.QKeySequence("a"))
    self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonSelectLeft, \
                 QtCore.SLOT("animateClick()"))
    self.addAction(action)

    action = QtGui.QAction(self)
    action.setShortcut(QtGui.QKeySequence("d"))
    self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonSelectRight, \
                 QtCore.SLOT("animateClick()"))
    self.addAction(action)

elif tabIndex == 3:
    # delete list again
    # change "a" to trigger 'Send button'
    # change "d" to trigger 'Next button'

elif tabIndex == 4:
    # etc....

我可以编写某种 if-elif 循环来根据当前的选项卡分配键吗?

最佳答案

您的代码不起作用的原因是您没有真正删除任何内容。 actions() 方法将返回一个新的 Python 列表,其中包含对操作的引用。您的循环将清除该 Python 列表,但不会触及内部 Qt 列表,因此操作不会被删除。

你想要的,更像这样:

    for action in self.actions():
        self.removeAction(action)
        action.deleteLater()

关于python - 有没有办法将按键重新分配给 Qt 中的不同功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22924657/

相关文章:

python - 属性错误: module 'shapely' has no attribute 'affinity'

python - Pycharm:Python Qt代码代码补全

python - 为什么 PyQt4 DialogBox OpenFileName 在 Linux 下卡住直到其他线程完成

python - 如何在 Python 中编写像 Jasmine 这样的嵌套测试用例

python - 将列表理解分配给枚举值

python - 如何在同一张图中绘制不同频率的各种数据?

python - 如何在 QT (PyQT) 中实现类似于 Google Image 搜索的布局?

c++ - 构建 qt 解决方案时 Unresolved external 问题和一些警告

android - 将 QT Android 应用程序移植到 iOS

qt - 样式不适用于 QItemDelegate