1

这让我发疯了,我到处搜索,找不到任何有这个问题的人。在寻找答案时,我无法很好地描述它,所以我来找你。

这是我的代码:

def browse(self):

    directory = QtGui.QFileDialog.getOpenFileName (self, "Find Files")

    if directory:
        self.newfilepath.setText(str(directory))
    else:
        self.newfilepath.setText('No file selected')

我正在尝试将结果放入窗口中的字段中,然后将其推送到 sqlite db 以供以后检索。不幸的是,下面的代码给了我一个我似乎无法修复的结果。

    name1 = (self.newdescript.toPlainText())

结果是:

(u'F:/GeoDatabase/GeoDatabase2.py', u'All Files (*.*)')

我想要的只是:

F:/GeoDatabase/GeoDatabase2.py

或者可能:

'F:/GeoDatabase/GeoDatabase2.py'

我如何让它只给我路径名而不是所有其他废话。我所做的一切似乎都没有改变,我不知道还能去哪里。

4

1 回答 1

1

这是由 PyQt4 和 PySide 之间的一点差异造成的。

使用 PyQt4,所有静态QFileDialog方法(例如getOpenFileName)要么返回单个字符串,要么(对于getOpenFileNames)返回字符串列表。

但是对于 PySide,getExistingDirectory返回单个字符串,但所有其他方法都返回一个由字符串/字符串列表以及所选过滤器组成的元组。

为了解决这个问题,在 PySide 中,您的代码需要如下所示:

def browse(self):
    path, filter = QtGui.QFileDialog.getOpenFileName(self, "Find Files")
    if path:
        self.newfilepath.setText(path)
    else:
        self.newfilepath.setText('No file selected')

PS

严格来说,PySide 在这里更正确。C++ API 修改其参数之一以提供选定的过滤器,因此返回一个元组是表示它的最 Pythonic 方式。

PyQt4 未能遵守修改后的参数,但可能因此更直观。

PPS

对于 PyQt5,与 PySide 不再有任何区别,因为它现在还返回路径和过滤器的元组。

于 2013-11-15T19:45:44.147 回答