首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >键盘快捷键-替代方法

键盘快捷键-替代方法
EN

Stack Overflow用户
提问于 2019-04-19 00:56:21
回答 1查看 67关注 0票数 0

无法为我的Hangman游戏设置快捷方式。除了使用QShortcut组件之外,还有其他方法可以绑定键盘快捷键吗?

问题是当我在myPushButtonHandler()方法中使用它时(不幸的是它使用了sender()),它抛出了一个错误:'QShortcut' object has no attribute 'text'。我知道这是因为handler使用sender().text()来识别哪个键(也显示在屏幕上)被按下了。

代码语言:javascript
复制
def buttonClick(self):
    letter = self.sender().text()
    ...
    MUCH more code...
    ...


def setRow(self, row, letters):
    for letter in letters:
        button = QPushButton(letter)
        self.buttons.append(button)
        self.shortcuts.append(QShortcut(QKeySequence(letter), self))
        self.shortcuts[-1].activated.connect(self.buttonClick)
        button.setStyleSheet(QPushButtonStyle + "border: 3px solid #73ff38;")
        row.addWidget(button)
    return row

...
...
...


def setButtons(self):
    for button in self.buttons :
        button.clicked.connect(self.buttonClick)

有没有什么“巧妙”的方法来避免这个问题?我需要将每个字母从A到Z分配给它的快捷方式。

EN

回答 1

Stack Overflow用户

发布于 2019-04-19 02:58:35

您不必替换QShortcut,您需要做的就是确定哪种类型的sender()调用该槽,并为每种类型应用适当的方法

代码语言:javascript
复制
import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.buttons = []
        self.shortcuts = []
        row = QtWidgets.QHBoxLayout(self)
        letters = list("ABCDEFG")
        self.setRow(row, letters)
        self.setButtons()

    def setRow(self, row, letters):
        for letter in letters:
            button = QtWidgets.QPushButton(letter)
            # button.setStyleSheet(QPushButtonStyle + "border: 3px solid #73ff38;")
            shortcut = QtWidgets.QShortcut(QtGui.QKeySequence(letter), self)
            shortcut.activated.connect(self.buttonClick)
            self.buttons.append(button)
            self.shortcuts.append(shortcut)
            row.addWidget(button)

    def setButtons(self):
        for button in self.buttons:
            button.clicked.connect(self.buttonClick)

    @QtCore.pyqtSlot()
    def buttonClick(self):
        letter = ""
        if isinstance(self.sender(), QtWidgets.QPushButton):
            letter = self.sender().text()
        elif isinstance(self.sender(), QtWidgets.QShortcut):
            letter = self.sender().key().toString(QtGui.QKeySequence.NativeText)
        print(letter)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55750627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档