0

我正在使用 pygtk 创建文件选择器小部件。我正在使用 Ubuntu 操作系统。我想在选择文件时放置一个过滤器。我的选择器小部件应该只选择可执行文件(菱形图标或在 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 似乎没有任何可执行文件扩展名。

4

1 回答 1

0

我对 gtk 不熟悉,但是快速浏览一下文档gtk.FileFilter我相信使用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,但我认为这种方法会起作用。

于 2013-08-09T22:01:57.607 回答