PySide 和 Python - 如何浏览文件夹并写入文件名?

PySide and Python - How to browse a folder and write the file name?

我想按下一个按钮,然后打开文件浏览器并在标签中记下选定的文件。我有这个函数,当按下按钮时我会调用它:

    @Slot()
    def browse_folder(self):
        self.fname = QtGui.QFileDialog.getOpenFileName()
        self.statusLabel.setText(self.fname)

但是,我得到一个错误:

TypeError: 'PySide.QtGui.QLabel.setText' called with wrong argument types:
  PySide.QtGui.QLabel.setText(unicode, unicode)
Supported signatures:
  PySide.QtGui.QLabel.setText(unicode)

如何将包含选定文件名的 self.fname 转换为 unicode?

PySide 文档在这方面并不出色。但回答此类问题的最简单方法是构建一个小测试工具。类似于:

from PySide import QtCore,QtGui

def do_file():
    fname = QtGui.QFileDialog.getOpenFileName()
    print fname

app = QtGui.QApplication([])

button = QtGui.QPushButton("Test File")
button.clicked.connect(do_file)
button.show()

app.exec_()

运行 这一点会向您展示静态 getOpenFileName 方法 returns 一个由文件名第一个和所选择的过滤器组成的元组。例如,默认情况下,在我的系统上这个 returns ('C:/Users/Myname/Documents/filename', 'All Files (*.*)').

因此您需要在调用 setText 之前提取元组的第一个元素。