这里是我的kode,我为QLineEdit生成事件,将按下的组合键放在文本行中,对于Shift键和Alt键,但是不是为了Ctrl键,为什么?
#!/usr/bin/python
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
def main():
app = QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
self.la = QLabel("Press tab in this box:")
self.le = MyLineEdit()
layout = QVBoxLayout()
layout.addWidget(self.la)
layout.addWidget(self.le)
self.setLayout(layout)
self.connect(self.le, SIGNAL("press"),
self.update)
def update(self):
oldText = str(self.le.text())
self.le.setText(self.le.myText)
class MyLineEdit(QLineEdit):
def __init__(self, *args):
QLineEdit.__init__(self, *args)
self.myText = ""
def event(self, event):
if event.type() == QEvent.KeyPress:
if event.modifiers() & Qt.ControlModifier :
在文本行中对于Shift键和Alt键我可以通过变量self.myText值放在文本行中,但不能用于Ctrl键为什么?
print event.text()
self.myText = "Ctrl+"+ event.text()
self.emit(SIGNAL("press"))
return True
return QLineEdit.event(self, event)
if __name__ == "__main__":
main()
答案 0 :(得分:2)
原始示例无法工作的原因是因为许多 Ctrl + key 组合产生控制字符 - 例如 Ctrl + J 会产生换行符。
捕获键盘组合的正确方法是使用QKeySequence,它适用于所有键,包括功能键,箭头键,向上/向下翻页键等。您还可以使用QKeySequence.PortableText获取翻译的快捷方式。
这是基于原始示例的演示:
from("mqtt:foo?subscribeTopicName=#&host=tcp://127.0.0.1:1883")
.log("Message read from topic ${in.header.CamelMQTTSubscribeTopic}.");
答案 1 :(得分:0)
当我们使用返回键的int值的key()方法时,我们可以使用unichr()函数将int转换为char
class MyLineEdit(QLineEdit):
def __init__(self, *args):
QLineEdit.__init__(self, *args)
def event(self, event):
self.myText = ""
event_key = ""
if event.type() == QEvent.KeyPress:
if event.text() != "" :
event_key = str(unichr(event.key())).lower()
if event.modifiers()== Qt.ControlModifier :
print event.text()
self.myText = "Ctrl+" + event_key
self.emit(SIGNAL("press"))
return True
return QLineEdit.event(self, event)