无法为我的Hangman游戏设置快捷方式。除了使用QShortcut组件之外,还有其他方法可以绑定键盘快捷键吗?
问题是当我在myPushButtonHandler()方法中使用它时(不幸的是它使用了sender()),它抛出了一个错误:'QShortcut' object has no attribute 'text'
。我知道这是因为handler使用sender().text()
来识别哪个键(也显示在屏幕上)被按下了。
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分配给它的快捷方式。
发布于 2019-04-19 02:58:35
您不必替换QShortcut,您需要做的就是确定哪种类型的sender()调用该槽,并为每种类型应用适当的方法
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_())
https://stackoverflow.com/questions/55750627
复制相似问题