在Linux上过滤QFileDialog中的可执行文件

4

我正在尝试制作一个文件选择器来选择一个程序(可执行文件)。

根据对QDir和QFileDialog的文档理解,以下代码应该显示一个只包含可执行文件的文件对话框。然而,实际情况是它什么也没有显示(连文件夹都没有),即使在目录中有可执行文件。

    self.browseDialog = QtGui.QFileDialog()
    self.browseDialog.setFilter(QtCore.QDir.Executable | QtCore.QDir.Files)
    self.browseDialog.exec_()

我做错了什么吗?这个能实现吗?另外,我还想做一些更复杂的事情:显示可执行文件或以特定扩展名结尾的文件。

我在Ubuntu Maverick上使用PyQt 4.7.4。


你尝试过在QtCore.QDir.AllDirs中使用或运算吗? - Michael Daum
1
你的示例在我这里可以正常工作并显示文件。你甚至可以删除Files筛选器,只使用Executable。不确定为什么你看到了不同的结果。 - jdi
@jdi,你必须也使用Files过滤器。文档明确表明:Executable值需要与Dirs或Files结合使用。 - Boštjan Mejak
但请注意,如果您正在使用其中一个静态方法(比如 getOpenFileName()),您必须将过滤器作为字符串传递,而不是作为标志。 - Boštjan Mejak
1个回答

0

我正在使用PyQt5,但必须做类似的事情,只是我想要 .txt 文件。为了实现这一点,我使用了 getFileOpenName() 和 filter= 选项。对于我的目的,它运行得很好。函数名称已从PyQt4更改为PyQt5,但下面的链接列出了PyQt4替代方案的名称。

http://pyqt.sourceforge.net/Docs/PyQt5/pyqt4_differences.html

PyQt4的QFileDialog中的getOpenFileNameAndFilter()、getOpenFileNamesAndFilter()和getSaveFileNameAndFilter()方法在PyQt5中已被分别重命名为getOpenFileName()、getOpenFileNames()和getSaveFileName()。 PyQt4版本中的这些方法在PyQt5中不受支持。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接