Python QFileDialog上的取消按钮

Python QFileDialog上的取消按钮,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我遇到了一个问题,当我选择不保存文件并单击系统窗口上的“取消”时,程序将崩溃。以下是我收到的错误: Traceback (most recent call last): File "BasicEmail.py", line 166, in save_content with open(file_name[0], 'w') as f: FileNotFoundError: [Errno 2] No such file or directory: '' 这是我正在使用的代码: def save_c

我遇到了一个问题,当我选择不保存文件并单击系统窗口上的“取消”时,程序将崩溃。以下是我收到的错误:

Traceback (most recent call last):
File "BasicEmail.py", line 166, in save_content
with open(file_name[0], 'w') as f:
FileNotFoundError: [Errno 2] No such file or directory: ''
这是我正在使用的代码:

def save_content(self):
    file_name = QtWidgets.QFileDialog.getSaveFileName(self,'Save File',os.getenv('HOME'))
    if file_name:
        with open(file_name[0], 'w') as f:
            my_text = self.content.toPlainText()
            f.write(my_text)

先谢谢你。我知道我一定错过了什么

if file\u name:语句将始终为
True
,因为
getSaveFileName()
函数始终返回一个元组,该元组具有以下结构:
(filename,filters)
,最好获取名称并验证字符串是否为空

def save_content(self):
    file_name, _ = QtWidgets.QFileDialog.getSaveFileName(self, 'Save File', os.getenv('HOME'))
    if file_name != "":
        with open(file_name, 'w') as f:
            my_text = self.content.toPlainText()
            f.write(my_text)

另外:您可以使用
QtCore.QDir.homePath()
而不是
os.getenv('HOME')

字符串为空。从我所读到的内容来看,当操作被取消时,它返回一个字符串None或null。这可能就是为什么这是个问题,我已经试过了。唯一不起作用的是使用open(file_name,'w'),它必须写为open(file_name[0],'w')。当我在If语句之前打印文件名时,它会打印(“”)。然后是回溯。
traceback(最近一次调用最后一次):文件“BasicEmail.py”,第167行,保存内容为open(文件名,'w')为f:TypeError:expected str,bytes或os.PathLike对象,而不是tuple
对不起。我不熟悉这个网站。我过去常被告知要等。我刚刚把你的答案标对了。