' selectedFilters'不是有效的关键字参数

时间:2016-06-30 11:16:50

标签: python pyqt5 signature qfiledialog

我使用PyQt5,当我尝试保存文件名时出错:

 csv_file_list = QtWidgets.QFileDialog.getOpenFileName(self, 'Open file', '', '*.csv')
    fileName = csv_file_list 
    fileName = QtWidgets.QFileDialog.getSaveFileName(self, 'Dialog Title', '/path/to/default/directory', selectedFilters='*.txt')
    if fileName:
        print (fileName)

它显示了我的错误:' selectedFilters'不是有效的关键字参数。

我不知道错误是否因为PyQt5而在这里

1 个答案:

答案 0 :(得分:3)

由于各种原因,C ++签名并不总是与PyQt签名完全匹配。这可能是PyQt5的最大弱点。确实需要一个全面的参考,详细说明C ++ API和PyQt API之间的所有差异。 PyQt4存在,形式为PyQt Class Reference(这是Qt文档的部分转换版本)。但目前没有任何东西可以与PyQt5相提并论。但是,您始终可以使用python的内省方法来自行解决差异。

这里是getSaveFileName的C ++签名:

 HTML
        <div id="drop_zone" style="width: 100%; height: 200px; "></div>
        <output id="list"></output>

JavaScript

        function ManejadorDeArchivosSeleccionados(evt) {
            evt.stopPropagation();
            evt.preventDefault();
            var files = evt.dataTransfer.files;
            var output = [];
            for(var i = 0, f; f = files[i]; i++) {
                output.push('<li><strong>', escape(f.name),'</strong> (', f.type || 'n/a',') - ',f.size, 'bytes, last modified ', f.lastModifiedDate.toLocaleDateString(), '</li>');
            }
            document.getElementById('list').innerHTML = '<ul>' + output.join(' ') + '</ul>';


        }         


        function ManejadorDragOver(evt) {
            evt.stopPropagation();
            evt.preventDefault();
            evt.dataTransfer.dropEffect = 'copy';
        }
        var dropZone = document.getElementById('drop_zone');
        dropZone.addEventListener('dragover',ManejadorDragOver,false);
        dropZone.addEventListener('drop',ManejadorDeArchivosSeleccionados,false);

这里是PyQt5签名,它是在python交互式会话中从help function获得的,即QString getSaveFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options() )

help(QtWidgets.QFileDialog.getSaveFileName)

如您所见,getSaveFileName(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, ) -> Tuple[str, str] 参数已更改为dirdirectory参数已更改为selectedFilter