我正在使用pyqt的Qshortcut来尝试检测一个键组合来触发一些动作,即何时 用户在QtextEdit小部件中键入 - > ,我想打印“更改模式”。 我已经看到其他关键序列示例涉及CTRL + E或其他一些CTRL或Shift键 组合,
self.shcut1 = QtGui.QShortcut(self)
self.shcut1.setKey("CTRL+E")
self.connect(self.shcut1, QtCore.SIGNAL("activated()"), self.close)
但我真的想陷入 - > (连字符后跟一个大于号)。有关如何执行此操作的任何建议
答案 0 :(得分:1)
抓住信号QTextEdit::textChanged()
,每个用户进行更改,扫描文字“ - >”。 Granter每次扫描整个文本块的蛮力方法并不漂亮;另一种选择是仅扫描文本的最后两个字符。然而,这错过了用户创建' - >'的情况删除' - '和'>'之间的文字字符。如果你不担心这种情况,那么就去看看最后两个。 QTextEdit::cursorPositionChanged
可能允许您在插入/删除点进行精确测试。
答案 1 :(得分:1)
QShortCut
仅接受QtCore.Qt::KeyboardModifiers的组合。尝试使用事件过滤器:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4 import QtGui, QtCore
class MyWindow(QtGui.QTextEdit):
modeChanged = QtCore.pyqtSignal(bool)
_seenMinus = False
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.installEventFilter(self)
self.modeChanged.connect(self.on_modeChanged)
def on_modeChanged(self):
print "Changing Mode."
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.KeyPress:
if event.key() == QtCore.Qt.Key_Minus:
self._seenMinus = True
elif event.key() == QtCore.Qt.Key_Greater \
and event.modifiers() == QtCore.Qt.ShiftModifier \
and self._seenMinus:
self.modeChanged.emit(True)
self.setStyleSheet("""
background-color: lightgray;
""")
elif event.modifiers() != QtCore.Qt.ShiftModifier:
if self._seenMinus == True:
self.modeChanged.emit(False)
self._seenMinus = False
self.setStyleSheet("")
return super(MyWindow, self).eventFilter(obj, event)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.show()
sys.exit(app.exec_())