我正在使用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没有可执行文件的任何扩展名。
答案 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,但我认为这种方法可行。