我正在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
据我所知,在两次调用之间,您不会以任何方式保留文件名。在新创建的FileChooseDialog上调用
filename = chooser.get_filename()
,这将始终返回None
。在由于我对您的程序的体系结构不太了解,所以我可以建议使用一个全局变量来保存文件名,例如:
但是记住,改变全局变量总是很危险的,也许你可以想出一个更好的方法。如果你把你的方法放到一个类中,你可以使
filename
成为这个类的一个属性,例如self._filename
。在另一句话:永远不要重复代码。在
^{pr2}$if
-分支和elif
-分支中,调用把这个放到一个单独的方法中。我保证,如果你来改变你的文件写作,你会忘记改变这个代码段的第二次出现。在
相关问题 更多 >
编程相关推荐