Search code examples
pythonpyqtpyqt5qt-designer

How to save individual values and reopen them for later use?


I created an app that simply adds two values together. My goal is to save BOTH of those values into a file, so that I can re-insert them later. Right now I can only get it to save one value, I can also reopen the file I saved it to and insert the value back in.

from PyQt5 import QtWidgets, uic
from PyQt5.QtWidgets import QPushButton


class MyWindow(QtWidgets.QMainWindow, QPushButton):
    def __init__(self):
        super(MyWindow, self).__init__()
        uic.loadUi('File_Stuff.ui', self)
        self.setWindowTitle("File Stuff")
        self.Add.clicked.connect(self.Math)

        openFile = QtWidgets.QAction("&Open File", self)
        openFile.setShortcut("Ctrl+O")
        openFile.triggered.connect(self.file_open)

        saveFile = QtWidgets.QAction("&Save File", self)
        saveFile.setShortcut("Ctrl+S")
        saveFile.triggered.connect(self.file_save)

        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu('&File')
        fileMenu.addAction(openFile)
        fileMenu.addAction(saveFile)


    def Math(self):
        a = self.LE1.text()
        b = self.LE2.text()
        answer = float(a) + float(b)
        answer2 = str(answer)
        self.TE.setText(answer2)

    def file_open(self):
        name = QtWidgets.QFileDialog.getOpenFileName(self, 'Select File')
        file = open(name[0], 'r')

        with file:
            text = file.read()
            self.LE1.setText(text)
 # if I put self.LE2.setText(text), it inserts both values into both Line Edits

    def file_save(self):
        name = QtWidgets.QFileDialog.getSaveFileName(self, 'Select File')
        file = open(name[0], 'w')
        text = self.LE1.text()
        file.write(text)
        file.close()
 # if I put text2 = self.LE2.text() and file.write(text2), it saves them together

if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

I cannot recall the two values separately when I reopen the file they are saved into.


Solution

  • Try it:

    from PyQt5 import QtWidgets, uic
    from PyQt5.QtWidgets import QPushButton, QWidget, QLineEdit, QTextEdit, QGridLayout 
    
    
    class MyWindow(QtWidgets.QMainWindow, QPushButton):
        def __init__(self):
            super(MyWindow, self).__init__()
    
    #        uic.loadUi('File_Stuff.ui', self)
            centralWidget = QWidget()
            self.setCentralWidget(centralWidget)
            self.Add = QPushButton("Add")
            self.LE1 = QLineEdit()
            self.LE2 = QLineEdit() 
            self.TE  = QTextEdit()
    
    
            self.setWindowTitle("File Stuff")
            self.Add.clicked.connect(self.Math)
    
            openFile = QtWidgets.QAction("&Open File", self)
            openFile.setShortcut("Ctrl+O")
            openFile.triggered.connect(self.file_open)
    
            saveFile = QtWidgets.QAction("&Save File", self)
            saveFile.setShortcut("Ctrl+S")
            saveFile.triggered.connect(self.file_save)
    
            mainMenu = self.menuBar()
            fileMenu = mainMenu.addMenu('&File')
            fileMenu.addAction(openFile)
            fileMenu.addAction(saveFile)
    
            layout = QGridLayout(centralWidget)
            layout.addWidget(self.LE1)
            layout.addWidget(self.LE2)
            layout.addWidget(self.TE)
            layout.addWidget(self.Add)
    
        def Math(self):
            a = self.LE1.text()
            b = self.LE2.text()
            answer = float(a) + float(b)
            answer2 = str(answer)
            self.TE.setText(answer2)
    
        def file_open(self):
            name = QtWidgets.QFileDialog.getOpenFileName(self, 'Select File')
            file = open(name[0], 'r')
    
            with file:
    #            text = file.read()
                myList = file.read().split()                                         # <---
                self.LE1.setText(myList[0])                                          # <---
                self.LE2.setText(myList[1])                                          # <---
    
     # if I put self.LE2.setText(text), it inserts both values into both Line Edits
    
        def file_save(self):
            name = QtWidgets.QFileDialog.getSaveFileName(self, 'Select File')
            file = open(name[0], 'w')
    
            text = "{}\n{}".format(self.LE1.text(), self.LE2.text())                   # <---
    
            file.write(text)
            file.close()
     # if I put text2 = self.LE2.text() and file.write(text2), it saves them together
    
    if __name__ == "__main__":
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        window = MyWindow()
        window.show()
        sys.exit(app.exec_())