2013-11-28 115 views
2

我對PyQt和Python很新。我仍然試圖瞭解很多事情。PyQt幫助新手請使用getOpenFileNames填充QListWidget

在下面的例子中,我想給我補QListWidget與文件打開了QDialog。我不明白我如何添加列表中選擇的文件。我應該上新班嗎?我如何連接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() 

回答

1

self.sources更改時,QListWidget的元素不會更改。所以self.FileList.addItems(self.sources)setupList()應該被刪除,而是放在addFiles()讓每一個文件的對話框中選擇時,QListWidget的爲addItems方法被調用。然後return self.sourcesaddFiles()將是不必要的。

+0

非常感謝,我更瞭解。 – user3046026

+0

@ user3046026你可以請[接受](http://stackoverflow.com/help/accepted-answer)我的答案。 –

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) 
+0

非常感謝,它幫助我理解。 – user3046026