Créer un QR code avec Python en 5 instructions

Un programme Python crée une image PNG à télécharger.

Créer un QR code avec Python permet de transformer un lien ou un texte en une image à partager. Dans cet article, vous allez le faire avec Segno, une bibliothèque Python consacrée aux QR codes. L’exemple comporte cinq instructions : vous pouvez modifier le code, l’exécuter dans cette page et télécharger le fichier obtenu.

Le QR code de départ contient l’adresse https://mlwebapp.com/. En le lisant avec un téléphone, on retrouve cette adresse. Vous pouvez ensuite la remplacer par votre propre lien ou par un court message. Le contenu est enregistré directement dans l’image : pour le changer, il faut générer un nouveau QR code.

Avant de commencer. Un navigateur récent et une connexion Internet suffisent pour cet essai. Le moteur Python se charge au premier clic sur Exécuter le code. Aucune installation de Python sur votre ordinateur n’est nécessaire pour utiliser le bloc ci-dessous.

Créer un QR code avec Python : exécuter l’exemple

Dans la ligne contenu = "https://mlwebapp.com/", remplacez uniquement ce qui se trouve entre les guillemets. Gardez les guillemets, puis cliquez sur Exécuter le code. Le premier démarrage peut prendre un moment ; les exécutions suivantes réutilisent le moteur déjà chargé.

L’image apparaît dans la zone Résultat de votre exécution. Le message Contenu lu dans l’image indique ce qu’un lecteur indépendant a réellement décodé. Comparez ce texte avec votre saisie avant de télécharger le fichier.

Comprendre les cinq instructions Python

Pour créer un QR code avec Python, distinguez trois choses : le texte à partager, l’objet qui représente le code et le fichier image enregistré. Le schéma montre à quel moment chacun apparaît. Dépliez ensuite une instruction pour examiner son rôle.

Le texte contenu devient un objet qr avec make_qr, puis un fichier PNG avec save ; print affiche un message séparé.
Pour créer un QR code avec Python, le programme passe du texte à l’objet QRCode, puis au fichier image. print affiche seulement une confirmation.
1. import segno : rendre la bibliothèque disponible

Une bibliothèque rassemble du code réutilisable. Ici, import permet au programme d’utiliser Segno sous le nom segno. Cette instruction prépare l’accès aux fonctions ; elle ne crée encore ni QR code ni image.

Segno est déjà fourni dans le bloc de cet article. Si vous copiez le programme dans un autre environnement Python, la bibliothèque doit aussi y être installée. Un message ModuleNotFoundError signifie que cet environnement ne trouve pas le module ; modifier l’adresse à encoder ne résout pas ce problème.

2. contenu = "..." : choisir ce que le lecteur retrouvera

contenu est le nom d’une variable. Le signe = lui associe la chaîne de caractères placée à droite. Les guillemets délimitent cette chaîne dans le programme ; ils ne font pas partie du message encodé.

Avec "https://mlwebapp.com/", le QR code contient une adresse. Avec "Bonjour avec Python", il contient du texte. Dans le premier cas, l’image ne contient pas une copie du site : l’accès à la page de destination dépend encore du lien et de la connexion du téléphone.

3. qr = segno.make_qr(...) : construire le code en mémoire

Le point dans segno.make_qr indique que la fonction appartient au module Segno. L’appel reçoit le contenu à encoder, construit un QR code standard et renvoie un objet QRCode. La variable qr désigne cet objet ; aucun fichier PNG n’a encore été enregistré.

encoding="utf-8" précise comment représenter le texte, notamment ses accents et ses caractères arabes. eci=True demande d’inscrire l’indication de cet encodage dans le QR code. Les lecteurs ne prennent pas tous en charge ECI : le contrôle du texte décodé dans cette page est utile, puis un essai avec votre téléphone reste nécessaire. Ces options sont décrites dans l’API de Segno.

4. qr.save(...) : produire le fichier PNG

save est une méthode de l’objet qr. Elle enregistre sa représentation dans le fichier nommé mon-qrcode.png. L’extension .png indique ici le format de l’image. Dans ce bloc, le fichier est d’abord créé dans le navigateur ; le bouton de téléchargement permet ensuite de le récupérer sur votre appareil.

scale=8 donne huit pixels à chaque module, c’est-à-dire à chaque petit carré de la grille. border=4 conserve quatre modules de marge blanche sur chaque côté. Ce sont deux réglages différents : agrandir les modules change la taille du fichier image ; conserver la marge laisse un espace dégagé autour du dessin.

5. print(...) : afficher une confirmation, sans créer l’image

print écrit le message dans la zone Sortie de Python. Il s’exécute après save dans cet exemple. Si l’enregistrement provoque une erreur, le programme s’interrompt avant d’atteindre ce message.

Le nom de fichier écrit dans le message est un texte choisi par le programmeur. Il ne commande pas l’enregistrement. Si vous renommez le fichier dans save, mettez aussi le message à jour pour garder une confirmation compréhensible.

Le bouton exécute le programme Python affiché. Si vous le modifiez après une exécution, relancez-le pour actualiser le résultat. Le lecteur intégré décode l’image obtenue indépendamment du message de print : c’est ce contenu lu qu’il faut comparer à votre intention.

Changer le contenu et la taille du QR code

Pour créer un QR code avec Python contenant un message, remplacez le lien par "Bonjour avec Python", puis exécutez à nouveau. Vérifiez que le texte lu dans l’image correspond à ce nouveau message. Vous pouvez aussi essayer un texte accentué en conservant les options d’encodage.

Le paramètre scale règle le nombre de pixels utilisés pour chaque petit module du QR code. Passez de 8 à 12 pour obtenir une image plus grande. Cette modification agrandit le dessin ; elle ne change pas le texte encodé.

Le paramètre border fixe la marge claire autour du code, exprimée en modules. Conservez border=4 dans cet exemple : cette zone aide le lecteur à distinguer le code de son environnement. Les paramètres et la marge sont décrits dans la documentation Segno sur les images produites.

QR code avec Python : trois expériences guidées

Ces essais vous permettent de comprendre ce qui change réellement lorsque vous créez un QR code avec Python. Partez de l’exemple rétabli et ne modifiez qu’une chose à la fois. Avant chaque exécution, formulez votre prévision ; comparez-la ensuite à la sortie et au texte lu dans l’image.

Changer le message de confirmation

Remplacez seulement la dernière instruction par print("Bonjour !"). Le dessin du QR code doit-il changer ? Exécutez, puis consultez l’explication.

Afficher l’explication du premier essai

La sortie texte devient Bonjour !. Le contenu décodé reste https://mlwebapp.com/, puisque la variable contenu et l’appel à save sont conservés. Lors de la vérification de ce cas, l’image enregistrée était identique : afficher un autre message ne reconstruit pas le QR code.

Agrandir l’image sans changer son contenu

Rétablissez l’exemple, puis remplacez scale=8 par scale=12. Comparez les dimensions affichées sous l’image et le texte décodé.

Afficher l’explication du deuxième essai

Avec l’adresse de départ et les paramètres de cet article, les fichiers vérifiés mesurent respectivement 264 × 264 et 396 × 396 pixels. Leur contenu décodé est identique. La matrice compte ici 25 modules de côté ; avec les deux marges de quatre modules, on obtient 33 modules. Multiplier 33 par 8 ou par 12 donne les dimensions du PNG. Un autre texte peut nécessiter une autre taille de matrice.

QR code du lien mlwebapp avec une marge de quatre modules : 25 plus 4 plus 4 donnent 33 modules et 264 pixels avec scale égal à 8.
Pour le lien de départ, la matrice de 25 modules et les marges donnent un PNG de 264 pixels par côté avec scale=8. Le dessin est agrandi pour montrer la marge.

Déplacer une affectation : le piège de l’ordre des lignes

Rétablissez l’exemple. Juste après la ligne qui appelle segno.make_qr, ajoutez contenu = "Bonjour avec Python", puis exécutez. Le lecteur affichera-t-il le lien initial ou le nouveau message ?

Afficher l’explication du troisième essai

Il retrouve le lien initial. L’objet qr a été construit avec la valeur disponible au moment de l’appel. Réaffecter ensuite contenu ne modifie pas cet objet. Pour encoder le nouveau message, placez l’affectation avant l’appel à segno.make_qr, puis relancez. Ce comportement a été vérifié en comparant les images produites.

Vous pouvez maintenant expliquer une différence utile : modifier un texte, reconstruire un objet et enregistrer un fichier sont trois opérations distinctes. Leurs effets dépendent des instructions exécutées et de leur ordre.

Télécharger et vérifier votre image

Après une exécution réussie, utilisez Télécharger le PNG. Le fichier n’est pas enregistré automatiquement sur votre ordinateur. Il peut ensuite être ajouté à un document, à une affiche ou à une présentation.

Testez l’image avec l’application de lecture de votre téléphone, dans la taille et le support que vous comptez utiliser. Vérifiez l’adresse proposée avant de partager le QR code. Un lien peut cesser de fonctionner si la page de destination est supprimée ou déplacée.

Créer un QR code avec Python dans l’article : code modifiable, image PNG obtenue et contenu décodé.
Après l’exécution du code, le QR code est affiché et son contenu est lu pour vérifier le résultat.

Corriger les erreurs les plus courantes

  • Python affiche SyntaxError. Vérifiez les guillemets et les parenthèses. Le texte doit rester une chaîne placée entre deux guillemets.
  • Aucun PNG n’apparaît. Conservez l’appel à qr.save et un nom se terminant par .png. Ce bloc n’affiche pas les fichiers SVG.
  • Le texte lu est incorrect. Rétablissez les options encoding="utf-8" et eci=True, puis relancez. Contrôlez également la marge et le contraste.
  • Le chargement échoue. Vérifiez votre connexion puis réessayez. Le premier démarrage télécharge Python ; le bouton Arrêter permet d’interrompre une opération en cours.

Le bouton Rétablir l’exemple remet le code de départ. Vous pouvez aussi copier votre programme avant de le modifier.

Ce qui reste dans votre navigateur

Le code saisi s’exécute dans un espace isolé de ce navigateur. Ce bloc ne l’envoie pas à WordPress. La connexion initiale à jsDelivr sert à charger le moteur Python. Le code et les images sont perdus au rechargement ou à la fermeture de la page : téléchargez le résultat que vous souhaitez conserver.

Le bloc affiche le premier PNG créé dans son dossier de travail. Il limite l’affichage à trois fichiers, à 2 Mo par image et à 4 096 pixels par côté. Un calcul de plus de dix secondes est arrêté. Ces limites gardent l’essai adapté à un petit exemple dans l’article.

Un QR code partage son contenu avec les personnes qui peuvent le lire. Choisissez donc les informations que vous souhaitez rendre accessibles.

Pour continuer à pratiquer Python

Vous avez créé un QR code avec Python en modifiant une variable, en appelant une fonction et en enregistrant son résultat. Pour explorer l’exécution des cellules et les variables disponibles, vous pouvez ouvrir le laboratoire Python sur les cellules et la mémoire. Le module Segno est fourni dans l’éditeur de cet article ; le labo général conserve son propre environnement.

Pour approfondir la création de QR codes standards, les variantes et les paramètres acceptés, consultez la documentation officielle de Segno. Le fonctionnement de Python dans le navigateur est présenté dans la documentation de Pyodide.