1

テキスト ファイルを結合するための小さな Python コードを作成しています。ファイルはユーザー入力として選択されます。ただし、選択した順序でファイルを結合したいので、ユーザーの選択の順序を取得することが重要です。しかし、getOpenFileNames によって返されたリストが選択順序を保持していないことがわかります。

選択順序をキャプチャするための提案はありますか?

ありがとうございました。

4

2 に答える 2

1
self.filename = QtGui.QFileDialog.getOpenFileNames(
    self,
    "Cargar tu documento",
    self.lastOpenedFile,
    "*.doc;*.odt;*.pdf" )
于 2012-06-10T16:53:16.063 に答える
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()

これに関する 1 つの問題は、順序が簡単な方法でユーザーに示されないことです。「ファイル」テキストボックスには、順序付けられたファイルの名前が含まれていますが、複数のファイルを選択すると面倒です。より良いが少し複雑なアプローチは、ファイルを選択するための FileDialog と、処理するファイルを保持する List/TableWidget を使用して、ユーザーが一度に 1 つずつファイルを追加できるウィジェットまたはダイアログを作成することです。これにより、複数のディレクトリからファイルを簡単に選択できるだけでなく、全体像が向上し、拡張性が向上します (たとえば、選択内容のフィルタリング、再配置、並べ替え)。

于 2012-06-10T17:55:29.260 に答える