2012-10-27 38 views
2

我正在用Python編寫一個簡單的文件傳輸程序,使用Tkinter,我希望能夠同時選擇文件和文件夾。我可以使用Tkinter(或其他一些GUI庫)來同時選擇文件和文件夾嗎?

至於我可以告訴大家,我只能做一個或另一個,使用:

tkinter.filedialog.askopenfilenames()tkinter.filedialog.askdirectory()

是否有任何庫讓我選擇文件和文件夾?

最好,我希望它返回當前目錄中文件的文件名列表,以及目錄中文件的路徑。類似的東西來:

["file1.f", "dir1/file2.f", "dir1/dir2/file3.f"] etc. 

回答

0

它看起來並不像任何Python的主要GUI庫支持此

  • PySide/PyQt的
  • wxWidgets的
  • PyGTK的

我附加了一種黑客,那種做你想做的事情。

這些按鈕在選擇文件和選擇目錄之間切換......這不是最好的用戶體驗,但它有效嗎?你可能能夠得到類似於其他框架的東西,但我不像PyQT/PySide那樣熟悉它們。這應該也可以在PyQt中工作,如果你喜歡它(出於某種原因)通過PySide。

import sys 
from PySide.QtGui import QFileDialog, QApplication, QWidget, QMainWindow, QPushButton, QVBoxLayout, QHBoxLayout 

app = QApplication(sys.argv) 
win = QMainWindow() 
main_layout = QVBoxLayout() 
buttons = QHBoxLayout() 
main_layout.addLayout(buttons) 


def set_directories(): 
    filedialog.setFileMode(QFileDialog.Directory) 

def set_files(): 
    filedialog.setFileMode(QFileDialog.AnyFile) 

def on_file_selected(file): 
    print(file) 

set_files_btn = QPushButton("File") 
set_files_btn.clicked.connect(set_files) 
set_dirs_btn = QPushButton("Directory") 
set_dirs_btn.clicked.connect(set_directories) 

buttons.addWidget(set_files_btn) 
buttons.addWidget(set_dirs_btn) 

filedialog = QFileDialog() 
main_layout.addWidget(filedialog) 


filedialog.fileSelected.connect(on_file_selected) 
filedialog.finished.connect(app.exit) 
win.setCentralWidget(QWidget(win)) 
win.centralWidget().setLayout(main_layout) 

win.show() 
app.exec_() 
相關問題