web-dev-qa-db-fra.com

Comment lire QTextedit en python?

J'ai créé l'interface graphique à l'aide de QTDesigner et enregistre le fichier au format .ui. Puis convertissez le fichier en fichier .py en utilisant le code suivant 

pyuic4 -x test.ui -o test.py 

Maintenant, je veux intégrer mon code de projet à ce fichier test.py. Depuis que je suis nouveau sur pyqt4, je ne sais pas comment lire du texte pour le modifier, le sauvegarder dans un fichier et vice-versa. Voici mon code. 

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 __== "__main__":
  import sys
  app = QtGui.QApplication(sys.argv)
  AnaphoraResolution = QtGui.QDialog()
  ui = Ui_AnaphoraResolution()
  ui.setupUi(AnaphoraResolution)
  AnaphoraResolution.show()
  sys.exit(app.exec_())  

Lorsque je clique sur entrer (bouton poussoir), l'entrée dans textEdit est lue et enregistrée dans un fichier nommé input.txt. Quand je clique sur quitter (bouton), la sortie dans le fichier outfile.txt est lue et écrite dans textEdit_2. Comment résoudre ceci?

11
user3251664

Si tout ce dont vous avez besoin est le texte affiché dans votre widget QTextEdit, vous pouvez y accéder en utilisant la méthode toPlainText() sur le widget dont vous avez besoin du texte.

Exemple: 

mytext = self.textEdit.toPlainText()

À ce stade, vous pouvez faire ce que vous voulez avec mytext. Vous pouvez l'écrire dans un fichier, vous pouvez le manipuler, etc.

Si vous devez (re) renseigner votre QTextEdit avec la valeur modifiée de mytext, vous pouvez le faire en utilisant setPlainText

self.textEdit.setPlainText(mytext)

Pour écrire la chaîne dans un fichier, procédez comme suit:

with open('somefile.txt', 'a') as f:
    f.write(mytext)

Ceci ajoutera mytext à somefile.txt

26
Andy

Avec la réponse affichée ci-dessus. Ne modifiez pas le fichier .py converti lorsque vous utilisez pyuic4. Vous souhaitez incorporer une classe pour gérer la configuration afin de pouvoir modifier l'interface utilisateur sans effacer tout ce que vous avez écrit. Exemple dans 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)

Cela devrait être la façon dont vous utilisez les fichiers UI convertis pour que vous puissiez le rééditer et que vous ne perdiez pas tout le travail que vous avez mis dans la structure de contrôle de l'interface utilisateur. Cela vous permettra également d'utiliser la même interface utilisateur à plusieurs fins, car vous l'utiliserez comme modèle et modifierez l'action des boutons dans un fichier différent. J'espère que cela t'aides.

0
Jarith