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()
4

2 回答 2

1

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

于 2013-11-28T15:00:20.040 回答
1

为了将文件附加到列表小部件,该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)
于 2013-11-28T19:08:28.577 回答