在pyqt中如何打印" Ctrl + key"按下Ctrl + anyKey时在QLineEdit中

时间:2016-01-27 09:15:29

标签: python-2.7 pyqt4

这里是我的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()

2 个答案:

答案 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)