简体   繁体   English

按下回车键后显示文本

[英]show text after enter key pressed

I want show text after enter key pressed我想在按下输入键后显示文本

from PyQt5.QtWidgets import QWidget, QApplication, QPlainTextEdit, QVBoxLayout, QLabel
from PyQt5.QtCore import Qt
import sys


class PlainTextEdit(QPlainTextEdit):
    def __init__(self, parent):
        super().__init__(parent=parent)
        close_window = ClosingWindow()
        vbox = QVBoxLayout()
        self.close_window.setLayout(vbox)

    def keyPressEvent(self, QKeyEvent):
        if QKeyEvent.key() == Qt.Key_Enter:
            self.close_window.label_display.setText("Enter key pressed")



class ClosingWindow(QWidget):
    def __init__(self):
        super().__init__()
        plainText = PlainTextEdit(self)
        self.initUI()

    def initUI(self):
        vbox = QVBoxLayout()
        label_display = QLabel("Text Here")
        self.setLayout(vbox)
        self.setWindowTitle("Message Box")
        self.setGeometry(200, 200, 500, 300)
        self.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    close_win = ClosingWindow()
    sys.exit(app.exec_())

Your code has the following errors:您的代码有以下错误:

  • You are creating an infinite loop: You are creating a PlainTextEdit within a ClosingWindow, and in that PlainTextEdit you are creating another ClosingWindow, and in that other ClosingWindow you are creating a PlainTextEdit, etc. Every time you use the constructor of a class you are creating a different object, so the "close_window" created in PlainTextEdit is different from the "close_win".您正在创建一个无限循环:您在 ClosingWindow 中创建一个 PlainTextEdit,在该 PlainTextEdit 中您正在创建另一个 ClosingWindow,在另一个 ClosingWindow 中您正在创建一个 PlainTextEdit,等等。每次使用类的构造函数时创建不同的对象,因此在PlainTextEdit 中创建的“close_window”与“close_win”不同。

  • Each class must have a single responsibility (1) , in your case the responsibility of PlainTextEdit is to notify that it was pressed enter , and in that case you must use a signal.每个类都必须有一个职责(1) ,在您的情况下,PlainTextEdit 的职责是通知它已按下enter ,在这种情况下,您必须使用信号。

  • The enter key on the keyboard does not correspond to Qt::Key_Enter but Qt::Key_Return, it only corresponds to Qt::Key_Return on the keypad.键盘上的回车键对应的不是Qt::Key_Enter而是Qt::Key_Return,它只对应键盘上的Qt::Key_Return。

  • It is not necessary to create a layout in PlainTextEdit.无需在 PlainTextEdit 中创建布局。

Considering the above, the solution is:综上所述,解决方法是:

from PyQt5 import QtCore, QtWidgets


class PlainTextEdit(QtWidgets.QPlainTextEdit):
    sendTextSignal = QtCore.pyqtSignal(str)

    def keyPressEvent(self, event):
        if event.key() in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return):
            self.sendTextSignal.emit("Enter key pressed")
        else:
            self.sendTextSignal.emit("Not Enter key pressed")
        super().keyPressEvent(event)


class ClosingWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        plainText = PlainTextEdit()
        label_display = QtWidgets.QLabel("Text Here")
        plainText.sendTextSignal.connect(label_display.setText)

        vbox = QtWidgets.QVBoxLayout(self)
        vbox.addWidget(plainText)
        vbox.addWidget(label_display)
        self.setWindowTitle("Message Box")
        self.setGeometry(200, 200, 500, 300)
        self.show()


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    close_win = ClosingWindow()
    sys.exit(app.exec_())

(1) Single responsibility principle (一) 单一职责原则

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM