PyQt帮助新手请使用getOpenFileNames填充QListWidget

时间:2013-11-28 13:58:39

标签: python pyqt qlistwidget

我是PyQt和Python的新手。我仍在努力了解很多事情。

在下面的示例中,我想用打开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()

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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)