PyQt4:保存一个QListWidget

时间:2014-11-04 07:52:02

标签: python pyqt4

我是PyQt4的新手。

我有一个QListWidget,然后我想直接保存,但我发现的唯一示例是一个textedit,需要先打开一个文件。

但在我的情况下,没有文件可以打开。 是可以做到的吗?

到目前为止,我的代码看起来像这样:

def initUI(self):

    self.edit = QtGui.QListWidget()

    btn1 = QtGui.QPushButton("Check")

    btn2 = QtGui.QPushButton("Quit")

    btn1.clicked.connect(self.buttonClicked)            
    btn2.clicked.connect(self.closeEvent)

    toolBar = QtGui.QToolBar()

    fileButton = QtGui.QToolButton()
    fileButton.setText('File')
    fileButton.setMenu(self.menu())

    saveButton = QtGui.QToolButton()
    saveButton .setText('save')
    saveButton .clicked.connect(self.save_menu)

    toolBar.addWidget(fileButton)
    toolBar.addWidget(saveButton )

def save_menu(self):
    fn = QtGui.QFileDialog.getSaveFileName(self, "Save as...", '.',
            "ODF files (*.odt);;HTML-Files (*.htm *.html);;All Files (*)")

    self.setCurrentFileName(fn)
    return self.fileSave()

1 个答案:

答案 0 :(得分:2)

假设您只想保存列表中的文本条目,这应该可行。请注意,它会尝试将文件写入磁盘。

import sys
import os
from PyQt4 import QtGui


class AnExample(QtGui.QMainWindow):
    def __init__(self):
        super(AnExample, self).__init__()

        self.buildUi()

    def buildUi(self):

        self.listWidget = QtGui.QListWidget()
        self.listWidget.addItems(['one',
                                  'two',
                                  'three'])

        warning = QtGui.QLabel("Warning, this progam can write to disk!")
        saveButton = QtGui.QPushButton('Save to location...')
        justSaveButton = QtGui.QPushButton('Just save!')
        saveButton.clicked.connect(self.onSave)
        justSaveButton.clicked.connect(self.onJustSave)

        grid = QtGui.QGridLayout()
        grid.addWidget(warning, 0, 0)
        grid.addWidget(self.listWidget, 1, 0)
        grid.addWidget(saveButton, 2, 0)
        grid.addWidget(justSaveButton, 3, 0)

        central = QtGui.QWidget()
        central.setLayout(grid)

        self.setCentralWidget(central)

    def onSave(self):
        self.saveFile(True)

    def onJustSave(self):
        self.saveFile(False)

    def saveFile(self, showDialog):
        """
        Function that will save list items to file.
        """
        # save to TESTING.txt in current working directory
        savePath = os.path.join(os.getcwd(),
                                'TESTING.txt')

        # allow user to override location if requested
        if showDialog:
            savePath = QtGui.QFileDialog.getSaveFileName(self,
                                                         'Save text file',
                                                         savePath,
                                                         'TESTING.txt')

        # if just saving, or user didn't cancel, make and save file
        if len(savePath) > 0:
            with open(savePath, 'w') as theFile:
                for i in xrange(self.listWidget.count()):
                    theFile.write(''.join([str(self.listWidget.item(i).text()),
                                           '\n']))


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = AnExample()
    ex.show()
    sys.exit(app.exec_())