python gtk保存gtksourcevi

2024-09-27 22:33:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在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

Tags: 函数textnonegtkgetreturnresponsesave
1条回答
网友
1楼 · 发布于 2024-09-27 22:33:29

据我所知,在两次调用之间,您不会以任何方式保留文件名。在新创建的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-分支和elif-分支中,调用

^{pr2}$

把这个放到一个单独的方法中。我保证,如果你来改变你的文件写作,你会忘记改变这个代码段的第二次出现。在

相关问题 更多 >

    热门问题