在pyqt中如何打印“Ctrl+key"在 QLineEdit 中按下 Ctrl + anyKey [英] in pyqt how to print "Ctrl+key" in QLineEdit when pressed Ctrl + anyKey

查看:63
本文介绍了在pyqt中如何打印“Ctrl+key"在 QLineEdit 中按下 Ctrl + anyKey的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里是我的 kode,我为 QLineEdit 生成事件以将按下的组合键放入文本行它可以用于 Shift 键和 Alt 键但不是用于 Ctrl 键为什么?

here my kode where I generated event for QLineEdit to put pressed key combination in textline it Ok for Shift key and Alt key but not for Ctrl key why ?

#!/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 键为什么?

in textline it is Ok for Shift key and Alt key I can put by variable self.myText value in textline, but not for Ctrl key why ?

                print event.text()
                self.myText = "Ctrl+"+ event.text()
                self.emit(SIGNAL("press"))
            return True
        return QLineEdit.event(self, event)

if __name__ == "__main__":
    main()

推荐答案

原始示例不起作用的原因是因为许多 Ctrl+key 组合产生控制字符 - 例如Ctrl+J 产生一个换行符.

The reason why the original example doesn't work is because many of the Ctrl+key combinations produce control characters - e.g. Ctrl+J produces a newline.

捕获键盘组合的正确方法是使用 QKeySequence,它会起作用用于所有键,包括功能键、方向键、翻页/向下键等.您还可以使用QKeySequence.PortableText.

The correct way to capture keyboard combinations is using QKeySequence, which will work for all keys, including function keys, arrow keys, page up/down keys, etc. You can also get translated shortcuts by using QKeySequence.PortableText.

这是基于原始示例的演示:

Here's a demo based on the original example:

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.le.keyPressed.connect(self.update)

    def update(self, text):
        self.le.setText(text)

MOD_MASK = (Qt.CTRL | Qt.ALT | Qt.SHIFT | Qt.META)

class MyLineEdit(QLineEdit):
    keyPressed = pyqtSignal(str)

    def keyPressEvent(self, event):
        keyname = ''
        key = event.key()
        modifiers = int(event.modifiers())
        if (modifiers and modifiers & MOD_MASK == modifiers and
            key > 0 and key != Qt.Key_Shift and key != Qt.Key_Alt and
            key != Qt.Key_Control and key != Qt.Key_Meta):

            keyname = QKeySequence(modifiers + key).toString()

            print('event.text(): %r' % event.text())
            print('event.key(): %d, %#x, %s' % (key, key, keyname))

        self.keyPressed.emit(keyname)

if __name__ == "__main__":
    main()

这篇关于在pyqt中如何打印“Ctrl+key"在 QLineEdit 中按下 Ctrl + anyKey的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆