使用getOpenFileNames填充QListWidget

问题描述 投票:2回答:2

在下面的示例中,我想用打开Qdialog的文件填充我的QListWidget。我不明白如何添加列表中选择的文件。我应该上新课吗?如何连接两个方法setupList和addFiles?

import sys
from PyQt4 import QtCore, QtGui

from datapath import *

class MainWindow(QtGui.QMainWindow):

    def __init__(self):
        super(MainWindow,self).__init__()

        self.sources =[]

        self.setupActions()
        self.setupList()
        self.setupUi()
        self.setupStatusBars()

    def addFiles(self):
        files = QtGui.QFileDialog.getOpenFileNames(
            self,"Open File", dirpath, "txt Files (*.txt)")

        for string in files:
            self.sources.append(str(string))

        return self.sources

    def setupActions(self):
        self.exitAct = QtGui.QAction(
            QtGui.QIcon(':/images/exit.png'),
            "E&xit", self, shortcut="Ctrl+Q",
            statusTip="Exit the application", triggered=self.close
            )

        self.addFilesAct = QtGui.QAction(
            QtGui.QIcon(':/images/open.png'),
            "Add &Files", self, shortcut=QtGui.QKeySequence.Open,
            statusTip="Open an existing file", triggered=self.addFiles
            )

    def setupList(self):
        #FileList
        self.FileList = QtGui.QListWidget(self)
        self.FileList.addItems(self.sources)

    def setupUi(self):
        #Window size
        horiz = 300
        vert  = 300
        self.setGeometry(self.width()/2, self.height()/2,horiz,vert)
        self.setWindowTitle("test")

        #MenuBar
        self.FileMenu = self.menuBar().addMenu("&File")
        self.FileMenu.addAction(self.addFilesAct)
        self.FileMenu.addSeparator();
        self.FileMenu.addAction(self.exitAct)

        #ToolBar
        self.fileToolBar = self.addToolBar("Open")
        self.fileToolBar.addAction(self.addFilesAct)
        self.fileToolBar.setIconSize(QtCore.QSize(64,64))

        #Build Layout
        mainLayout = QtGui.QVBoxLayout()
        mainLayout.addWidget(self.FileList)

        widget = QtGui.QWidget()
        widget.setLayout(mainLayout)

        self.setCentralWidget(widget)

    def setupStatusBars(self):
        self.statusBar().showMessage("Ready")


def main():
    app = QtGui.QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

if __name__ == '__main__':

    main()
python pyqt qlistwidget qfiledialog
2个回答
1
投票

self.sources更改时,QListWidget的元素将不会更改。因此,应删除self.FileList.addItems(self.sources)中的setupList()并将其放入addFiles()中,以便每次在对话框中选择文件时,都会调用QListWidget的addItems方法。这样就不需要return self.sources中的addFiles()


1
投票

为了将文件追加到listwidget,addFiles方法应如下所示:

def addFiles(self):
    files = QtGui.QFileDialog.getOpenFileNames(
        self, "Open File", dirpath, "txt Files (*.txt)")
    for string in files:
        self.FileList.addItem(string)

source列表看起来可能是多余的。如果需要获取文件的完整列表,可以执行以下操作:

    sources = []
    for row in range(self.FileList.count()):
        item = self.FileList.item(row)
        # python3
        sources.append(item.text())
        # python2, convert to python strings
        # sources.append(unicode(item.text()))
    print(sources)
© www.soinside.com 2019 - 2024. All rights reserved.