我正在尝试创建一些GIMP插件,这里我有gtk FileDialog:
chooser = gtk.FileChooserDialog(title="Save as...",
action=gtk.FILE_CHOOSER_ACTION_SAVE,
buttons=(gtk.STOCK_SAVE,
gtk.RESPONSE_OK,
gtk.STOCK_CANCEL,
gtk.RESPONSE_CANCEL))
chooser.set_do_overwrite_confirmation(True)
我想将FileChoserDialog的当前文件夹设置为最后使用的目录,如
chooser.set_current_folder(">>>>>HERE I NEED THE DIRECTORY OF THE LAST SAVED IMAGE<<<<<<<<")
我怎么能那样做呢?
我唯一想到的是将文件名保存为图像。文件名,然后清除。
chooser.set_current_folder(choose_set_dir())
response = chooser.run()
filename = chooser.get_filename()
chooser.destroy()
if response == gtk.RESPONSE_OK
<...>
pdb.file_jpeg_save(image, drawable, filename, filename, 0.9, 0, 0, 0, "", 2, 1, 0, 0)
clear_filenames()
image.filename = filename
image.clean_all()
def choose_set_dir():
for img in gimp.image_list():
if img.filename:
return path.dirname(img.filename)
return path.expanduser("~/Desktop")
def clear_filenames():
for img in gimp.image_list():
if img.filename:
img.filename = ""
但这是一种hack,我想把事情做好。
也许不是个好主意…filecselect文档说:
请注意,旧版本的文件选择器文档建议在各种情况下使用gtk_file_chooser_set_current_folder(),目的是让应用程序建议一个合理的默认文件夹。这不再被认为是一个好的策略,因为现在文件选择器能够自己提出好的建议。一般来说,只有当使用gtk_file_chooser_set_filename()合适时,你才应该让文件选择器显示一个特定的文件夹,也就是说,当你正在执行另存为命令并且你已经在某处保存了一个文件时。
此外,文件选择器对话框中有"最近使用过的"书签,以便用户可以快速找到他们最近使用过的任何目录。
如果这还不够:
- 您可以迭代图像列表,并获得所有加载的图像的文件名,检查时间戳,并尝试推断最后保存的图像,但仍然需要这些图像当前在Gimp中打开。
- 在Linux上,您可以检查文件
~/.local/share/recently-used.xbel
,这是(大多数,包括Gimp,但不是全部)应用程序共享最近使用的文件信息的地方。最后一个文件是最近的文件。
更多提示:
gimp.user_directory(n)
(n in[0..8])返回一些目录的路径:Desktop, Documents, Pictures....- 将命名arg
run_mode=RUN_INTERACTIVE
添加到file_jpeg_save
使其引出JPEG选项对话框,因此您不需要硬编码选项,并且可以在以下调用中使用run_mode=RUN_WITH_LAST_VALS
来重用相同的设置。
我发现有一个叫做gimpshelf的模块
使用这个模块,我可以保存插件运行之间的数据
from gimpfu import *
from gimpshelf import shelf
import gtk
from os import path
def choose_set_dir():
if shelf.has_key('photo_sign_last_save_dir'):
return shelf['photo_sign_last_save_dir']
else:
return gimp.user_directory(USER_DIRECTORY_DESKTOP)
chooser = gtk.FileChooserDialog(title="Save As...",
action=gtk.FILE_CHOOSER_ACTION_SAVE,
buttons=(gtk.STOCK_SAVE,
gtk.RESPONSE_OK,
gtk.STOCK_CANCEL,
gtk.RESPONSE_CANCEL))
chooser.set_do_overwrite_confirmation(True)
chooser.set_current_folder(choose_set_dir())
response = chooser.run()
filename = chooser.get_filename()
chooser.destroy()
if response == gtk.RESPONSE_OK:
<...>
pdb.file_jpeg_save(image, drawable, filename, filename, 0.9, 0, 0, 0, "", 2, 1, 0, 0)
shelf['photo_sign_last_save_dir'] = path.dirname(filename)