我正在使用Python中的GTK。我注意到它很容易另存为,但出于某种原因,我不能只保存一个文件。我想我应该设置它来检查它是否被保存,然后保存,但是由于某种原因,它一次又一次地重新启动函数,但没有保存filename的值。最让我难受的是,这感觉像是一个初学者的错误。不知怎么的,我忘了在函数运行后保留这个值。我希望这是有意义的。
def SaveFile(filename):
chooser = gtk.FileChooserDialog("Save File...", None,
gtk.FILE_CHOOSER_ACTION_SAVE,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_SAVE, gtk.RESPONSE_OK))
filename = chooser.get_filename()
if filename == None:
response = chooser.run()
if response == gtk.RESPONSE_OK:
filename = chooser.get_filename()
chooser.destroy()
wbuffer = textview.get_buffer()
text = wbuffer.get_text(wbuffer.get_start_iter(), wbuffer.get_end_iter())
openfile = open(filename,"w")
openfile.write(text)
openfile.close()
print filename, "this is the first part"
return filename
else:
chooser.destroy()
elif filename != None:
wbuffer = textview.get_buffer()
text = wbuffer.get_text(wbuffer.get_start_iter(), wbuffer.get_end_iter())
openfile = open(filename,"w")
openfile.write(text)
openfile.close()
print filename, "made it this far"
return filename
else:
chooser.destroy()
return filename发布于 2013-01-17 15:22:55
据我所知,在两次调用之间,您没有以任何方式保持您的文件名。在新创建的FileChooseDialog上调用filename = chooser.get_filename() -这将始终返回None。
由于我不太了解您的程序的体系结构,我可以建议使用全局变量来保存文件名,例如:
filename = None
def SaveFile(filename):
global filename
if filename == None:
chooser = gtk.FileChooserDialog("Save File...", None,
gtk.FILE_CHOOSER_ACTION_SAVE,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_SAVE, gtk.RESPONSE_OK))
response = chooser.run()
if response == gtk.RESPONSE_OK:
filename = chooser.get_filename()
chooser.destroy()
wbuffer = textview.get_buffer()
text = wbuffer.get_text(wbuffer.get_start_iter(), wbuffer.get_end_iter())
openfile = open(filename,"w")
openfile.write(text)
openfile.close()
print filename, "this is the first part"
return filename
else:
chooser.destroy()
elif filename != None:
wbuffer = textview.get_buffer()
text = wbuffer.get_text(wbuffer.get_start_iter(), wbuffer.get_end_iter())
openfile = open(filename,"w")
openfile.write(text)
openfile.close()
print filename, "made it this far"
return filename
else:
chooser.destroy()
return filename但请记住,改变全局变量总是危险的,也许你可以想出一个更好的方法。如果你把你的方法放到一个类中,你可以让filename成为这个类的一个属性,例如,self._filename。
另一个备注:永远不要重复代码。在if-branch和elif-branch中,可以调用
wbuffer = textview.get_buffer()
text = wbuffer.get_text(wbuffer.get_start_iter(), wbuffer.get_end_iter())
openfile = open(filename,"w")
openfile.write(text)
openfile.close()将其放入一个单独的方法中。我向您保证,如果您要更改您的文件编写,您一定会忘记更改此代码片段的第二次出现。
https://stackoverflow.com/questions/14373409
复制相似问题