{"id":5799,"date":"2024-08-29T06:20:26","date_gmt":"2024-08-29T06:20:26","guid":{"rendered":"https:\/\/wikiform.fr\/codespace\/afficher-des-messages-avec-tkinter\/"},"modified":"2024-08-29T06:20:29","modified_gmt":"2024-08-29T06:20:29","slug":"afficher-des-messages-avec-tkinter","status":"publish","type":"post","link":"https:\/\/wikiform.fr\/codespace\/afficher-des-messages-avec-tkinter\/","title":{"rendered":"6.4 Afficher des Messages avec Tkinter"},"content":{"rendered":"\n<p><strong>Afficher des Messages avec Tkinter<\/strong> est une comp\u00e9tence essentielle pour ceux qui souhaitent cr\u00e9er des applications GUI interactives en Python. Utiliser les \u00e9l\u00e9ments de l&rsquo;interface comme les bo\u00eetes de messages et les labels permet de communiquer efficacement avec l&rsquo;utilisateur. D\u00e9couvrons comment impl\u00e9menter et afficher des messages avec Tkinter \u00e0 travers des exemples pratiques.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction \u00e0 l&rsquo;Affichage des Messages avec Tkinter<\/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\/583371870?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<h3 class=\"wp-block-heading\">Utiliser les Labels pour Afficher les Messages<\/h3>\n\n\n\n<p>Les labels sont des widgets simples et efficaces pour afficher des messages statiques ou dynamiques dans une application Tkinter. Voici comment cr\u00e9er un label et mettre \u00e0 jour son texte en fonction d&rsquo;une action de l&rsquo;utilisateur :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\n# Initialiser la fen\u00eatre principale\nroot = tk.Tk()\nroot.title(\"Exemple de Label\")\n\n# Fonction pour mettre \u00e0 jour le texte du label\ndef update_label():\n    message.set(\"Message mis \u00e0 jour!\")\n\n# Cr\u00e9er une variable StringVar pour le label\nmessage = tk.StringVar()\nmessage.set(\"Texte initial\")\n\n# Cr\u00e9er et pack le label\nlabel = tk.Label(root, textvariable=message)\nlabel.pack()\n\n# Bouton pour d\u00e9clencher la mise \u00e0 jour du label\nbutton = tk.Button(root, text=\"Mettre \u00e0 jour le message\", command=update_label)\nbutton.pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser les Bo\u00eetes de Message pour les Alertes et les Notifications<\/h3>\n\n\n\n<p>Les bo\u00eetes de message sont parfaites pour afficher des alertes, des erreurs ou des notifications \u00e0 l&rsquo;utilisateur. Tkinter fournit une m\u00e9thode simple pour cr\u00e9er des bo\u00eetes de message via le module <code>messagebox<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\nfrom tkinter import messagebox\n\n# Initialiser la fen\u00eatre principale\nroot = tk.Tk()\nroot.title(\"Exemple de Bo\u00eete de Message\")\n\n# Fonction pour afficher une bo\u00eete de message\ndef show_message():\n    messagebox.showinfo(\"Titre de l'Info\", \"Ceci est un message d'information\")\n\n# Bouton pour d\u00e9clencher la bo\u00eete de message\nbutton = tk.Button(root, text=\"Afficher Message\", command=show_message)\nbutton.pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser les Bo\u00eetes de Dialogue Personnalis\u00e9es<\/h3>\n\n\n\n<p>En plus des bo\u00eetes de message int\u00e9gr\u00e9es, les d\u00e9veloppeurs peuvent \u00e9galement cr\u00e9er des bo\u00eetes de dialogue personnalis\u00e9es pour des interactions plus sophistiqu\u00e9es avec l&rsquo;utilisateur :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\nfrom tkinter import simpledialog\n\n# Initialiser la fen\u00eatre principale\nroot = tk.Tk()\nroot.title(\"Exemple de Bo\u00eete de Dialogue Personnalis\u00e9e\")\n\n# Fonction pour afficher une bo\u00eete de dialogue\ndef custom_dialog():\n    response = simpledialog.askstring(\"Question\", \"Quel est votre nom?\")\n    if response is not None:\n        label.config(text=f\"Bonjour, {response}!\")\n\n# Bouton pour d\u00e9clencher la bo\u00eete de dialogue\nbutton = tk.Button(root, text=\"Poser une question\", command=custom_dialog)\nbutton.pack()\n\n# Cr\u00e9er et pack le label pour afficher la r\u00e9ponse\nlabel = tk.Label(root, text=\"\")\nlabel.pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Exemples Avanc\u00e9s d&rsquo;Affichage de Messages avec Tkinter<\/h3>\n\n\n\n<p>\u00c0 mesure que vous devenez plus \u00e0 l&rsquo;aise avec Tkinter, vous pourrez cr\u00e9er des interactions encore plus dynamiques et intuitives. Voici quelques exemples avanc\u00e9s :<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Affichage de Messages en Temps R\u00e9el avec une Barre de Progression<\/h4>\n\n\n\n<p>Les barres de progression peuvent \u00eatre utilis\u00e9es pour informer les utilisateurs de l&rsquo;avancement de t\u00e2ches longues, tout en affichant des messages statutaires :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\nfrom tkinter import ttk\n\n# Initialiser la fen\u00eatre principale\nroot = tk.Tk()\nroot.title(\"Exemple de Barre de Progression\")\n\n# Fonction pour simuler une t\u00e2che longue\ndef start_progress():\n    task_label.config(text=\"La t\u00e2che a commenc\u00e9...\")\n    for i in range(101):\n        progress['value'] = i\n        progress.update_idletasks()\n        root.after(50)  # Pause (simulation du temps de la t\u00e2che)\n    task_label.config(text=\"T\u00e2che termin\u00e9e!\")\n\n# Cr\u00e9er une barre de progression\nprogress = ttk.Progressbar(root, orient=\"horizontal\", length=300, mode=\"determinate\")\nprogress.pack(pady=20)\n\n# Bouton pour d\u00e9marrer la barre de progression\nstart_button = tk.Button(root, text=\"D\u00e9marrer la t\u00e2che\", command=start_progress)\nstart_button.pack(pady=10)\n\n# Label pour afficher le statut de la t\u00e2che\ntask_label = tk.Label(root, text=\"\")\ntask_label.pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Communication Inter-Fen\u00eatres avec Messages Synchronis\u00e9s<\/h4>\n\n\n\n<p>Pour des applications plus complexes, il peut \u00eatre n\u00e9cessaire de synchroniser des messages entre plusieurs fen\u00eatres :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\nfrom tkinter import Toplevel\n\n# Fonction pour ouvrir une nouvelle fen\u00eatre avec un message mis \u00e0 jour\ndef open_new_window():\n    new_window = Toplevel(root)\n    tk.Label(new_window, textvariable=shared_message).pack()\n\ndef update_message(*args):\n    shared_message.set(data_entry.get())\n\n# Initialiser la fen\u00eatre principale\nroot = tk.Tk()\nroot.title(\"Exemple de Fen\u00eatres Synchronis\u00e9es\")\n\n# Cr\u00e9er une variable observable partag\u00e9e\nshared_message = tk.StringVar()\n\n# Attacher l'observateur\nshared_message.trace(\"w\", update_message)\n\n# Interface utilisateur principale\ndata_entry = tk.Entry(root, textvariable=shared_message)\ndata_entry.pack(pady=10)\n\nopen_window_button = tk.Button(root, text=\"Ouvrir Nouvelle Fen\u00eatre\", command=open_new_window)\nopen_window_button.pack(pady=10)\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<p>En poursuivant votre exploration de Tkinter et des techniques pour afficher des messages, vous pouvez \u00e9galement consulter des ressources externes comme le <a href=\"https:\/\/realpython.com\/\" target=\"_blank\" rel=\"noopener\">site Real Python<\/a> pour des articles d\u00e9taill\u00e9s sur Python, ainsi que la <a href=\"https:\/\/docs.python.org\/3\/library\/tkinter.html\" target=\"_blank\" rel=\"noopener\">documentation officielle de Tkinter<\/a>. Des plateformes d&rsquo;apprentissage comme <a href=\"https:\/\/www.coursera.org\/\" target=\"_blank\" rel=\"noopener\">Coursera<\/a> offrent aussi des cours structur\u00e9s pour approfondir vos comp\u00e9tences.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Savoir <strong>afficher des messages avec Tkinter<\/strong> est une comp\u00e9tence pr\u00e9cieuse qui peut am\u00e9liorer l&rsquo;interaction utilisateur de vos applications. Les techniques abord\u00e9es dans ce tutoriel vous permettent d&rsquo;utiliser les labels, les bo\u00eetes de message et les bo\u00eetes de dialogue personnalis\u00e9es pour cr\u00e9er des interfaces utilisateur dynamiques et r\u00e9actives. Pour en savoir plus sur Tkinter, n&rsquo;h\u00e9sitez pas \u00e0 lire notre <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/tkinter-avance-intermediaire\/150\" target=\"_blank\" rel=\"noopener\">guide sur le Tkinter avanc\u00e9<\/a> ou \u00e0 suivre notre <a href=\"https:\/\/wikiform.fr\/codespace\/tutoriel-tkinter\/\" target=\"_blank\" rel=\"noopener\">tutoriel d\u00e9taill\u00e9 sur Tkinter<\/a>.<\/p>\n\n\n\n<p>Pour d\u00e9buter avec Tkinter, vous pouvez consulter notre tuto introductif sur <a href=\"https:\/\/wikiform.fr\/codespace\/creer-une-fenetre-avec-tkinter-tutoriel\/\" target=\"_blank\" rel=\"noopener\">cr\u00e9er une fen\u00eatre avec Tkinter<\/a>, et explorer comment <a href=\"https:\/\/wikiform.fr\/codespace\/utiliser-le-widget-label-avec-tkinter\/\" target=\"_blank\" rel=\"noopener\">utiliser le widget Label avec Tkinter<\/a>. Si vous \u00eates int\u00e9ress\u00e9 par la gestion des entr\u00e9es utilisateurs, notre guide sur <a href=\"https:\/\/wikiform.fr\/codespace\/saisie-avec-le-widget-entry-en-tkinter\/\" target=\"_blank\" rel=\"noopener\">saisie avec le widget Entry en Tkinter<\/a> vous sera tr\u00e8s utile.<\/p>\n\n\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","protected":false},"excerpt":{"rendered":"<p>Afficher des Messages avec Tkinter est une comp\u00e9tence essentielle pour ceux qui souhaitent cr\u00e9er des applications GUI interactives en Python. Utiliser les \u00e9l\u00e9ments de l&rsquo;interface&#8230;<\/p>\n","protected":false},"author":4,"featured_media":2978,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[24],"tags":[18],"class_list":["post-5799","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\/5799","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=5799"}],"version-history":[{"count":1,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5799\/revisions"}],"predecessor-version":[{"id":5800,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5799\/revisions\/5800"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media\/2978"}],"wp:attachment":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media?parent=5799"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/categories?post=5799"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/tags?post=5799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}