如何设置Gtk.FileChooserWidget的默认打开路径?

3 投票
2 回答
5617 浏览
提问于 2025-04-17 14:40

如果我通过方法 Gtk.FileChooserWidget.set_current_folder() 设置当前文件夹,那么第一次打开文件选择器时,它会在我传给 set_current_folder() 的位置打开。

但是,如果我选择了一个文件,然后再重新打开文件选择器,它就会打开在“最近使用的文件”这个地方。

我希望它能在我最后选择的文件所在的文件夹路径打开。

该怎么做呢?

谢谢。

2 个回答

1

每次设置当前文件夹对我来说是有效的,但有点复杂。我正在使用 Gtk 3.14 和 Python 2.7。

在重置文件夹之前,你必须先获取文件名,否则文件名会丢失,而且当前文件夹可能是空的,所以你需要检查一下。

这段代码是在 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()
3

根据文档的说明:

以前的文件选择器文档建议在不同情况下使用gtk_file_chooser_set_current_folder(),目的是让应用程序能够推荐一个合理的默认文件夹。但现在这种做法不再被认为是好的选择,因为文件选择器现在能够自己做出不错的建议。一般来说,只有在适合使用gtk_file_chooser_set_filename()的情况下,才应该让文件选择器显示特定的文件夹。比如,当你在执行“文件/另存为”命令,并且已经在某个地方保存了一个文件时。

你可能会对这种行为的原因有不同的看法。如果你想了解这个变化的背景,可以查看文件选择器最近文件的邮件列表和帮助用户选择新文件的存放位置在GNOME维基上的内容。

撰写回答