3

メソッドを使用して現在のフォルダーを設定した場合Gtk.FileChooserWidget.set_current_folder()、ファイルチューザーを初めて開くと、の引数として使用される場所で開きます。set_current_folder()

しかし、ファイルを選択すると、ファイルチューザーを再度開くと、「most_recent_used_files」で開きます。

最後に選択したファイルのフォルダパスで開きたいのですが。

どうやってするの?

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

4

2 に答える 2

3

ドキュメントから:

古いバージョンのファイルチューザーのドキュメントでは、アプリケーションに適切なデフォルトフォルダーを提案させることを目的として、さまざまな状況でgtk_file_chooser_set_current_folder()を使用することを提案しています。ファイルチューザーが独自に適切な提案を行うことができるようになったため、これはもはや適切なポリシーとは見なされません。一般に、gtk_file_chooser_set_filename()を使用するのが適切な場合、つまりFile / Save Asコマンドを実行していて、ファイルがすでにどこかに保存されている場合にのみ、ファイルチューザーに特定のフォルダーを表示させる必要があります。

あなたはこの振る舞いの理由を好むかもしれないし、好まないかもしれません。それがどのようにして発生したのか知りたい場合は、ファイルチューザーの最近のファイルを参照してください-メーリングリストのファイルと、ユーザーがGNOMEwikiに新しいファイルを配置する場所を選択できるようにします。

于 2013-02-05T15:19:28.780 に答える
1

毎回現在のフォルダを設定することは私にとってはうまくいきますが、それは少し注意が必要です。私はGtk3.14とPython2.7を使用しています。

ディレクトリをリセットする前にファイル名を取得する必要があります。そうしないと、ファイル名が失われ、現在のディレクトリがNoneになる可能性があるため、それを確認する必要があります。

このコードは、DebianjessieとWindows7でテストされています。

import os.path as osp

from gi.repository import Gtk

class FileDialog(Gtk.FileChooserDialog):
    def __init__(self, parent, title):
        Gtk.FileChooserDialog.__init__(self, title, parent)
        self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
        self.add_button(Gtk.STOCK_OPEN, Gtk.ResponseType.OK)

        self.set_current_folder(osp.abspath('.'))

    def __call__(self):
        resp = self.run()
        self.hide()

        fname = self.get_filename()

        d = self.get_current_folder()
        if d:
            self.set_current_folder(d)

        if resp == Gtk.ResponseType.OK:
            return fname
        else:
            return None

class TheApp(Gtk.Window):
    def on_clicked(self, w, dlg):
        fname = dlg()
        print fname if fname else 'canceled'

    def __init__(self):
        Gtk.Window.__init__(self)

        self.connect('delete_event', Gtk.main_quit)
        self.set_resizable(False)

        dlg = FileDialog(self, 'Your File Dialog, Sir.')
        btn = Gtk.Button.new_with_label('click here')
        btn.connect('clicked', self.on_clicked, dlg)

        self.add(btn)
        btn.show()

if __name__ == '__main__':
    app = TheApp()
    app.show()
    Gtk.main()
于 2015-02-07T16:04:21.097 に答える