2

を使用してPythonで簡単なファイル転送プログラムをTkinter作成していますが、ファイルとフォルダを同時に選択できるようにしたいと考えています。

私が知る限り、私は次のいずれかを使用して、どちらか一方しか実行できません。

tkinter.filedialog.askopenfilenames()またはtkinter.filedialog.askdirectory()

ファイルとフォルダの両方を選択できるライブラリはありますか?

できれば、現在のディレクトリ内のファイルのファイル名のリストと、ディレクトリ内のファイルのパスを返すようにします。似たようなもの:

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

1 に答える 1

1

Pythonの主要なGUIライブラリのいずれもこれをサポートしていないようです

  • PySide / PyQt
  • wxWidgets
  • pyGTK

私はあなたが望むことをするようなハックを添付しました。

ボタンはファイルの選択とディレクトリの選択を切り替えます...これは最高のユーザーエクスペリエンスではありませんが、機能しますか?他のフレームワークと似たようなものを手に入れることができるかもしれませんが、私はPyQT/PySideほどそれらに精通していません。これは、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_()
于 2013-09-01T21:56:09.353 に答える