调用 QtGui.QFileDialog.getExistingDirectory 时出错

error when calling QtGui.QFileDialog.getExistingDirectory

在 pyqt 代码中,我试图向用户提升一个对话框并让用户 select 一个文件夹。看来 QtGui.QFileDialog.getExistingDirectory 方法应该能够做到这一点。问题是在代码 运行.

之后有几条错误消息
D_Lib: debug printing for files [.*] and level [100] is turned on
D_Lib: debug printing for files [.*] and level [200] is turned on
D_Lib: debug printing for files [.*] and level [300] is turned on
11148:vf_shex.cpp(84): INFO: DllCanUnloadNow returned S_OK.

发生了什么事?

示例如下所示:

import sys
from PyQt4 import QtGui, QtCore

class FilePicker(QtGui.QWidget):
    """
    An example file picker application
    """

    def __init__(self):
        # create GUI
        QtGui.QMainWindow.__init__(self)
        self.setWindowTitle('File picker')
        # Set the window dimensions
        self.resize(300,75)

        # vertical layout for widgets
        self.vbox = QtGui.QVBoxLayout()
        self.setLayout(self.vbox)

        # Create a label which displays the path to our chosen file
        self.lbl = QtGui.QLabel('No file selected')
        self.vbox.addWidget(self.lbl)

        # Create a push button labelled 'choose' and add it to our layout
        btn = QtGui.QPushButton('Choose file', self)
        self.vbox.addWidget(btn)

        # Connect the clicked signal to the get_fname handler
        self.connect(btn, QtCore.SIGNAL('clicked()'), self.get_fname)

    def get_fname(self):
        """
        Handler called when 'choose file' is clicked
        """
        # When you call getOpenFileName, a file picker dialog is created
        # and if the user selects a file, it's path is returned, and if not
        # (ie, the user cancels the operation) None is returned
        try:
            fname = QtGui.QFileDialog.getOpenFileName(self, 'Select file')
        except:
            pass
        if fname:
            self.lbl.setText(fname)
        else:
            self.lbl.setText('No file selected')


# If the program is run directly or passed as an argument to the python
# interpreter then create a FilePicker instance and show it
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    gui = FilePicker()
    gui.show()
    app.exec_()

我无法在我的系统上重现这个。

创建对话框时的快速google搜索returnsthis result which indicates that the message is caused by a "Viewfinity" product being installed on the system, and is not an issue with PyQt. It seems that this product has modified the native system file dialog. You could avoid it by either uninstalling the product, or asking Qt to not use the native file dialog with the Qt.DontUseNativeDialog选项。