如何在Python中从QTextedit读取内容?

31

我使用QTDesigner创建了GUI,并将文件保存为.ui扩展名。然后使用以下代码将该文件转换为.py文件

pyuic4 -x test.ui -o test.py 

现在我想将我的项目代码集成到这个test.py文件中。由于我是pyqt4的新手,我不知道如何从文本编辑器中读取文本并保存到文件,反之亦然。以下是我的代码。

from PyQt4 import QtCore, QtGui  
from final_ar_gui import *

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_AnaphoraResolution(object):  

  def setupUi(self, AnaphoraResolution):
    AnaphoraResolution.setObjectName(_fromUtf8("AnaphoraResolution"))
    AnaphoraResolution.resize(608, 620)
    self.textEdit = QtGui.QTextEdit(AnaphoraResolution)
    self.textEdit.setGeometry(QtCore.QRect(0, 110, 271, 341))
    self.textEdit.setObjectName(_fromUtf8("textEdit"))
    self.textEdit_2 = QtGui.QTextEdit(AnaphoraResolution)
    self.textEdit_2.setGeometry(QtCore.QRect(310, 110, 271, 341))
    self.textEdit_2.setObjectName(_fromUtf8("textEdit_2"))
    self.pushButton = QtGui.QPushButton(AnaphoraResolution)
    self.pushButton.setGeometry(QtCore.QRect(40, 470, 91, 27))
    self.pushButton.setObjectName(_fromUtf8("pushButton"))
    self.pushButton_2 = QtGui.QPushButton(AnaphoraResolution)
    self.pushButton_2.setGeometry(QtCore.QRect(170, 470, 171, 27))
    self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
    self.pushButton_3 = QtGui.QPushButton(AnaphoraResolution)
    self.pushButton_3.setGeometry(QtCore.QRect(370, 470, 81, 27))
    self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
    self.pushButton_4 = QtGui.QPushButton(AnaphoraResolution)
    self.pushButton_4.setGeometry(QtCore.QRect(480, 470, 98, 27))
    self.pushButton_4.setObjectName(_fromUtf8("pushButton_4"))
    self.label = QtGui.QLabel(AnaphoraResolution)
    self.label.setGeometry(QtCore.QRect(180, 30, 241, 20))
    self.label.setObjectName(_fromUtf8("label"))

    self.retranslateUi(AnaphoraResolution)
    self.connectActions()
    QtCore.QMetaObject.connectSlotsByName(AnaphoraResolution)

 def retranslateUi(self, AnaphoraResolution):
    AnaphoraResolution.setWindowTitle(QtGui.QApplication.translate("AnaphoraResolution", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton.setText(QtGui.QApplication.translate("AnaphoraResolution", "Enter", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton_2.setText(QtGui.QApplication.translate("AnaphoraResolution", "Pronominal Resolution", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton_3.setText(QtGui.QApplication.translate("AnaphoraResolution", "Clear", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton_4.setText(QtGui.QApplication.translate("AnaphoraResolution", "Quit", None, QtGui.QApplication.UnicodeUTF8))
    self.label.setText(QtGui.QApplication.translate("AnaphoraResolution", "Anaphora Resolution in Malayalam", None, QtGui.QApplication.UnicodeUTF8))

 def connectActions(self):

    self.pushButton.clicked.connect(self.ent)
 def ent(self):

    %Dont know what code to write


if __name__ == "__main__":
  import sys
  app = QtGui.QApplication(sys.argv)
  AnaphoraResolution = QtGui.QDialog()
  ui = Ui_AnaphoraResolution()
  ui.setupUi(AnaphoraResolution)
  AnaphoraResolution.show()
  sys.exit(app.exec_())  
当我点击 Enter(按钮)时,将读取文本编辑框中的输入并保存到名为input.txt的文件中。当我点击 Quit(按钮)时,将从outfile.txt中读取输出并写入textEdit_2中。如何解决这个问题?
3个回答

51
如果您只需要 QTextEdit 小部件中显示的文本,可以通过在需要文本的小部件上使用 toPlainText() 方法来访问它。
示例:
mytext = self.textEdit.toPlainText()

在这一点上,您可以随心所欲地处理mytext。您可以将其写入文件,可以进行操作等。
如果您需要使用setPlainText重新填充您的QTextEdit以修改mytext的值,可以这样做。
self.textEdit.setPlainText(mytext)

要将字符串写入文件,你需要像这样操作:
with open('somefile.txt', 'a') as f:
    f.write(mytext)

这将把mytext追加到somefile.txt


但是我该如何将这个“mytext”插入到文件中呢?如果我要插入马拉雅拉姆语,Unicode在这种情况下如何工作? - user3251664
@user3251664 我已更新答案,展示如何将字符串写入文件。 - Andy
1
@Andy self.textEdit.toPlainText() 不再起作用了。这个可以:mytext = self.textEdit.text() - ghost21blade

5

除了上面发布的答案之外,不要修改使用pyuic4转换时实际生成的.py文件。您需要添加一个类来处理设置,以便可以修改UI而不会删除您编写的所有内容。在pyqt5中有以下示例:

from MyConvertedUiFile import Ui_SomeName

class MyWorkingCode(QtWidgets.QMainWindow, Ui_SomeName):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.ent)

    def ent(self):
        mytext = self.textEdit.toPlainText()
        with open('somefile.txt', 'a') as f:
            f.write(mytext)

这是如何使用转换后的Ui文件的方法,它将使您能够重新编辑文件,而不会丢失您放入Ui控制结构中的所有工作。它还将允许您将同一Ui用于多种目的,因为您正在将其用作模板,并在不同的文件中更改按钮的功能。希望这有所帮助。

super(MainWindow, self).__init__(parent) 中,MainWindow 应该填什么?你能给我们举个例子吗? - ghost21blade

0

要逐行读取每个值,您可以这样做。 这将创建每个值的列表

self.ui.textEdit.toPlainText().split("\n")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接