操作系统是Ubuntu时,使用pygtk在filechooser对话框中添加可执行文件的过滤器

时间:2013-08-09 21:45:51

标签: python ubuntu

我正在使用pygtk来创建文件选择器小部件。我正在使用Ubuntu OS。我想在选择文件时添加一个过滤器。我的选择器小部件应该只选择可执行文件(菱形图标或Ubuntu)。我想使用下面的代码:

dialog  = gtk.FileChooserDialog(title=None,action=gtk.FILE_CHOOSER_ACTION_OPEN,
                                  buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OK,gtk.RESPONSE_OK))

filter_file = gtk.FileFilter()
filter_file.add_pattern("*.bin")
filter_file.add_pattern("*.run")
filter_file.add_pattern("*.sh")
dialog.add_filter(filter_images)
dialog.show()

它不起作用。它不会在选择器窗口中显示可执行文件。我们有什么方法可以对可执行文件进行过滤,因为看起来Ubuntu没有可执行文件的任何扩展名。

1 个答案:

答案 0 :(得分:0)

我不熟悉gtk,但快速查看gtk.FileFilter的{​​{3}}会让我相信使用FileFilter.add_custom代替FileFilter.add_pattern将允许您编写一个自定义过滤器函数,可以获取文件的权限位,以确定它是否可执行。例如:

import os

def executable_filter(filter_info, data):
    path = filter_info[0]
#   Note that this only checks if the current effective user may execute the file.  If you need to know if owner/group/other can execute it, you'll probably want something from the os.stat module.
    return os.access(path, os.X_OK)

filter_file.add_custom((gtk.FILE_FILTER_FILENAME, None, None, None), executable_filter, None)

我无法测试这个,因为我没有设置gtk,但我认为这种方法可行。