Копировать / сохранить элементы списка PyQt5 в текстовом файле python

После нескольких нажатий кнопки Добавить, он добавляет элементы в список. Я хочу сохранить все элементы из списка в текстовый файл с помощью кнопки сохранения.

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.listView = QtWidgets.QListWidget(Dialog)
        self.listView.setGeometry(QtCore.QRect(120, 40, 256, 192))
        self.listView.setObjectName("listView")
        self.AddButton = QtWidgets.QPushButton(Dialog)
        self.AddButton.setGeometry(QtCore.QRect(20, 80, 75, 41))
        self.AddButton.setObjectName("AddButton")
        self.SaveButton = QtWidgets.QPushButton(Dialog)
        self.SaveButton.setGeometry(QtCore.QRect(20, 140, 75, 41))
        self.SaveButton.setObjectName("SaveButton")

        self.AddButton.clicked.connect(self.ADD)
        self.SaveButton.clicked.connect(self.SAVE)


        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.AddButton.setText(_translate("Dialog", "Add to List"))
        self.SaveButton.setText(_translate("Dialog", "Save"))


    def ADD(self):
        self.listView.addItem("SAMPLE STRING")

    def SAVE(self):
        s = open('textfile.txt','a')
        for items in self.listView():
            s.write(item)
        s.close()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

но код по умолчанию SAVE(self): не работает.

1 ответ

Решение

self.listView является объектом и не вызывается self.listView(), Я полагаю, вы хотите сохранить текст предметов. Вы можете получить его и все другие данные элементов из модели listViews:

def SAVE(self):
    with open('textfile.txt','a') as s:
        for i in range(self.listView.model().rowCount()):
            text = self.listView.model().data(self.listView.model().index(i))
            # print(i, text)
            s.write(text)

или попросить text() из предметов:

def SAVE(self):
    with open('textfile.txt','a') as s:
        for i in range(self.listView.model().rowCount()):
            text = self.listView.item(i).text()
            # print(i, text)
            s.write(text)
Другие вопросы по тегам