我刚刚开始将Tkinter用于编程类,并且在使用文件对话框处理程序时遇到了一些麻烦。 fileopen和filesaveas方法正常工作,但filesave方法不正常。 规范要求filesave方法应保存到上次保存的文件中;如果没有保存文件,则保存到上次打开的文件;否则保存为默认名称quiz_spec.py。出于某种原因,前两个写入调用似乎没有保存文件到达时保存文件(并且也没有生成任何错误。) 如果有人能告诉我为什么文件格式和文件中的相同保存调用功能不同,我们将不胜感激,并指出了tkFileDialog保存功能的一个很好的例子。
class FileMan():
def __init__(self):
self.lastsave = None
self.lastopen = None
def fileopen(self):
handle = askopenfile(mode = 'r')
print "name of file you picked = "+str(handle.name)
self.lastopen = handle
print "first line of data from file: "+handle.readline()
def filesave(self):
if (self.lastsave):
self.lastsave.write("Save: Some data to save into the file\n")
elif (self.lastopen):
self.lastopen.write("Save: Some data to save into the file\n")
else:
handle = open('quiz_spec.py', 'w')
handle.write("Save: This is the new content of test.txt :-)")
def filesaveas(self):
handle = asksaveasfile(mode = 'w', defaultextension = '.py')
print "name of file you picked = "+str(handle.name)
self.lastsave = handle
handle.write("SaveAs: Some data to save into the file\n")
答案 0 :(得分:2)
我很清楚,在您拨打self.lastopen
时,您的文件句柄self.lastsave
和False
会被设置为等同于filesave
。在fileopen
和filesave
函数退出后,您是否检查过它们是否仍然存在?调试这种方式非常简单,请尝试:
my_man = FileMan()
my_man.fileopen()
my_man.filesave()
print my_man.lastopen
print my_man.lastsave
如果这不起作用,请尝试使用此结果更新您的问题,我们将从那里开始。此外,您应该检查是否:
print my_man.lastopen == False and my_man.lastsave == False
答案 1 :(得分:2)
我想通了,我没有关闭文件。傻我。