我使用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而在这里
答案 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]
参数已更改为dir
,directory
参数已更改为selectedFilter
。