Como salvar o buffer de texto no arquivo usando Python e gtk?

1

Eu estou tentando criar um editor de texto para o Ubuntu (indo experimentá-lo!) usando gtk2 e python. Até agora consegui implementar a função aberta. No entanto, eu simplesmente não sei como posso obter o conteúdo do TextView e gravá-los em um arquivo (o usuário teria nomeado e decidido em qual diretório salvá-lo).

Aqui está o código para a função de salvaguarda gtk.FileChooserDialog:

def on_saveButton_clicked(widget):
        print 'saveButton clicked'
        savechooser = gtk.FileChooserDialog(title='Save File', action=gtk.FILE_CHOOSER_ACTION_SAVE, 
                                                        buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
                                                        gtk.STOCK_SAVE, gtk.RESPONSE_OK))
        filter = gtk.FileFilter()
        filter.set_name('All files')
        filter.add_pattern('*')
        savechooser.add_filter(filter)

        pyFilter = gtk.FileFilter()
        pyFilter.set_name('Python source file')
        pyFilter.add_pattern('*.py')
        savechooser.add_filter(pyFilter)

        rbFilter = gtk.FileFilter()
        rbFilter.set_name('Ruby source file')
        rbFilter.add_pattern('*.rb')
        savechooser.add_filter(rbFilter)

        cppFilter = gtk.FileFilter()
        cppFilter.set_name('C++ source file')
        cppFilter.add_pattern('*.cpp')
        savechooser.add_filter(cppFilter)

        response = savechooser.run()
        if response == gtk.RESPONSE_OK:
            filename = savechooser.get_filename()
            print filename, 'selected.'
        elif response == gtk.RESPONSE_CANCEL:
            print 'Closed, file not saved.'
        savechooser.destroy()

Alguém tem alguma ideia?

    
por TellMeWhy 15.03.2014 / 21:34

1 resposta

2

Em primeiro lugar, considere atualizar seu código para Python 3 e Gtk + 3 (PyGObject) como sugerido pelo @SylvainPineau. Então, você precisa tornar o GtkTextView uma propriedade / membro de instância para poder acessá-lo de dentro de on_saveButton_clicked . Por fim, para salvar o conteúdo do GtkTextBuffer, você pode usar funções internas do Python ou GIO.

Com funções internas do Python (e supondo que você salve o GtkTextView em self.view ):

if response == gtk.RESPONSE_OK:
    filename = savechooser.get_filename()
    print(filename, 'selected.')

    buf = self.view.get_buffer()
    text = buf.get_text(buf.get_start_iter(),
                        buf.get_end_iter(),
                        True)
    try:
        open(filename, 'w').write(text)
    except SomeError as err:
        print('Could not save %s: %s' % (filename, err))

PS: percebo que você não está usando classes, pois sua função on_saveButton_clicked não possui o argumento self . Nesse caso, para testar seu código atual, você pode transformar self.view em uma variável global TEXT_VIEW .

    
por edwin 16.03.2014 / 01:36