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() 时才使文件选择器显示特定文件夹 - 即,当您执行文件/另存为命令并且您已经在某处保存了文件时。

您可能喜欢也可能不喜欢这种行为的原因。如果您对它是如何产生的感到好奇,请参阅邮件列表中的文件选择器最近的文件和帮助用户选择在 GNOME wiki 上放置新文件的位置。

于 2013-02-05T15:19:28.780 回答
1

每次设置当前文件夹都对我有用,但这有点棘手。我正在使用 Gtk 3.14 和 Python 2.7。

你必须在重置目录之前获取文件名,否则它会丢失,并且当前目录可能是None,所以你必须检查它。

此代码在 Debian jessie 和 Windows 7 上进行了测试。

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 回答