【问题标题】:Fill a QListWidget using getOpenFileNames使用 getOpenFileNames 填充 QListWidget
【发布时间】:2013-12-14 14:32:50
【问题描述】:

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


    【解决方案1】:

    self.sources改变时,QListWidget的元素不会改变。所以self.FileList.addItems(self.sources) 中的setupList() 应该被删除,而是放入addFiles(),这样每次在对话框中选择文件时,都会调用QListWidget 的addItems 方法。那么addFiles()中的return self.sources就没有必要了。

    【讨论】:

      【解决方案2】:

      为了将文件附加到列表小部件,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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-16
        • 2014-07-14
        • 2016-05-06
        • 1970-01-01
        • 1970-01-01
        • 2018-08-30
        • 2015-08-07
        • 1970-01-01
        相关资源
        最近更新 更多