PyQt5 输入文本无法作为 QPlainTextEdit 中的代码执行

PyQt5 input text can't be executed as code in QPlainTextEdit

我有一个 QMainWindow,它包含一个 QPlainTextEdit 和一个点击甚至连接的按钮。当用户完成文本输入并按下按钮时,我只想执行用户输入,例如“1+1”。我应该得到“2”,但它是“1+1”。非常感谢您的回复,谢谢!

import sys
from PyQt5.QtWidgets import QMainWindow, QPushButton, \
    QApplication, QVBoxLayout, QPlainTextEdit, QWidget


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setFixedSize(600, 600)
        l_layout = QVBoxLayout()
        self.edit = QPlainTextEdit()
        self.edit.setFixedSize(400, 300)
        self.edit1 = QPlainTextEdit()
        self.edit1.setFixedSize(100, 100)
        self.btn = QPushButton('Test')
        self.btn.clicked.connect(self.press)
        l_layout.addWidget(self.edit)
        l_layout.addWidget(self.edit1)
        l_layout.addWidget(self.btn)
        dummy_widget = QWidget()
        dummy_widget.setLayout(l_layout)
        self.setCentralWidget(dummy_widget)

    def press(self):
        text = self.edit.toPlainText()
        try:
            code = """print(text)"""
            exec(code)
        except Exception as e:
            print('not ok!')


app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

您应该 evaluate 输入文本然后打印它,如下所示:

 def press(self):
        text = self.edit.toPlainText()
        try:
            print(eval(text))
        except Exception as e:
            print('not ok!')

请注意,因为 eval() 使用会导致安全问题(人们在您的应用程序上执行 python 代码)。确保您的输入经过清理。