1 votes

Comment enregistrer le tampon de texte dans un fichier en utilisant Python et gtk?

Je tente de créer un éditeur de texte pour Ubuntu (je vais essayer!) en utilisant gtk2 et python. Jusqu'à présent, j'ai pu implémenter la fonction d'ouverture. Cependant, je ne sais pas comment obtenir le contenu du TextView et l'écrire dans un fichier (l'utilisateur aurait nommé et choisi le répertoire où le sauvegarder).

Voici le code de la fonction de sauvegarde du gtk.FileChooserDialog :

def on_saveButton_clicked(widget):
        print 'Bouton de sauvegarde cliqué'
        savechooser = gtk.FileChooserDialog(title='Enregistrer le fichier', 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('Tous les fichiers')
        filter.add_pattern('*')
        savechooser.add_filter(filter)

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

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

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

        response = savechooser.run()
        if response == gtk.RESPONSE_OK:
            filename = savechooser.get_filename()
            print filename, 'sélectionné.'
        elif response == gtk.RESPONSE_CANCEL:
            print 'Fermé, fichier non enregistré.'
        savechooser.destroy()

Est-ce que quelqu'un a des idées ?

2voto

edwin Points 3659

Tout d'abord, envisagez de mettre à jour votre code en Python 3 et Gtk+3 (PyGObject) comme le suggère @SylvainPineau. Ensuite, vous devez faire du GtkTextView une propriété/membre d'instance afin de pouvoir y accéder de l'intérieur de on_saveButton_clicked. Enfin, pour enregistrer réellement le contenu du GtkTextBuffer, vous pouvez utiliser les fonctions intégrées de Python ou GIO.

Avec les fonctions intégrées de Python (en supposant que vous enregistrez le GtkTextView dans self.view) :

if response == gtk.RESPONSE_OK:
    filename = savechooser.get_filename()
    print(filename, 'sélectionné.')

    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('Impossible d'enregistrer %s : %s' % (filename, err))

PS: Je remarque que vous n'utilisez pas de classes, puisque votre fonction on_saveButton_clicked n'a pas l'argument self. Si c'est le cas, pour tester votre code actuel, vous pouvez transformer self.view en une variable globale TEXT_VIEW.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X