【问题标题】:QT Designer how to assign 2 hotkeys to a QPushButton (python3)QT Designer如何将2个热键分配给QPushButton(python3)
【发布时间】:2015-07-08 22:06:40
【问题描述】:

我创建了一个简单的 GUI 并将“Enter”分配给 QPushButton(“Begin”)。这是它的行:

self.Begin.setShortcut(_translate("Form", "Enter"))

Evrything 完美运行,但是如何为同一个按钮分配 2 个热键变体?我希望按钮对 2 个热键做出反应:Enter 和 Return(通常在 NumPad 上使用“Big Enter”和“Small Enter”)

提前致谢。

【问题讨论】:

    标签: python-3.x keyboard-shortcuts qt-designer pyqt5 qpushbutton


    【解决方案1】:

    有几种方法可以做到这一点。可能最简单的就是使用QShortcut

    QShortcut(Qt.Key_Enter, self.Begin, self.handleBegin)
    QShortcut(Qt.Key_Return, self.Begin, self.handleBegin)
    

    要获得按钮动画行为,请尝试以下操作:

    QShortcut(Qt.Key_Enter, self.Begin, self.Begin.animateClick)
    QShortcut(Qt.Key_Return, self.Begin, self.Begin.animateClick)
    

    【讨论】:

    • 谢谢。您的回答简短而简单。请将其更正为: [code] QtWidgets.QShortcut(QtCore.Qt.Key_Enter, self.Begin, self.Begin.animateClick) QtWidgets.QShortcut(QtCore.Qt.Key_Return, self.Begin, self.Begin.animateClick) 'code ' 在 PyQt 5.4 中,QShortcut 在 QtWidgets 中,而不是在 QtGui 中
    【解决方案2】:

    除了使用 QKeySequence 类,您还可以使用 QShortcut 类:创建两个 QShortcut,当每个回车键被按下时触发;然后,将这些对象的每个 activated 信号与 QPushButton 的 click 插槽链接:

    # This one is for the big key
    # Creation of the QShortcut, big_enter_seq is an intermediate
    big_enter_seq = QKeySequence(Qt.Key_Return)
    big_enter = QShortcurt(big_enter_seq, self.Begin)
    # Linking
    big_enter.activated.connect(self.Begin.click)
    big_enter.activatedAmbiguously.connect(self.Begin.click)
    
    # This one is for the keypad key
    small_enter_seq = QKeySequence(Qt.Key_Enter)
    small_enter = QShortcut(small_enter_seq, self.Begin)
    small_enter.activated.connect(self.Begin.click)
    small_enter.activatedAmbiguously.connect(self.Begin.click)
    

    注意activatedAmbiguously 信号:我将您发送到Qt5 documentation 以了解。理论上,根据 Qt5 文档,此代码应该可以工作,但是在我的计算机(带有 Gnome 3.14.0 的 Fedora 21)上,无法识别小键盘键...问题在于 Qt.Key_Enter,根据 @987654322 @,应该指好钥匙...告诉我它是否可以在您的计算机上使用!

    【讨论】:

    • 谢谢,我将使用下一个答案,因为它更简单,但是您的阅读和学习非常有趣。我不明白一件事:为什么我们需要创建 big_enter_seq = QKeySequence(Qt.Key_Return) 如果我们不使用 big_enter_seq - 代码中的其他任何地方。可能这就是为什么它在你的情况下不起作用。您的第二行可能应该是这样的: big_enter = QShortcur(big_enter_seq, self.Begin)
    • 是的,我很抱歉,我犯了一个错误,但现在我已经解决了!在您的计算机上,Qt.Key_Return 是否可以使用小键盘输入?
    • 不,很遗憾,它不起作用。我得到一个错误: big_enter_seq = QKeySequence(Qt.Key_Return) NameError: name 'Qt' is not defined (我使用的是 Qt 5.4)
    • 您必须在代码开头写上from PyQt5.QtCore import Qt! ekhumoro 的解决方案有效吗?
    • 谢谢。 1) 添加 from PyQt5.QtCore import Qt 并纠正拼写错误 (QShortcurt)。您的解决方案工作得很好(输入和返回)。 (但没有像 Ekhumoro 回答中的按钮动画)。 2)是的,Ekhumoro 的解决方案工作正常,但我不得不纠正 QtWidgets.QShortcut 而不是他的 QtGui.QShortcut - 可能是因为我使用的是 QT 5 而他(可能)使用 Qt 4。3)我很感激感谢您的时间和帮助。 @ekhumoro
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多