如何将文本从文本编辑复制到字符串变量?

时间:2016-09-26 14:41:04

标签: python-3.x pyqt5

我正在尝试将我输入的文本复制到文本编辑中并将其存储到字符串变量中。 我编写了以下代码,但它显示'python已停止工作'

from PyQt5 import QtGui,QtWidgets,QtCore
import sys

class GUI(QtWidgets.QWidget):
     def __init__(self):
        super(GUI,self).__init__()
        self.initUI()
    def initUI(self):
        review = QtWidgets.QLabel('Review')
        reviewEdit = QtWidgets.QTextEdit()
        grid = QtWidgets.QGridLayout()

        grid.addWidget(review, 3, 0)
        grid.addWidget(reviewEdit, 3, 1, 5, 1)
        self.setLayout(grid)
        self.setGeometry(300,300,350,300)
        self.setWindowTitle('Sentiment Analysis')

        button = QtWidgets.QPushButton("OK")         
        grid.addWidget(button)
        button.clicked.connect(self.copyText)
        self.show()

    def copyText(self):
        reviewEdit.setText("text")
        print(text)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    GUI = GUI()
    sys.exit(app.exec_())

2 个答案:

答案 0 :(得分:1)

由于NameError方法中的copyText(),该程序停止工作。 reviewEdit变量不会在该范围内退出,因此您无法引用它。

解决此问题的方法是制作主类的所有子窗口小部件属性 - 然后您可以稍后使用self访问它们:

class GUI(QtWidgets.QWidget):
    def __init__(self):
        super(GUI,self).__init__()
        self.initUI()
    def initUI(self):
        self.review = QtWidgets.QLabel('Review')
        self.reviewEdit = QtWidgets.QTextEdit()
        grid = QtWidgets.QGridLayout()

        grid.addWidget(self.review, 3, 0)
        grid.addWidget(self.reviewEdit, 3, 1, 5, 1)
        self.setLayout(grid)
        self.setGeometry(300,300,350,300)
        self.setWindowTitle('Sentiment Analysis')

        self.button = QtWidgets.QPushButton("OK")
        grid.addWidget(self.button)
        self.button.clicked.connect(self.copyText)
        self.show()

    def copyText(self):
        # self.reviewEdit.setText("text")
        text = self.reviewEdit.toPlainText()
        print(text)

答案 1 :(得分:1)

首先,您应该将reviewEdit作为GUI类的成员。像这样:

self.reviewEdit = QtGui.QTextEdit()

接下来,在addBold(self)中,您将获得如下文本:

text = str(self.reviewEdit.toPlainText())