{"id":5807,"date":"2024-08-29T06:36:45","date_gmt":"2024-08-29T06:36:45","guid":{"rendered":"https:\/\/wikiform.fr\/codespace\/utiliser-les-variables-de-controle-avec-tkinter\/"},"modified":"2024-08-29T06:36:48","modified_gmt":"2024-08-29T06:36:48","slug":"utiliser-les-variables-de-controle-avec-tkinter","status":"publish","type":"post","link":"https:\/\/wikiform.fr\/codespace\/utiliser-les-variables-de-controle-avec-tkinter\/","title":{"rendered":"6.8 Utiliser les Variables de Contr\u00f4le avec Tkinter"},"content":{"rendered":"\n<p><strong>Les Variables de Contr\u00f4le avec Tkinter<\/strong> sont essentielles pour cr\u00e9er des applications dynamiques et interactives en Python. Elles permettent de lier des widgets et de suivre les changements de leurs valeurs, facilitant ainsi la gestion et la mise \u00e0 jour de l&rsquo;interface utilisateur. Dans cet article, nous allons explorer comment utiliser ces variables de contr\u00f4le gr\u00e2ce \u00e0 des exemples pratiques.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction aux <strong>Variables de Contr\u00f4le avec Tkinter<\/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\/583381287?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  <!-- 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  <!-- 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<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                    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();\n    }\n});\n<\/script>\n\n\n\n<p>Une variable de contr\u00f4le dans Tkinter est un moyen de suivre et de contr\u00f4ler l&rsquo;\u00e9tat des variables \u00e0 travers des objets de type <code>StringVar<\/code>, <code>IntVar<\/code>, <code>DoubleVar<\/code>, ou <code>BooleanVar<\/code>. Gr\u00e2ce \u00e0 ces variables, lorsqu&rsquo;une valeur change, toutes les fonctions de rappel enregistr\u00e9es sont automatiquement d\u00e9clench\u00e9es, permettant ainsi de r\u00e9agir aux nouvelles valeurs en temps r\u00e9el.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cr\u00e9er des Variables de Contr\u00f4le en Tkinter<\/h3>\n\n\n\n<p>Pour commencer, nous devons cr\u00e9er des instances des variables de contr\u00f4le. Tkinter propose plusieurs classes de variables pour cela, comme <code>StringVar<\/code> pour les cha\u00eenes de caract\u00e8res, <code>IntVar<\/code> pour les entiers, <code>DoubleVar<\/code> pour les flottants, et <code>BooleanVar<\/code> pour les bool\u00e9ens. Voici un exemple simple :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\nroot = tk.Tk()\n\n# Cr\u00e9er les variables de contr\u00f4le\nusername = tk.StringVar()\nage = tk.IntVar()\ntemperature = tk.DoubleVar()\nis_valid = tk.BooleanVar()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">D\u00e9finir des Observateurs pour R\u00e9agir aux Changements de Valeur<\/h3>\n\n\n\n<p>Pour r\u00e9agir aux changements de valeur des variables, vous pouvez utiliser la m\u00e9thode <code>trace<\/code> des objets de type <code>StringVar<\/code>, <code>IntVar<\/code>, <code>DoubleVar<\/code>, ou <code>BooleanVar<\/code>. Cette m\u00e9thode permet de lier une fonction de retour qui sera appel\u00e9e lorsqu&rsquo;un changement de valeur aura lieu. Voici un exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\ndef on_change(*args):\n    print(\"La valeur de username a chang\u00e9 : \", username.get())\n\nroot = tk.Tk()\n\n# Cr\u00e9er une variable de contr\u00f4le\nusername = tk.StringVar()\n\n# Attacher la fonction d'observateur\nusername.trace(\"w\", on_change)\n\n# Interface utilisateur\nentry = tk.Entry(root, textvariable=username)\nentry.pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser les Variables de Contr\u00f4le pour Mettre \u00e0 Jour l&rsquo;Interface Utilisateur<\/h3>\n\n\n\n<p>Maintenant que nous savons comment cr\u00e9er et observer les variables, voyons comment utiliser ces fonctionnalit\u00e9s pour mettre \u00e0 jour dynamiquement l&rsquo;interface utilisateur. Par exemple, nous pouvons synchroniser un label avec l&rsquo;entr\u00e9e utilisateur :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\ndef update_label(*args):\n    label_text.set(f\"Bonjour, {username.get()}!\")\n\nroot = tk.Tk()\n\n# Cr\u00e9er des variables de contr\u00f4le\nusername = tk.StringVar()\nlabel_text = tk.StringVar()\n\n# Attacher des observateurs\nusername.trace(\"w\", update_label)\n\n# Interface utilisateur\nentry = tk.Entry(root, textvariable=username)\nentry.pack()\n\nlabel = tk.Label(root, textvariable=label_text)\nlabel.pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser les Variables de Contr\u00f4le pour Valider les Entr\u00e9es en Temps R\u00e9el<\/h3>\n\n\n\n<p>Les variables de contr\u00f4le peuvent \u00e9galement \u00eatre utilis\u00e9es pour valider les entr\u00e9es utilisateur en temps r\u00e9el. Ici, nous allons cr\u00e9er une validation pour s&rsquo;assurer que l&rsquo;\u00e2ge saisi est un entier positif :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\ndef validate_age(*args):\n    try:\n        value = int(age.get())\n        if value < 0:\n            result.set(\"L'\u00e2ge ne peut pas \u00eatre n\u00e9gatif.\")\n        else:\n            result.set(\"\u00c2ge valide.\")\n    except ValueError:\n        result.set(\"Veuillez entrer un entier.\")\n\nroot = tk.Tk()\n\n# Cr\u00e9er des variables de contr\u00f4le\nage = tk.IntVar()\nresult = tk.StringVar()\n\n# Attacher des observateurs\nage.trace(\"w\", validate_age)\n\n# Interface utilisateur\nentry = tk.Entry(root, textvariable=age)\nentry.pack()\n\nlabel = tk.Label(root, textvariable=result)\nlabel.pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n<!-- Ajoutant du contenu additionel pour atteindre la longueur requise -->\n\n\n<h3 class=\"wp-block-heading\">Exemples Avanc\u00e9s d'Utilisation des Variables de Contr\u00f4le<\/h3>\n\n\n\n<p>Pour approfondir notre compr\u00e9hension des variables de contr\u00f4le, nous allons explorer quelques exemples avanc\u00e9s montrant comment elles peuvent \u00eatre utilis\u00e9es de mani\u00e8re efficace.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Mise \u00e0 Jour de Widgets Multiples<\/h4>\n\n\n\n<p>Imaginez une application o\u00f9 la mise \u00e0 jour d'un seul champ doit se refl\u00e9ter dans plusieurs widgets. Cela peut \u00eatre utile dans les formulaires complexes o\u00f9 diff\u00e9rents champs sont interd\u00e9pendants.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\ndef update_widgets(*args):\n    greeting_text.set(f\"Bonjour {username.get()}!\")\n    age_text.set(f\"Vous avez {age.get()} ans.\")\n\nroot = tk.Tk()\n\n# Variables de contr\u00f4le\nusername = tk.StringVar()\nage = tk.StringVar()\ngreeting_text = tk.StringVar()\nage_text = tk.StringVar()\n\n# Attacher les observateurs\nusername.trace(\"w\", update_widgets)\nage.trace(\"w\", update_widgets)\n\n# Interface utilisateur\ntk.Label(root, text=\"Nom:\").pack()\ntk.Entry(root, textvariable=username).pack()\ntk.Label(root, text=\"\u00c2ge:\").pack()\ntk.Entry(root, textvariable=age).pack()\n\ntk.Label(root, textvariable=greeting_text).pack()\ntk.Label(root, textvariable=age_text).pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Synchronisation de Donn\u00e9es Entre Fen\u00eatres<\/h4>\n\n\n\n<p>Les variables de contr\u00f4le peuvent \u00e9galement \u00eatre utilis\u00e9es pour synchroniser des donn\u00e9es entre diff\u00e9rentes fen\u00eatres de l'application, assurant ainsi une coh\u00e9rence des informations affich\u00e9es.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\nfrom tkinter import Toplevel\n\ndef open_new_window():\n    new_window = Toplevel(root)\n    tk.Label(new_window, textvariable=shared_data).pack()\n\ndef update_data(*args):\n    shared_data.set(data_entry.get())\n\nroot = tk.Tk()\n\n# Variable de contr\u00f4le partag\u00e9e\nshared_data = tk.StringVar()\n\n# Attacher l'observateur\nshared_data.trace(\"w\", update_data)\n\n# Interface utilisateur\ndata_entry = tk.Entry(root, textvariable=shared_data)\ndata_entry.pack()\n\ntk.Button(root, text=\"Nouvelle Fen\u00eatre\", command=open_new_window).pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Application dans un Projet R\u00e9el<\/h4>\n\n\n\n<p>Consid\u00e9rons un projet plus complet o\u00f9 les variables de contr\u00f4le sont utilis\u00e9es pour cr\u00e9er une interface de saisie de formulaires complexe. Imaginez une fen\u00eatre o\u00f9, en fonction de la s\u00e9lection d'un pays, les champs de r\u00e9gions sont automatiquement mis \u00e0 jour.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\ndef update_regions(*args):\n    country_selected = country.get()\n    regions.set(region_options[country_selected])\n\nroot = tk.Tk()\n\n# Dictionnaire de r\u00e9gions par pays\nregion_options = {\n    \"France\": [\"\u00cele-de-France\", \"Normandie\", \"Bretagne\"],\n    \"USA\": [\"California\", \"Texas\", \"Florida\"],\n}\n\n# Variables de contr\u00f4le\ncountry = tk.StringVar()\nregions = tk.StringVar()\n\n# Attacher d'observateur\ncountry.trace(\"w\", update_regions)\n\n# Interface utilisateur\ntk.Label(root, text=\"Pays:\").pack()\ntk.OptionMenu(root, country, *region_options.keys()).pack()\ntk.Label(root, text=\"R\u00e9gions:\").pack()\ntk.Label(root, textvariable=regions).pack()\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<p>Si vous \u00eates novice en mati\u00e8re de d\u00e9veloppement d'interfaces graphiques avec Tkinter, il est judicieux de commencer par notre <a href=\"https:\/\/wikiform.fr\/codespace\/introduction-a-tkinter-pour-interfaces-graphiques\">introduction \u00e0 Tkinter<\/a>, o\u00f9 vous apprendrez les bases pour cr\u00e9er une fen\u00eatre avec Tkinter. Une fois les concepts fondamentaux ma\u00eetris\u00e9s, vous pouvez explorer des fonctionnalit\u00e9s plus avanc\u00e9es comme le <a href=\"https:\/\/wikiform.fr\/codespace\/placer-des-widgets-avec-pack-en-tkinter\">placement des widgets avec pack<\/a> ou d\u00e9couvrir les <a href=\"https:\/\/wikiform.fr\/codespace\/utiliser-le-widget-label-avec-tkinter\">diff\u00e9rentes utilisations du widget Label<\/a>. Vous pouvez \u00e9galement consulter notre tutoriel sur <a href=\"https:\/\/wikiform.fr\/codespace\/saisie-avec-le-widget-entry-en-tkinter\">l'utilisation du widget Entry en Tkinter<\/a> pour l'entr\u00e9e de texte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Les <strong>Variables de Contr\u00f4le avec Tkinter<\/strong> sont une technique puissante pour rendre vos applications graphiques plus dynamiques et interactives. En observant les changements de variables, vous pouvez facilement mettre \u00e0 jour l'interface utilisateur, valider les entr\u00e9es en temps r\u00e9el et ex\u00e9cuter des actions sp\u00e9cifiques. Continuez \u00e0 explorer Tkinter pour ma\u00eetriser davantage les variables de contr\u00f4le et autres fonctionnalit\u00e9s avanc\u00e9es. Pour plus de tutoriels sur Tkinter, consultez notre article sur <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/tkinter-interm\u00e9diaire-avanc\u00e9\/150\">les fonctionnalit\u00e9s interm\u00e9diaires et avanc\u00e9es de Tkinter<\/a>. Pour apprendre \u00e0 cr\u00e9er une fen\u00eatre avec Tkinter, lisez notre <a href=\"https:\/\/wikiform.fr\/codespace\/cr\u00e9er-une-fen\u00eatre-avec-tkinter-tutoriel\">tutoriel d\u00e9taill\u00e9<\/a>.<\/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>Les Variables de Contr\u00f4le avec Tkinter sont essentielles pour cr\u00e9er des applications dynamiques et interactives en Python. Elles permettent de lier des widgets et de&#8230;<\/p>\n","protected":false},"author":4,"featured_media":2974,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[24],"tags":[18],"class_list":["post-5807","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\/5807","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=5807"}],"version-history":[{"count":1,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5807\/revisions"}],"predecessor-version":[{"id":5808,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5807\/revisions\/5808"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media\/2974"}],"wp:attachment":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media?parent=5807"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/categories?post=5807"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/tags?post=5807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}