LE CLIPBOARD ou PRESSE PAPIER
Le clipboard ou presse papier vous sert de mémoire tampon pour copier coller des données, du texte, des images, des fichiers, et diverses autres choses...
Voici divers tutoriels pour apprendre à l'utiliser en tk :
COPIER COLLER DU TEXTE
Dans cet exemple nous allons copier un texte dans le presse papier et nous allons le coller dans un label.
Pour ce faire, il faut utiliser les trois commandes :
Voici un exemple simple :
wm geometry . 300x300+200+200 button .b1 -text "copier un texte" -command {clipboard append "lulu"} button .b2 -text "collerle texte" -command {.l1 configure -text [clipboard get]} label .l1 -bd 2 -relief solid pack .b1 .b2 .l1 -fill x
Dnas notre exemple en cliquant sur le premier bouton nous allons copier le texte "lulu" dans le presse papier puis avec le 2eme bouton, nous allons coller le contenu du presse papier dans le label dessous.
COPIER / COLLER UNE IMAGE
Il n'existe pas à l'heure actuelle où j'écris ces lignes (02 mai 2025) la possiblité de copier/Coller une image en standart avec Tcl TK 8.x. Je n'ai pas essayé avec tcl tk9 qui vient de sortir en octobre 2024.
Ce que nous pouvons faire cependant est un contournement pour arriver à coller une image.
En effet, il nous suffit simplement de convertir une image en mode texte (Base64) puis de coller l'image dans un label ou un canvas.
Voici comment faire:
Tout d'abord lorsque nous copions quelque chose dans le presse papier, il nous faut connaitre quel est le type de données présent. Pour ce faire, il existe un utilitaire très simple d'utilisation qui se nomme xclip.
(pour les débianiste, installez le par sudo apt install xclip)
Voici une procédure que j'ai codée pour retourner le contenu du presse papier en fonction du type de données présentes :
proc Clipboard_Content {} { set cl [exec xclip -selection clipboard -t TARGETS -o] ; # Get clipboard data type set li [split $cl "\n"] ; # Separate lines foreach l $li { switch $l { "text/plain" {return [clipboard get]} "UTF8_STRING" {return [clipboard get]} "image/png" { set b [exec xclip -selection clipboard -t image/png -o ">" /tmp/clipboard.png] set imgdata [exec base64 /tmp/clipboard.png] return $imgdata} } } }
par l'exécuition de xclip, j'obtiens le type de données. Les deux premiers (textplain et UTF8string) sont du texte et imagepng une image.
Pour le texte, je le copie simplement, et pour l'image j'enregistre le contenu du presse papier dans un fichier image temporaire que je convertie en texte avant de le coller dans l'interface.
Pour finir par un exemple concret, nous allons créer une petite application avec :
Voici à quoi ressemblera notre application :
Voici le code de notre application :
button .b2 -text "coller le texte" -command Paste_Text button .b3 -text "coller l'image" -command Paste_Image #button .b2 -text "collerle texte" -command {.txt insert end [clipboard get]} text .txt canvas .cv -width 200 -height 200 -bg #FFFFAA pack .b2 .txt .b3 .cv -fill x proc Clipboard_Content {} { set cl [exec xclip -selection clipboard -t TARGETS -o] ; # Get clipboard content set li [split $cl "\n"] ; # Separate lines foreach l $li { switch $l { "text/plain" {return [clipboard get]} "UTF8_STRING" {return [clipboard get]} "image/png" { set b [exec xclip -selection clipboard -t image/png -o ">" /tmp/clipboard.png] set imgdata [exec base64 /tmp/clipboard.png] return $imgdata} } } } # Example to insert text from clipboard proc Paste_Text {} { .txt insert end [Clipboard_Content] } # Example to insert image from clipboard proc Paste_Image {} { image create photo myimg -data [Clipboard_Content] .cv create image 100 100 -image myimg }
J'utilise l'application xclip pour obtenir le type de données dans le presse papier, et je l'utilise aussi pour enregistrer le presse papier dans un fichier temporaire /tmp/clipboard.png.
Enfin, j'utilise l'application base64 pour extraire les données sous forme de texte de l'image pour la coller dans une nouvelle image TK.
J'ai essayé de copier des textes et images depuis plusieurs endroits de Linux, comme ceci :
J'ai tenté plusieurs essais depuis gtk , Qt, tk, texte et image et le collage fonctionne.
J'ai essayé aussi depuis plusieurs applications comme thunar, firefox, mousepad, geany, etc.. aussi avec succès.
Même en copiant un petit bout d'image dans GIMP, le collage fonctionne aussi.
Petite remarque : La gestion des erreurs n'est pas implémentée et une erreur peut survenir si vous coller un image à la place d'un texte.
Merci pour votre attention.
Pour aller plus loin avec le presse papier ou clipboard
Aide sur le presse papier Clipboard