按enter键后显示文本

2024-10-02 06:26:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在按下回车键后显示文本

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_())

Tags: fromimportselfcloseinitdefsyswindow
1条回答
网友
1楼 · 发布于 2024-10-02 06:26:00

您的代码有以下错误:

  • 你正在创建一个无限循环:你正在ClosingWindow中创建一个PlainTextEdit,在该PlainTextEdit中你正在创建另一个ClosingWindow,在该另一个ClosingWindow中你正在创建一个PlainTextEdit,等等。每次使用类的构造函数时,你都在创建一个不同的对象,因此,在明文编辑中创建的“close\u window”与“close\u win”不同

  • 每个类必须有一个单独的职责,在您的情况下,plaintextededit的职责是通知它被按下了enter,在这种情况下,您必须使用一个信号

  • 键盘上的回车键不对应于Qt::key\u enter,而是Qt::key\u Return,它只对应于键盘上的Qt::key\u Return

  • 无需在明文编辑中创建布局

综上所述,解决方案是:

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

相关问题 更多 >

    热门问题