{"id":5725,"date":"2024-08-29T03:52:18","date_gmt":"2024-08-29T03:52:18","guid":{"rendered":"https:\/\/wikiform.fr\/codespace\/saisie-utilisateur-en-python-guide-complet\/"},"modified":"2025-01-16T12:30:58","modified_gmt":"2025-01-16T12:30:58","slug":"saisie-utilisateur-en-python-guide-complet","status":"publish","type":"post","link":"https:\/\/wikiform.fr\/codespace\/saisie-utilisateur-en-python-guide-complet\/","title":{"rendered":"2.2 Saisie Utilisateur en Python : Guide Complet"},"content":{"rendered":"\n\n\n<p><strong>Saisie Utilisateur en Python<\/strong> est un aspect fondamental pour toute application interactive. Qu&rsquo;il s&rsquo;agisse d&rsquo;une application de console basique ou d&rsquo;une interface graphique avanc\u00e9e, apprendre \u00e0 bien g\u00e9rer les interactions utilisateur est crucial. Apprenons \u00e0 ma\u00eetriser la saisie utilisateur en Python avec des exemples pratiques et d\u00e9taill\u00e9s de code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction \u00e0 la <strong>Saisie Utilisateur en Python<\/strong><\/h2>\n\n\n\n<div id=\"videoContainer\" style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; background: #000;\">\n  <iframe src=\"https:\/\/player.vimeo.com\/video\/583307100?dnt=1&#038;fullscreen=0&#038;pip=0\" loading=\"lazy\" loading=\"lazy\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" frameborder=\"0\" allow=\"autoplay\" allowfullscreen id=\"vimeoPlayer\"><\/iframe>\n  \n  <!-- Popup Desktop -->\n  <div id=\"popupContainer\" class=\"desktop-popup\" style=\"display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 90%; max-width: 400px; padding: 20px; border-radius: 10px; text-align: center; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); background-color: rgba(255, 255, 255, 0.95); box-sizing: border-box;\">\n    <h2 style=\"color: #333; font-size: 1.5em; margin: 10px 0;\" id=\"profitez-de-loffre-spciale-\">Profitez de l\u2019offre sp\u00e9ciale !<\/h2>\n    <p style=\"color: #e74c3c; font-size: 1.2em; margin: 10px 0;\">Obtenez notre cours pour seulement <strong id=\"price\">29.5\u20ac<\/strong> au lieu de <del>59\u20ac<\/del> !<\/p>\n    <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" style=\"display: block; padding: 10px 20px; background-color: #701CF5; color: #fff; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 1em; margin: 20px auto;\" rel=\"noopener\">Commencer maintenant<\/a>\n    <button onclick=\"closePopup()\" style=\"padding: 10px 20px; font-size: 1em;\">Fermer<\/button>\n  <\/div>\n\n  <!-- Popup Mobile -->\n  <div id=\"popupContainerMobile\" class=\"mobile-popup\" style=\"display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80%; max-width: 300px; padding: 15px; border-radius: 10px; text-align: center; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); background-color: rgba(255, 255, 255, 0.95); box-sizing: border-box;\">\n    <p style=\"color: #e74c3c; font-size: 1em; margin: 5px 0;\">Cours sp\u00e9cial \u00e0 <strong id=\"priceMobile\">29.5\u20ac<\/strong> au lieu de <del>59\u20ac<\/del> !<\/p>\n    <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" style=\"display: inline-block; padding: 8px 15px; background-color: #701CF5; color: #fff; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 0.9em;\" rel=\"noopener\">Commencer maintenant<\/a>\n    <button onclick=\"closePopup()\" style=\"padding: 5px 10px; font-size: 0.9em;\">Fermer<\/button>\n  <\/div>\n<\/div>\n\n<script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script>\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n    var iframe = document.getElementById('vimeoPlayer');\n    var player = new Vimeo.Player(iframe);\n    var isPopupDisplayed = false;\n\n    player.on('play', function() {\n        if (!isPopupDisplayed) {\n            player.on('timeupdate', function(data) {\n                if (data.seconds >= 120 && !isPopupDisplayed) { \/\/ 120 seconds = 2 minutes\n                    \/\/ Pause the video and display the popup\n                    player.pause().then(function() {\n                        if (window.innerWidth > 768) {\n                            document.querySelector('.desktop-popup').style.display = 'block';\n                        } else {\n                            document.querySelector('.mobile-popup').style.display = 'block';\n                        }\n                        fetchPriceAndUpdatePopup();\n                        isPopupDisplayed = true;\n                    });\n                }\n            });\n        }\n    });\n\n    function fetchPriceAndUpdatePopup() {\n        fetch('https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144')\n            .then(response => response.text())\n            .then(html => {\n                var parser = new DOMParser();\n                var fetchedDoc = parser.parseFromString(html, 'text\/html');\n                var priceElement = fetchedDoc.querySelector('.ammount .fw-500');\n                var originalPriceElement = fetchedDoc.querySelector('.ammount del');\n                var price = priceElement ? priceElement.textContent.trim() : '29.5\u20ac';\n                var originalPrice = originalPriceElement ? originalPriceElement.textContent.trim() : '59\u20ac';\n\n                document.getElementById('price').textContent = price;\n                document.getElementById('priceMobile').textContent = price;\n                document.querySelector('.desktop-popup del').textContent = originalPrice;\n                document.querySelector('.mobile-popup del').textContent = originalPrice;\n            })\n            .catch(error => console.error('Error fetching the price:', error));\n    }\n\n    function closePopup() {\n        document.querySelector('.desktop-popup').style.display = 'none';\n        document.querySelector('.mobile-popup').style.display = 'none';\n        player.play(); \/\/ Allows resuming the video only after closing the popup\n    }\n});\n<\/script>\n\n\n\n<p>Dans cet article, nous d\u00e9couvrirons comment recueillir et g\u00e9rer la <a href=\"https:\/\/wikiform.fr\/codespace\/saisie-utilisateur-en-python-guide-complet\" target=\"_blank\" rel=\"noopener\">saisie utilisateur en Python<\/a> via diff\u00e9rents moyens : en console, avec les interfaces graphiques Tkinter et via des formulaires web Flask. Comprendre ces m\u00e9thodes vous permettra de cr\u00e9er des applications plus interactives et conviviales.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Saisie Utilisateur en Console<\/h3>\n\n\n\n<p>La fa\u00e7on la plus simple et courante de recevoir une saisie utilisateur est d&rsquo;utiliser la fonction <code>input()<\/code> en Python. Cette m\u00e9thode permet de capturer les cha\u00eenes de caract\u00e8res entr\u00e9es par l&rsquo;utilisateur directement dans la console.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>\n# Saisie d'une cha\u00eene de caract\u00e8res\nnom = input(\"Quel est votre nom? \")\nprint(f\"Bonjour, {nom}!\")\n\n# Saisie d'un entier\nage = int(input(\"Quel est votre \u00e2ge? \"))\nprint(f\"Vous avez {age} ans.\")\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Saisie Utilisateur avec Tkinter<\/h3>\n\n\n\n<p>Tkinter est la biblioth\u00e8que standard de Python pour <a href=\"https:\/\/wikiform.fr\/codespace\/introduction-a-tkinter-pour-interfaces-graphiques\" target=\"_blank\" rel=\"noopener\">cr\u00e9er des interfaces graphiques<\/a>. Elle permet de recueillir facilement des saisies utilisateur via divers widgets comme les champs de texte, les boutons, etc.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>\nimport tkinter as tk\n\ndef afficher_message():\n    nom = entree.get()\n    age = int(age_entree.get())\n    message = f\"Bonjour {nom}, vous avez {age} ans.\"\n    label_resultat.config(text=message)\n\nroot = tk.Tk()\nroot.title(\"Saisie Utilisateur\")\n\n# Widgets\ntk.Label(root, text=\"Nom:\").pack()\nentree = tk.Entry(root)\nentree.pack()\n\ntk.Label(root, text=\"\u00c2ge:\").pack()\nage_entree = tk.Entry(root)\nage_entree.pack()\n\nbouton = tk.Button(root, text=\"Soumettre\", command=afficher_message)\nbouton.pack()\n\nlabel_resultat = tk.Label(root, text=\"\")\nlabel_resultat.pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Saisie Utilisateur avec Flask<\/h3>\n\n\n\n<p>Flask est un micro-framework de web de Python qui permet de <a href=\"https:\/\/wikiform.fr\/codespace\/creer-et-utiliser-venv-sur-windows-avec-python\" target=\"_blank\" rel=\"noopener\">cr\u00e9er des applications web<\/a> de mani\u00e8re rapide et efficace. Vous pouvez g\u00e9rer la saisie de l&rsquo;utilisateur en cr\u00e9ant des formulaires sur vos pages web.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>\nfrom flask import Flask, render_template, request\n\napp = Flask(__name__)\n\n@app.route('\/', methods=&#91;'GET', 'POST'])\ndef index():\n    if request.method == 'POST':\n        nom = request.form.get('nom')\n        age = int(request.form.get('age'))\n        return f\"Bonjour {nom}, vous avez {age} ans.\"\n    return '''\n        <form method=\"post\">\n            Nom: <input type=\"text\" name=\"nom\"><br>\n            \u00c2ge: <input type=\"number\" name=\"age\"><br>\n            <input type=\"submit\" value=\"Envoyer\">\n        <\/form>\n    '''\n\nif __name__ == '__main__':\n    app.run(debug=True)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Validation des Saisies Utilisateur<\/h3>\n\n\n\n<p>La validation est un aspect crucial de la gestion de la saisie utilisateur. En s&rsquo;assurant que les entr\u00e9es sont valides, vous pouvez prot\u00e9ger votre application contre les erreurs et les potentielles failles de s\u00e9curit\u00e9. Voyons comment nous pouvons impl\u00e9menter une validation simple en console, Tkinter, et Flask.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Validation en Console<\/h4>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>\ndef saisir_et_valider_age():\n    while True:\n        try:\n            age = int(input(\"Quel est votre \u00e2ge? \"))\n            if age < 0:\n                print(\"L'\u00e2ge doit \u00eatre un entier positif.\")\n            else:\n                return age\n        except ValueError:\n            print(\"Veuillez entrer un entier valide.\")\nage = saisir_et_valider_age()\nprint(f\"Vous avez {age} ans.\")\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Validation avec Tkinter<\/h4>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>\nimport tkinter as tk\nfrom tkinter import messagebox\ndef valider_et_afficher():\n    try:\n        nom = entree_nom.get()\n        age = int(entree_age.get())\n        if age < 0:\n            raise ValueError\n        message = f\"Bonjour {nom}, vous avez {age} ans.\"\n        label_resultat.config(text=message)\n    except ValueError:\n        messagebox.showerror(\"Erreur\", \"Veuillez entrer un \u00e2ge valide (entier positif).\")\nroot = tk.Tk()\nroot.title(\"Saisie Utilisateur avec Validation\")\n# Widgets\ntk.Label(root, text=\"Nom:\").pack()\nentree_nom = tk.Entry(root)\nentree_nom.pack()\ntk.Label(root, text=\"\u00c2ge:\").pack()\nentree_age = tk.Entry(root)\nentree_age.pack()\nbouton = tk.Button(root, text=\"Valider\", command=valider_et_afficher)\nbouton.pack()\nlabel_resultat = tk.Label(root, text=\"\")\nlabel_resultat.pack()\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Validation avec Flask<\/h4>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>\nfrom flask import Flask, render_template, request\napp = Flask(__name__)\n@app.route('\/', methods=['GET', 'POST'])\ndef index():\n    message = \"\"\n    if request.method == 'POST':\n        nom = request.form.get('nom')\n        try:\n            age = int(request.form.get('age'))\n            if age < 0:\n                message = \"L'\u00e2ge doit \u00eatre un entier positif.\"\n            else:\n                message = f\"Bonjour {nom}, vous avez {age} ans.\"\n        except ValueError:\n            message = \"Veuillez entrer un \u00e2ge valide.\"\n        \n    return f'''\n        <form method=\"post\">\n            Nom: <input type=\"text\" name=\"nom\"><br>\n            \u00c2ge: <input type=\"number\" name=\"age\"><br>\n            <input type=\"submit\" value=\"Envoyer\"><br>\n            {message}\n        <\/form>\n    '''\nif __name__ == '__main__':\n    app.run(debug=True)\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p><p>La gestion de la <strong><a href=\"https:\/\/wikiform.fr\/codespace\/saisie-utilisateur-en-python-guide-complet\" target=\"_blank\" rel=\"noopener\">saisie utilisateur en Python<\/a><\/strong> est une comp\u00e9tence essentielle pour tout d\u00e9veloppeur. Que ce soit pour une application en console, une interface graphique ou une application web, les m\u00e9thodes pour recueillir et valider les saisies utilisateur sont nombreuses. Poursuivre votre apprentissage dans ce domaine vous aidera \u00e0 cr\u00e9er des applications plus robustes et interactives. Pour aller plus loin, consultez notre guide sur <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\">devenir un d\u00e9veloppeur Python<\/a>. D\u00e9couvrez aussi nos guides sur <a href=\"https:\/\/wikiform.fr\/codespace\/installer-python-sur-windows-facilement\" target=\"_blank\" rel=\"noopener\">installer Python sur Windows<\/a> et <a href=\"https:\/\/wikiform.fr\/codespace\/installer-python-sur-mac-2024-guide-complet\" target=\"_blank\" rel=\"noopener\">installer Python sur Mac<\/a> pour bien d\u00e9buter.<\/p>\n\n<a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/wikiform.fr\/codespace\/wp-content\/uploads\/2024\/07\/learnify-formation-PYTHON-offre-50.gif\" loading=\"lazy\" alt=\"Learnify Formation Python Offre 50%\" title=\"\"><\/a>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n    var iframe = document.getElementById('vimeoPlayer');\n    var player = new Vimeo.Player(iframe);\n    var isPopupDisplayed = false;\n\n    player.on('play', function() {\n        if (!isPopupDisplayed) {\n            player.on('timeupdate', function(data) {\n                if (data.seconds >= 120 && !isPopupDisplayed) { \/\/ 120 seconds = 2 minutes\n                    \/\/ Pause the video and display the popup\n                    player.pause().then(function() {\n                        if (window.innerWidth > 768) {\n                            document.querySelector('.desktop-popup').style.display = 'block';\n                        } else {\n                            document.querySelector('.mobile-popup').style.display = 'block';\n                        }\n                        fetchPriceAndUpdatePopup();\n                        isPopupDisplayed = true;\n                    });\n                }\n            });\n        }\n    });\n\n    function fetchPriceAndUpdatePopup() {\n        fetch('https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144')\n            .then(response => response.text())\n            .then(html => {\n                var parser = new DOMParser();\n                var fetchedDoc = parser.parseFromString(html, 'text\/html');\n                var priceElement = fetchedDoc.querySelector('.ammount .fw-500');\n                var originalPriceElement = fetchedDoc.querySelector('.ammount del');\n                var price = priceElement ? priceElement.textContent.trim() : '29.5\u20ac';\n                var originalPrice = originalPriceElement ? originalPriceElement.textContent.trim() : '59\u20ac';\n\n                document.getElementById('price').textContent = price;\n                document.getElementById('priceMobile').textContent = price;\n                document.querySelector('.desktop-popup del').textContent = originalPrice;\n                document.querySelector('.mobile-popup del').textContent = originalPrice;\n            })\n            .catch(error => console.error('Error fetching the price:', error));\n    }\n\n    function closePopup() {\n        document.querySelector('.desktop-popup').style.display = 'none';\n        document.querySelector('.mobile-popup').style.display = 'none';\n        player.play(); \/\/ Allows resuming the video only after closing the popup\n    }\n});\n<\/script><\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Saisie Utilisateur en Python est un aspect fondamental pour toute application interactive. Qu&rsquo;il s&rsquo;agisse d&rsquo;une application de console basique ou d&rsquo;une interface graphique avanc\u00e9e, apprendre&#8230;<\/p>\n","protected":false},"author":4,"featured_media":2954,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[24],"tags":[18],"class_list":["post-5725","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-tutoriels"],"acf":[],"_titre_de_la_formation":null,"_description_":null,"_objectifs_pedagogiques":null,"_programme_":null,"_url_de_limage":null,"_materiel_necessaire":null,"_modalites_devaluation_des_acquis":null,"_moyens_pedagogiques_et_techniques":null,"_accessibilite_":null,"_formateur_":null,"menu_order":0,"_links":{"self":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5725","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/comments?post=5725"}],"version-history":[{"count":2,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5725\/revisions"}],"predecessor-version":[{"id":6117,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5725\/revisions\/6117"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media\/2954"}],"wp:attachment":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media?parent=5725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/categories?post=5725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/tags?post=5725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}