2012-06-10 148 views
1

我正在編寫一個小型的Python代碼來加入文本文件,並且這些文件被選爲用戶輸入。但重要的是我可以獲得用戶選擇的順序,因爲我想按所選順序加入文件。但是我看到由getOpenFileNames返回的列表不保留選擇順序。Python Qt QFileDialog :: getopenFileNames - 文件選擇順序

有沒有人有任何建議來捕捉選擇順序?

謝謝。

回答

1

我本來想提出書面跟蹤的選擇currentChanged信號回調,但似乎使用getOpenFileNames時,這個信號不會被調用。另一種方法是使用show()顯示對話框,並將回調連接到filesSelected,在用戶單擊對話框上的「打開」按鈕後調用這些文件。回調的參數是一個包含所選文件的列表,它們似乎是按照它們的選擇順序(只是在python3/pyqt4上測試它)。與此

def callback(files): 
    joined_files = ''.join([open(f).read() for f in files]) 
    do_something_with(joined_files) 

dialog = QtGui.QFileDialog() 
dialog.setFileMode(3) #allow selection of multiple files 
dialog.filesSelected.connect(callback) 
dialog.show() 

的一個問題是,爲了不顯示在一個簡單的方法,用戶 - 「文件」文本框包含命令的文件的名字,但是當你選擇多了一些,這是凌亂文件。一個更好但稍微複雜的方法是使用FileDialog構建一個窗口小部件或對話框來選擇文件和一個List/TableWidget來存放要處理的文件,用戶可以一次添加一個文件。這將允許更好的俯視圖以及從多個目錄容易地選擇文件和更好的可擴展性(例如過濾,重新排列,對選擇進行排序)。

+0

謝謝。令人驚訝的是,沒有更簡單的方法來做到這一點。 – madu

1
self.filename = QtGui.QFileDialog.getOpenFileNames(
    self, 
    "Cargar tu documento", 
    self.lastOpenedFile, 
    "*.doc;*.odt;*.pdf") 
+0

你能解釋一下self.lastOpenedFile嗎?這不適合我。謝謝。 – madu