tKinter:无效的文件错误

时间:2015-01-09 08:54:44

标签: file dialog tkinter python-3.4

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

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'>

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

1 个答案:

答案 0 :(得分:1)

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

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

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