Outils pour utilisateurs

Outils du site


couper_copier_coller

Le couper-copier-coller au menu!

On le voit dans quasiment tous les programmes d'application graphiques, mais quand on veut le faire en Python, on s'aperçoit qu'il n'y a pas beaucoup d'exemples concrets, et on patauge un moment.

Je l'ai appliqué à partir du menu d'une fenêtre Tkinter, qui lance les 3 méthodes: couper, copier et coller.

Sur cette fenêtre, il n'y a que 2 widgets “entry”, l'un appelé “saisie” et l'autre “resultat. Chacun de ces 2 widgets peut avoir le focus.

Et, bien sûr, ça fonctionne sous Windows et sous Linux!

Voici le code. Il est auto-documenté:


    def couper(self):
        # effacer l'éventuel contenu précédent du clipboard
        self.clipboard_clear()
        # sélectionner le widget qui a le focus et agir selon
        if self.focus_get()==self.saisie:
            try:
                # saisir le texte sélectionné 's' s'il y en a un
                a=self.saisie.index(Tkinter.ANCHOR)
                i=self.saisie.index(Tkinter.INSERT)
                # si la sélection a été faites à l'envers, inverser a et i
                if i<a:
                    a,i=i,a
                t = self.saisie.get()
                s = t[a:i]
                # remettre le texte dont on a retiré la sélection
                t = t[0:a] + t[i:]
                self.saisie.delete(0,Tkinter.END)
                self.saisie.insert(0, t)
                # mettre le curseur à l'endroit où il y avait la sélection
                self.saisie.icursor(a)
                # et envoyer le texte sélectionné dans le clipboard
                self.clipboard_append(s)
            except:
                pass
        elif self.focus_get()==self.resultat:
            try:
                # saisir le texte sélectionné 's' s'il y en a un
                a=self.resultat.index(Tkinter.ANCHOR)
                i=self.resultat.index(Tkinter.INSERT)
                # si la sélection a été faites à l'envers, inverser a et i
                if i<a:
                    a,i=i,a
                t = self.resultat.get()
                s = t[a:i]
                # remettre le texte dont on a retiré la sélection
                t = t[0:a] + t[i:]
                self.resultat.delete(0,Tkinter.END)
                self.resultat.insert(0, t)
                # mettre le curseur à l'endroit où il y avait la sélection
                self.resultat.icursor(a)
                # et envoyer le texte sélectionné dans le clipboard
                self.clipboard_append(s)
            except:
                pass
        else:
            pass


    def copier(self):
        # effacer l'éventuel contenu précédent du clipboard
        self.clipboard_clear()
        try:
            # saisir la sélection s'il y en a une (sinon -> except)
            t = self.selection_get()
            # et envoyer le texte sélectionné dans le clipboard
            self.clipboard_append(t)
        except:
            pass


    def coller(self):
        try:
            # trouver la sélection du clipboard
            t = self.selection_get(selection='CLIPBOARD')
            # selon le widget qui a le focus, mettre la sélection au bon endroit
            if self.focus_get()==self.saisie:
                self.saisie.insert(Tkinter.INSERT, t)
            elif self.focus_get()==self.resultat:
                self.resultat.insert(Tkinter.INSERT, t)
            else:
                pass
        except:
            pass

couper_copier_coller.txt · Dernière modification: 2008/05/08 20:20 de tyrtamos

Outils de la page