Tab键是否不向PyQt5注册?

时间:2019-01-21 13:16:15

标签: python python-3.x pyqt5

使用下面的代码,除Tab键外,每个键都会在终端上打印一些内容。 tab键仍然可以使用,我可以在行编辑之间切换。我可以捕捉到事件。

# i'm using PyQt5==5.11.3 and 32 bit python 3.7.1

from PyQt5.QtWidgets import QLineEdit, QLabel, QWidget, QVBoxLayout, QApplication
import sys

class Main(QWidget):
    def __init__(self):
        super().__init__()
        label = QLabel('event')
        input1 = Input()
        input2 = Input()
        layout = QVBoxLayout()
        layout.addWidget(label)
        layout.addWidget(input1)
        layout.addWidget(input2)
        self.setLayout(layout)
        self.show()

class Input(QLineEdit):
    def __init__(self):
        super().__init__()

    def keyPressEvent(self, event):
        # why doesn't tab print anything
        print(event.key())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    wid = Main()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

您可以使用QLineEdit中的event方法拦截Tab按下事件。您处理事件,然后将其传递给QLineEdit.event()方法。

类似的东西:

import sys

from PyQt5.QtCore import QEvent, Qt
from PyQt5.QtWidgets import QLineEdit, QLabel, QWidget, QVBoxLayout, QApplication

class Main(QWidget):
    def __init__(self):
        super().__init__()
        label = QLabel('event')
        input1 = Input()
        input2 = Input()
        layout = QVBoxLayout()
        layout.addWidget(label)
        layout.addWidget(input1)
        layout.addWidget(input2)
        self.setLayout(layout)
        self.show()

class Input(QLineEdit):
    def __init__(self):
        super().__init__()

    def keyPressEvent(self, event):
        print(event.key())

    def event(self,event):
        if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Tab:
            self.tabFollow()
        return QLineEdit.event(self,event)

    def tabFollow(self):
        print("tab-key pressed!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    wid = Main()
    sys.exit(app.exec_())