我已通过 Glade 向我的应用程序添加了 GtkFileChooserButton。它设置为文件夹选择模式。单击该小部件时,它会显示一个 Nautilus 书签下拉列表,最后有一个“其他”选项。单击“其他”时会启动一个新的文件选择器对话框。该按钮与任何其他自定义文件选择器对话框无关。
我正在使用的连接信号是“文件集”,并且我正在使用 Gtk.FileChooser.get_current_folder () 检索用户选择的文件夹的完整路径。
如果用户从“其他”选项中选择文件夹,此设置将正常工作。但如果用户从下拉列表中选择书签,则不会返回路径。如何解决这个问题?
有没有办法禁用此下拉列表并直接转到文件选择器对话框?我只想使用 GtkFileChooserButton,以便用户可以预览所选文件夹。
答案1
因为文件设置信号仅当用户变化该文件,则需要在需要知道路径时实际执行 get_current_folder() 调用,而不是在调用文件集信号时。从文档,在文件夹选择模式下,当用户从书签中选择路径时,我看不到收到通知的方法。
不过,作为替代方案,您可以在正常模式下使用 FileChooserButton,并在发送信号get_current_folder
时简单地使用file-set
。当选择文件时,这应该会为您提供用户所在的目录。不幸的是,在这种情况下,UI 也会看起来很奇怪,因为按钮会显示文件名,而您实际上正在使用该目录。
此外,您可能应该针对上游 GTK+ 提交有关此用例及其不可用原因的错误。file-set 信号确实应该被弃用并重命名为 path-set,并在两种模式下使用。
答案2
我使用了current_folder_changed
继承的信号GtkFileChooser
,它似乎甚至可以与书签一起工作。
答案3
文件夹选择模式下的 GtkFileChooserButton 可以返回文件夹 URI。使用urlparse
模块将 URI 转换为路径。即使使用书签也可以。希望这能解决您的问题。
import urlparse
folder_uri = filechooserbutton_meas.get_uri()
folder = urlparse.urlparse(folder_uri).path
答案4
如果用户从“其他”选项中选择文件夹,此设置将正常工作。但如果用户从下拉列表中选择书签,则不会返回路径。如何解决这个问题?
使用 GtkFileChooserButton,‘文件夹选择’模式。以下代码就足够了:
def on_mybutton_selection_changed(self, w):
print "selected folder: ", w.get_file().get_path()
我们会在下拉菜单的每次选择中获取目录路径,甚至书签。
我使用了从 GtkFileChooser 继承的 current_folder_changed 信号,它似乎甚至可以与书签一起工作。
小心使用 w.get_current_folder()。当用户从“其他”选项中选择文件夹时,它将返回最后选择的文件夹,而不是下拉菜单中选择的文件夹。