python gtk сохранить gtksourceview
Я работаю с GTK в Python. Я заметил, что легко сохранить как, но по какой-то причине я не могу просто сохранить файл. Я думал, что настрою его, чтобы проверить, было ли оно сохранено, а затем СОХРАНИТЬ, но по какой-то причине он перезапускает функцию снова и снова без сохранения значения имени файла. То, что меня убивает, так это то, что это ошибка новичка. почему-то я забыл сохранить значение после запуска функции. Я надеюсь это имеет смысл.
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
1 ответ
Насколько я могу судить, вы не сохраняете свое имя файла между вызовами. Ты звонишь filename = chooser.get_filename()
на вновь созданном FileChooseDialog - это всегда будет возвращать 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
и в elif
-ответ, звони
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()
Поместите это в отдельный метод. Я обещаю, что вы забудете изменить второе вхождение этого фрагмента кода, если вы когда-нибудь захотите изменить запись файла.