如何在python PYQt4中保存多个QtextEdits的文本



你能帮我解决这个问题吗,因为我是python PyQt初学者......我用python PyQt4创建了一个简单的应用程序,用于简单的数学计算,并在textEdit2和textEdit3中得到结果,当我单击计算按钮时,一切都很好,值出现在上面的文本编辑中...我想要的是将结果保存在相同的文本编辑中,以便下次打开应用程序并打开数据文件时,我会找到所有东西。我创建了保存和打开操作...但它将所有结果保存在相同的文本编辑中。

我正在附加我的代码以及主窗口,其中包含需要保存的结果,并在保存并打开应用程序并将所有结果放在一个文本编辑中后再次拍摄

enter code here
import sys  
from PyQt4 import QtCore, QtGui, uic   
import os   #os used to interface with windows  
import datetime as dt
import pickle
qtCreatorFile = "save.ui" # Enter ui file here
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)   
class MyApp(QtGui.QMainWindow, Ui_MainWindow):  
    def __init__(self):                         
        super (MyApp,self).__init__()       
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.initUI()
        self.calc.clicked.connect(self.Bss)
    def Bss (self):
        x = float(self.textEdit.toPlainText())     
        y = float(self.textEdit1.toPlainText())
        z= x+y
        w= x**2
        z_string = str(z)         #convert z value to a string then add this  string to textEdit and set as Text
        self.textEdit2.setText(z_string)
        w_string = str(w)
        self.textEdit3.setText(w_string)
    def initUI(self):           #QAction class insert New,action save in the main menue bar
        newAction = QtGui.QAction('New', self)  
        newAction.setShortcut('Ctrl+N')
        newAction.setStatusTip('Create new file')
        newAction.triggered.connect(self.newFile)  
        saveAction = QtGui.QAction('Save as', self)
        saveAction.setShortcut('Ctrl+S')
        saveAction.setStatusTip('Save current file')
        saveAction.triggered.connect(self.saveFile)
        openAction = QtGui.QAction('Open', self)
        openAction.setShortcut('Ctrl+O')
        openAction.setStatusTip('Open a file')
        openAction.triggered.connect(self.openFile)
        closeAction = QtGui.QAction('Close', self)
        closeAction.setShortcut('Ctrl+Q')
        closeAction.setStatusTip('Close Notepad')
        closeAction.triggered.connect(self.close)
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(newAction)
        fileMenu.addAction(saveAction)
        fileMenu.addAction(openAction)
        fileMenu.addAction(closeAction)
        self.show()
        self.statusBar()
    def newFile(self): #create a new function and remove all values in the QTEXTedit
        self.textEdit.clear()
        self.textEdit1.clear()
        self.textEdit2.clear()
        self.textEdit3.clear()                
    def openFile(self):
        self.text = QtGui.QTextEdit(self)
        filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        f = open(filename, 'r')
        filedata = f.read()
        self.textEdit1.setText(filedata)
        self.textEdit2.setText(filedata)
        self.textEdit3.setText(filedata)
        f.close()
        self.show()
    def saveFile(self):   # saving argument values in a filedata
        self.text = QtGui.QTextEdit(self)
        filename = QtGui.QFileDialog.getSaveFileName(self, 'Save File', os.getenv('HOME'))
        f = open(filename, 'w')
        filedata = self.textEdit1.toPlainText()
        f.write(filedata)
        filedata = self.textEdit2.toPlainText()
        f.write(filedata)
        filedata = self.textEdit3.toPlainText()
        f.write(filedata)
        f.close()
    def closeEvent(self, event):
        reply = QtGui.QMessageBox.question(self, 'Message',
        "Are you sure to quit?", QtGui.QMessageBox.Yes | 
        QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

如果我正确理解您的问题,由于您正在按顺序将textEdit值写入文件,因此您需要在打开文件时逐行读取该值,而不是使用read()方法读取整个文件内容。 所以 openFile() 方法应该是这样的:

def openFile(self):
    self.text = QtGui.QTextEdit(self)
    filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
    count = 0
    with open(filename,'r') as f:
        for line in f:
            count = count + 1
            if count == 1 : self.textEdit1.setText(line)
            elif count == 2 : self.textEdit2.setText(line)
            elif count == 3 : self.textEdit3.setText(line)
            else: break
    self.show()

希望对您有所帮助!

更新:

还要更改 saveFile() 方法,如下所示:

def saveFile(self):   # saving argument values in a filedata
    self.text = QtGui.QTextEdit(self)
    filename = QtGui.QFileDialog.getSaveFileName(self, 'Save File', os.getenv('HOME'))
    f = open(filename, 'w')
    filedata = self.textEdit1.toPlainText()
    filedata = str(filedata)+"n"
    f.write(filedata)
    filedata = self.textEdit2.toPlainText()
    filedata = str(filedata)+"n"
    f.write(filedata)
    filedata = self.textEdit3.toPlainText()
    filedata = str(filedata)+"n"
    f.write(filedata)
    f.close()

最新更新