我可以使用Tkinter(或其他GUI库)同时选择文件和文件夹吗?

时间:2012-10-27 21:09:03

标签: user-interface python-3.x tkinter

我正在使用Tkinter在Python中编写一个简单的文件传输程序,我希望能够同时选择文件和文件夹。

据我所知,我只能做其中一个,使用:

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

是否有可以让我选择文件和文件夹的库?

最好,我希望它返回当前目录中文件的文件名列表,以及目录中文件的路径。类似于:

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

1 个答案:

答案 0 :(得分:0)

它看起来不像Python支持的任何主要GUI库

  • PySide / PyQt
  • 的wxWidgets
  • PyGTK的

我附上了一个你想要的黑客。

按钮在选择文件和选择目录之间切换......这不是最好的用户体验,但它有效吗?您可能能够获得与其他框架类似的东西,但我不像PyQT / PySide那样熟悉它们。如果你喜欢它(由于某种原因),这应该在PyQt中工作。

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