tKinter:无效文件错误

tKinter: Invalid File Error

每当我尝试使用此代码保存时:

def openfile(self):
    self.filename = askopenfilename(filetypes=(("Extinction Save files", "*.exis"), ("All files", "*.*")))

def save(self):
    try:
        if not self.filename:
            self.filename = asksaveasfile(mode='w', defaultextension=".exis", filetypes=(("Extinction Save files", "*.exis"), ("All files", "*.*")))

        # if not '.exis' in self.filename:
        #     self.filename += ".exis"

        self.filename.close()
        with open(self.filename, "w") as file:
            file.write(self.compiledata)
    except Exception as error:
        print(str(error))

def saveas(self):
    try:
        self.filename = asksaveasfile(mode='w', defaultextension=".exis", filetypes=(("Extinction Save files", "*.exis"), ("All files", "*.*")))

        # if not '.exis' in self.filename:
        #     self.filename += ".exis"

        self.filename.close()
        with open(self.filename, "w") as file:
            file.write(self.compiledata)
    except Exception as error:
        print(str(error))

def compiledata(self):
    char = comboBox.currentText()
    health = lineEdit_2.text()
    level = lineEdit_3.text()
    XP = lineEdit_4.text()
    inv = []
    for index in range(self.listWidget.count()):
        inv.append(self.listWidget.item(index))

    return char + '\ninv[' + ', '.split(inv) + '\n]' + health + '\n' + level + '\n' + XP

我收到以下错误消息:

invalid file: <_io.TextIOWrapper name='C:/Users/Joan/Desktop/file.exis' mode='w' encoding='cp1252'>

我在这个网站上看到过一个例子,有人给出了类似的错误消息,但解决方案对我没有帮助。我只是不明白此时我应该做什么。

因为你使用asksaveasfile(),所以self.filename不是文件名,而是打开的文件。然后您使用 self.filename.close(),因此 self.filename 成为一个关闭的文件,但 open(...) 需要一个文件名。

要从文件中获取文件名,您可以使用 self.filename.name,因此:

with open(self.filename.name, "w") as file: