python - 如何在 PyQT5 对话窗口中记录按下的组合键
问题描述
我从主窗口打开对话框,通过夹住键,我用它们的名字填充该行。问题是我不明白你需要在哪里循环检查所有键的状态。也许还有另一种方法可以按下按键?或者你需要在哪里收听钳位,使对话框不挂起,字符串更新。
MainWindow:
def showBindings(self, param):
from dialogs import KeyBindingsDialog
self.dialog = KeyBindingsDialog()
self.dialog.show()
Dialog:
class KeyBindingsDialog(QtWidgets.QDialog):
def __init__(self, parent=None):
super(KeyBindingsDialog, self).__init__(parent)
self.ui = KeyBindings()
self.ui.setupUi(self)
解决方案
使用 QKeySequenceEdit:
from PyQt5 import QtCore, QtGui, QtWidgets
class KeySequenceEdit(QtWidgets.QKeySequenceEdit):
def keyPressEvent(self, event):
super(KeySequenceEdit, self).keyPressEvent(event)
seq_string = self.keySequence().toString(QtGui.QKeySequence.NativeText)
if seq_string:
last_seq = seq_string.split(",")[-1].strip()
le = self.findChild(QtWidgets.QLineEdit, "qt_keysequenceedit_lineedit")
self.setKeySequence(QtGui.QKeySequence(last_seq))
le.setText(last_seq)
self.editingFinished.emit()
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self._keysequenceedit = KeySequenceEdit(editingFinished=self.on_editingFinished)
button = QtWidgets.QPushButton("clear", clicked=self._keysequenceedit.clear)
hlay = QtWidgets.QHBoxLayout(self)
hlay.addWidget(self._keysequenceedit)
hlay.addWidget(button)
@QtCore.pyqtSlot()
def on_editingFinished(self):
sequence = self._keysequenceedit.keySequence()
seq_string = sequence.toString(QtGui.QKeySequence.NativeText)
print("sequence: ", seq_string)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
推荐阅读
- nativescript - 提交时表单视图触发错误
- java - SWT TabFolder:TabItems太多时如何自动压缩
- c# - WPF 从 datagridtemplatecolumn 获取 TextBox 值
- perl - 尝试使用 perl Math::GSL::ODEIV
- android - 访问 SupportPlaceAutocompleteFragment 结果监听器
- c# - 限制字符串的前 2 个字符
- python - 在 Django/Python 中使用 os.environ 访问 Heroku 的配置变量时遇到问题
- macos - 我如何将系统时区设置为 UTC,以便 joda DateTime 不会忽略它?
- unity3d - 如何使用例如 Sprite.create 获取相机图像?任何想法?
- hive - Teradata 数据类型与 Hive 数据类型不兼容