PyQt5 KeySequenceEdit не отображает клавиши F10... а вместо этого пишет текст
Я хочу отобразить в KeySequenceEdit клавиши F10, F11 и иже с ними, но вместо этого получаю, если это F10 то показывает "Media Play".
Как мне получать не описание этой клавиши, а саму клавишу?
Вот я нажал F10:
Код:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QKeySequenceEdit, QPushButton, QHBoxLayout
from PyQt5.QtGui import QKeySequence
class KeySequenceEdit(QKeySequenceEdit):
def keyPressEvent(self, event):
super().keyPressEvent(event)
sequenceString = self.keySequence().toString(QKeySequence.NativeText)
print(QKeySequence().fromString(sequenceString, QKeySequence.PortableText))
if sequenceString:
last_key_stroke = sequenceString#.split(',')[-1].strip()
self.setKeySequence(QKeySequence(last_key_stroke))
class Detector(QWidget):
def __init__(self):
super().__init__()
self.resize(1000, 130)
mainLayout = QHBoxLayout()
self._keysequenceEdit = KeySequenceEdit()
mainLayout.addWidget(self._keysequenceEdit)
button_clear = QPushButton('Clear', clicked=self._keysequenceEdit.clear)
mainLayout.addWidget(button_clear)
button_print = QPushButton('Print')
button_print.clicked.connect(self.get_value)
mainLayout.addWidget(button_print)
self.setLayout(mainLayout)
def get_value(self):
sequence = self._keysequenceEdit.keySequence()
sequenceString = sequence.toString(QKeySequence.NativeText)
if sequenceString:
print('Key stroke: {0}'.format(sequenceString))
app = QApplication(sys.argv)
app.setStyleSheet("""
QLineEdit {font-size: 25px; height: 40px;}
QPushButton {font-size: 25px; height: 40px;}
""")
demo = Detector()
demo.show()
sys.exit(app.exec_())
Ответы (1 шт):
На моей клавиатуре
я получаю F10 при наборе сочетания клавиш Fn+F10
Fn — клавиша-модификатор, и внешне работает подобно другим клавишам-модификаторам, таким как Ctrl , ⇧, Shift и Alt .
При нажатии обычной клавиши-модификатора микроконтроллер в клавиатуре посылает скан-код самого модификатора, который операционная система распознаёт и комбинирует с кодами нажатых в то же время клавиш.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QKeySequenceEdit, \
QPushButton, QHBoxLayout
from PyQt5.QtGui import QKeySequence
class KeySequenceEdit(QKeySequenceEdit):
def keyPressEvent(self, event):
super().keyPressEvent(event)
sequenceString = self.keySequence().toString(QKeySequence.NativeText)
print(QKeySequence().fromString(sequenceString, QKeySequence.PortableText))
print(f'sequenceString: {sequenceString}\n') #
if sequenceString:
last_key_stroke = sequenceString#.split(',')[-1].strip()
self.setKeySequence(QKeySequence(last_key_stroke))
class Detector(QWidget):
def __init__(self):
super().__init__()
self.resize(1000, 130)
mainLayout = QHBoxLayout()
self._keysequenceEdit = KeySequenceEdit()
mainLayout.addWidget(self._keysequenceEdit)
button_clear = QPushButton('Clear', clicked=self._keysequenceEdit.clear)
mainLayout.addWidget(button_clear)
button_print = QPushButton('Print')
button_print.clicked.connect(self.get_value)
mainLayout.addWidget(button_print)
self.setLayout(mainLayout)
def get_value(self):
sequence = self._keysequenceEdit.keySequence()
sequenceString = sequence.toString(QKeySequence.NativeText)
if sequenceString:
print('Key stroke: {0}'.format(sequenceString))
app = QApplication(sys.argv)
app.setStyleSheet("""
QLineEdit {font-size: 25px; height: 40px;}
QPushButton {font-size: 25px; height: 40px;}
""")
demo = Detector()
demo.show()
sys.exit(app.exec_())
Update
если я просто нажму
F10выводит "Media Play", можно ли в этом случае, например отфильтровать и просто игнорировать такие нажатия?
Все можно, попробуйте:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QKeySequenceEdit, \
QPushButton, QHBoxLayout
from PyQt5.QtGui import QKeySequence
class KeySequenceEdit(QKeySequenceEdit):
def keyPressEvent(self, event):
super().keyPressEvent(event)
sequenceString = self.keySequence().toString(QKeySequence.NativeText)
print(QKeySequence().fromString(sequenceString, QKeySequence.PortableText))
if sequenceString:
last_key_stroke = sequenceString#.split(',')[-1].strip()
if last_key_stroke == "Media Play": # +++
last_key_stroke = "F10" # +++
self.setKeySequence(QKeySequence(last_key_stroke))
class Detector(QWidget):
def __init__(self):
super().__init__()
self.resize(1000, 130)
mainLayout = QHBoxLayout()
self._keysequenceEdit = KeySequenceEdit()
mainLayout.addWidget(self._keysequenceEdit)
button_clear = QPushButton('Clear', clicked=self._keysequenceEdit.clear)
mainLayout.addWidget(button_clear)
button_print = QPushButton('Print')
button_print.clicked.connect(self.get_value)
mainLayout.addWidget(button_print)
self.setLayout(mainLayout)
def get_value(self):
sequence = self._keysequenceEdit.keySequence()
sequenceString = sequence.toString(QKeySequence.NativeText)
if sequenceString:
print('Key stroke: {0}'.format(sequenceString))
self._keysequenceEdit.setFocus() # +++
app = QApplication(sys.argv)
app.setStyleSheet("""
QLineEdit {font-size: 25px; height: 40px;}
QPushButton {font-size: 25px; height: 40px;}
""")
demo = Detector()
demo.show()
sys.exit(app.exec_())



