2013-02-04 85 views
3

如果我通過方法Gtk.FileChooserWidget.set_current_folder()設置當前文件夾中,我第一次打開文件選擇器,它會視作爲論據set_current_folder()如何設置Gtk.FileChooserWidget的默認開放路徑?

的位置,但是,如果我選擇一個文件時,我再次打開文件選擇器,它會在「most_recent_used_files」上打開。

我想它會打開最後選定的文件的文件夾路徑。

怎麼辦?

謝謝。

+0

如果你使用set_current_folder每次文件被打開? –

+0

它不起作用。從這個角度來看,這個小部件有一個非常奇怪的行爲。也許這是一個錯誤。 – Irr

回答

3

從文檔:

文件選擇的文檔的舊版本使用在各種情況下gtk_file_chooser_set_current_folder(),以讓應用程序的意圖提出一個合理的默認文件夾建議。這不再被認爲是一個好策略,因爲現在文件選擇器能夠自行提出好的建議。一般來說,只有當文件選擇器適合使用gtk_file_chooser_set_filename()時,才應使文件選擇器顯示特定的文件夾 - 即當您正在執行文件/另存爲命令並且您已將某個文件保存在某處時。

您可能會或可能不喜歡這種行爲的原因。如果您對它的出現感到好奇,請參閱郵件列表中的File chooser recent-files以及GNOME wiki上的Help the user choose a place to put a new file

0

設置當前文件夾中,每次對我的作品,但它是一個有點棘手。我使用的是Gtk 3.14和Python 2.7。

你必須重置目錄之前得到的文件名,或者它丟失,並且當前目錄可能是無,所以你必須以檢查。

此代碼是Debian的傑西測試和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()