Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用QFileDialog选项和检索saveFileName?_Python_Pyqt_Pyqt4_Exec_Qfiledialog - Fatal编程技术网

Python 如何使用QFileDialog选项和检索saveFileName?

Python 如何使用QFileDialog选项和检索saveFileName?,python,pyqt,pyqt4,exec,qfiledialog,Python,Pyqt,Pyqt4,Exec,Qfiledialog,我试图使用QFileDialog提示用户提供文件名和保存文本文件的位置。我使用了QtGui.QFileDialog.getSaveFileName,但我对使用一些选项感兴趣,比如设置默认后缀,启用保存文件对话框的详细视图,据我所知,仅使用getSaveFileName是不可能做到的。每当我设置它们时,getSaveFileName对话框就会忽略它们 所以,我的结局是这样的: dlg=QtGui.QFileDialog( self ) dlg.setWindowTitle( 'Print Thin

我试图使用QFileDialog提示用户提供文件名和保存文本文件的位置。我使用了QtGui.QFileDialog.getSaveFileName,但我对使用一些选项感兴趣,比如设置默认后缀,启用保存文件对话框的详细视图,据我所知,仅使用getSaveFileName是不可能做到的。每当我设置它们时,getSaveFileName对话框就会忽略它们

所以,我的结局是这样的:

dlg=QtGui.QFileDialog( self )
dlg.setWindowTitle( 'Print Things' )
dlg.setViewMode( QtGui.QFileDialog.Detail )
dlg.setNameFilters( [self.tr('Text Files (*.txt)'), self.tr('All Files (*)')] )
dlg.setDefaultSuffix( '.txt' )
if dlg.exec_() :
    print dlg

但是,现在我不确定如何获得用户传递的文件名?如果我打印dlg.getSaveFileName,它只会弹出另一个保存文件对话框。有人知道如何做到这一点,同时仍然将我希望得到尊重的所有选项传递给QFileDialog吗

dlg.selectedFiles()
返回包含所选文件名的unicode字符串列表。

无需创建
QFileDialog
的对象,因为它提供了四种可根据需要使用的静态方法

1) QFileDialog.getExistingDirectory(...)
2) QFileDialog.getOpenFileName(...)
3) QFileDialog.getOpenFileNames(...)
4) QFileDialog.getSaveFileName(...)
根据你的需要,你需要第四个。您还可以为此函数提供默认文件扩展名的参数。您可以将其用作:

fileName = QtGui.QFileDialog.getSaveFileName(self, 'Dialog Title', '/path/to/default/directory', selectedFilter='*.txt')
if fileName:
    print fileName
如果不知道用户可以将文件保存到哪个目录,则可以将
/path/to/default/directory
保留为空字符串

现在,当用户在输入文件名(不带文件扩展名)后单击对话框上的“保存”按钮时,此方法将返回文件路径,后跟
.txt
扩展名


有关QFileDialog.getSaveFileName()的详细信息,请参见

您是否确实使用pyqt4测试过这些内容?您的示例代码生成一个关键字错误。但是在任何情况下,即使有正确的参数,它也不会给出您声称的输出(pyqt5和pyside也是如此)!我测试了一下,然后贴在这里。工作起来很有魅力!在看到你的评论后,我再次复制了上面的行并将其粘贴到eclipse中,一点问题也没有!您的代码似乎是特定于Windows的:它在Linux上不工作,可能在OSX上也不工作(我无法测试)。我所说的“不工作”,是指没有附加扩展(这可以说是正确的行为)。关键字错误似乎是python3特有的,但是-我没有得到python2的错误。所以,总而言之,如果你正在寻找一个通用的、跨平台的解决方案,静态方法并没有那么好。是的,我使用的是Windows,但我会在Linux上尝试。感谢您提供了有用的信息。我不同意没有必要创建
QFileDialog
对象。例如,对话框的使用不会根据所选mime类型筛选器自动附加文件扩展名,因此开发人员必须自己处理这一问题另外,我也建议不要使用“/path/to/file”,而是使用
QDir
工具(例如
QDir::homePath()
QDir::cdUp()
(但不要使用
QDir::cd(…)
),这些工具至少可以部分处理在不同平台上使用路径URL所产生的问题。