{"id":5815,"date":"2024-08-29T06:53:08","date_gmt":"2024-08-29T06:53:08","guid":{"rendered":"https:\/\/wikiform.fr\/codespace\/placer-des-widgets-avec-place-en-tkinter\/"},"modified":"2024-08-29T06:53:12","modified_gmt":"2024-08-29T06:53:12","slug":"placer-des-widgets-avec-place-en-tkinter","status":"publish","type":"post","link":"https:\/\/wikiform.fr\/codespace\/placer-des-widgets-avec-place-en-tkinter\/","title":{"rendered":"6.12 Placer des Widgets avec place en Tkinter"},"content":{"rendered":"\n<p><strong>Placer des Widgets avec place en Tkinter<\/strong> est une technique essentielle pour contr\u00f4ler pr\u00e9cis\u00e9ment la position des widgets dans vos interfaces graphiques en Python. Le gestionnaire de g\u00e9om\u00e9trie <code>place()<\/code> fournit une m\u00e9thode orient\u00e9e \u00ab\u00a0pixel\u00a0\u00bb pour positionner les \u00e9l\u00e9ments, permettant un placement exact selon les coordonn\u00e9es sp\u00e9cifi\u00e9es. Explorons comment utiliser <code>place<\/code> pour disposer les widgets de mani\u00e8re efficace et intuitive gr\u00e2ce \u00e0 des exemples de code pratiques.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction \u00e0 <strong>place<\/strong> en 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\/583385821?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 10pxrgba(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>Le gestionnaire de g\u00e9om\u00e9trie <code>place()<\/code> permet un positionnement pr\u00e9cis des widgets en utilisant des coordonn\u00e9es absolues ou relatives. Le principal avantage de <code>place<\/code> est son contr\u00f4le granulaire sur la position des widgets, ce qui peut \u00eatre essentiel pour des interfaces complexes. Vous pouvez d\u00e9finir des positions en pixels ou en pourcentage du conteneur parent.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cr\u00e9er une Fen\u00eatre de Base avec Tkinter<\/h3>\n\n\n\n<p>Avant de commencer \u00e0 placer des widgets, nous devons cr\u00e9er une fen\u00eatre de base. Voici comment cr\u00e9er une simple fen\u00eatre Tkinter :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\nroot = tk.Tk()\nroot.title(\"Placer des Widgets avec place en Tkinter\")\nroot.geometry(\"400x300\")\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser le Gestionnaire place<\/h3>\n\n\n\n<p>Utiliser le gestionnaire <code>place<\/code> pour positionner un widget est simple. Vous appelez la m\u00e9thode <code>place<\/code> sur le widget avec des arguments d\u00e9finissant les coordonn\u00e9es <code>x<\/code> et <code>y<\/code>. Voici un exemple avec une \u00e9tiquette (label) positionn\u00e9e \u00e0 coordonn\u00e9es fixes :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\nroot = tk.Tk()\nroot.title(\"Placer des Widgets avec place en Tkinter\")\nroot.geometry(\"400x300\")\n\nlabel = tk.Label(root, text=\"Bonjour, Tkinter!\")\nlabel.place(x=100, y=50)\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Positionner des Widgets Relativement<\/h3>\n\n\n\n<p>Vous pouvez \u00e9galement positionner les widgets de mani\u00e8re relative en utilisant <code>relx<\/code> et <code>rely<\/code>, o\u00f9 les valeurs varient de 0 \u00e0 1 correspondant respectivement \u00e0 0% et 100% de la largeur et de la hauteur du conteneur parent :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\nroot = tk.Tk()\nroot.title(\"Placer des Widgets avec place en Tkinter\")\nroot.geometry(\"400x300\")\n\nlabel = tk.Label(root, text=\"Au Centre!\")\nlabel.place(relx=0.5, rely=0.5, anchor=\"center\")\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Combiner des Coordonn\u00e9es Absolues et Relatives<\/h3>\n\n\n\n<p>Vous pouvez combiner des coordonn\u00e9es absolues et relatives pour une flexibilit\u00e9 maximale. Par exemple, vous pouvez fixer une position relative en <code>relx<\/code> et une position absolue en <code>y<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\nroot = tk.Tk()\nroot.title(\"Placer des Widgets avec place en Tkinter\")\nroot.geometry(\"400x300\")\n\nlabel = tk.Label(root, text=\"Mix Relatif et Absolu\")\nlabel.place(relx=0.3, y=100)\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser des Dimensions Relatives<\/h3>\n\n\n\n<p>En plus de <code>relx<\/code> et <code>rely<\/code>, vous pouvez utiliser <code>relwidth<\/code> et <code>relheight<\/code> pour sp\u00e9cifier des dimensions relatives. Voici un exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\nroot = tk.Tk()\nroot.title(\"Placer des Widgets avec place en Tkinter\")\nroot.geometry(\"400x300\")\n\nframe = tk.Frame(root, bg=\"lightblue\")\nframe.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.8)\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Exemples Avanc\u00e9s d&rsquo;Utilisation de place<\/h3>\n\n\n\n<p>Pour ma\u00eetriser pleinement le gestionnaire <code>place<\/code>, voici quelques exemples avanc\u00e9s illustrant l&rsquo;usage de dimensions et d&rsquo;ancres pour un placement pr\u00e9cis des widgets.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Positionnement Avanc\u00e9 avec Ancres<\/h4>\n\n\n\n<p>L&rsquo;utilisation de l&rsquo;option <code>anchor<\/code> permet de contr\u00f4ler quel coin ou centre du widget s&rsquo;aligne avec les coordonn\u00e9es donn\u00e9es. Cela peut \u00eatre particuli\u00e8rement utile pour centrer des widgets de diff\u00e9rentes tailles :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\nroot = tk.Tk()\nroot.title(\"Placer des Widgets avec place en Tkinter\")\nroot.geometry(\"400x300\")\n\nlabel = tk.Label(root, text=\"Centr\u00e9 avec Anchor\")\nlabel.place(x=200, y=150, anchor=\"center\")\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Combinaison de Widgets avec Diff\u00e9rents Anchors<\/h4>\n\n\n\n<p>Pour une interface plus complexe, vous pouvez combiner plusieurs widgets en utilisant des ancres diff\u00e9rentes pour chacun :<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>import tkinter as tk\n\nroot = tk.Tk()\nroot.title(\"Placer des Widgets avec place en Tkinter\")\nroot.geometry(\"400x300\")\n\nlabel1 = tk.Label(root, text=\"Nord-Ouest\")\nlabel1.place(x=0, y=0, anchor=\"nw\")\n\nlabel2 = tk.Label(root, text=\"Sud-Est\")\nlabel2.place(x=400, y=300, anchor=\"se\")\n\nroot.mainloop()\n<\/code><\/pre>\n\n\n\n<p>En continuant vos explorations avec <code>place<\/code>, vous pouvez consulter des ressources suppl\u00e9mentaires pour approfondir vos comp\u00e9tences. Par exemple, les tutoriels sur <a href=\"https:\/\/realpython.com\/\" target=\"_blank\" rel=\"noopener\">Real Python<\/a> et la <a href=\"https:\/\/docs.python.org\/3\/library\/tkinter.html\" target=\"_blank\" rel=\"noopener\">documentation officielle de Tkinter<\/a> sont d&rsquo;excellentes sources. Pour une approche plus structur\u00e9e, des cours comme ceux de <a href=\"https:\/\/www.coursera.org\/\" target=\"_blank\" rel=\"noopener\">Coursera<\/a> peuvent \u00eatre tr\u00e8s utiles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Le gestionnaire de g\u00e9om\u00e9trie <code>place<\/code> en Tkinter est extr\u00eamement puissant pour disposer pr\u00e9cis\u00e9ment les widgets dans vos applications graphiques. En combinant des coordonn\u00e9es absolues, relatives, et des ancres, vous pouvez cr\u00e9er des interfaces utilisateur complexes et r\u00e9actives. Continuez \u00e0 explorer les possibilit\u00e9s de <code>place<\/code> et d&rsquo;autres gestionnaires de g\u00e9om\u00e9trie pour perfectionner la disposition des widgets dans vos projets Tkinter. Pour plus de tutoriels d\u00e9taill\u00e9s sur Tkinter, consultez notre article sur <a href=\"https:\/\/wikiform.fr\/codespace\/placer-des-widgets-avec-pack-en-tkinter\" target=\"_blank\" rel=\"noopener noreferrer\">placer des widgets avec pack en Tkinter<\/a> et <a href=\"https:\/\/wikiform.fr\/codespace\/placer-des-widgets-avec-grid-en-tkinter\" target=\"_blank\" rel=\"noopener noreferrer\">placer des widgets avec grid en Tkinter<\/a>. Apprenez aussi \u00e0 <a href=\"https:\/\/wikiform.fr\/codespace\/creer-une-fenetre-avec-tkinter-tutoriel\" target=\"_blank\" rel=\"noopener noreferrer\">cr\u00e9er une fen\u00eatre avec Tkinter<\/a> et explorer <a href=\"https:\/\/wikiform.fr\/codespace\/manipuler-break-et-continue-en-python\" target=\"_blank\" rel=\"noopener noreferrer\">comment manipuler break et continue en Python<\/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\n\n1. l&rsquo;article DOIT OBLOGATOIREMENT faire au moins 1200 mots. Si ce n&rsquo;est pas le cas, ajoute du contenu pertinent.\n\n2. Ajoute entre 5 et 7 liens internes de mani\u00e8re naturelle. Tu trouveras tous les titres ici \u00ab\u00a0\u00a0\u00bbinstaller-python-sur-mac-2024-guide-complet, installer-python-sur-windows-facilement, installer-python-sur-linux-ubuntu-etape-par-etape, premier-programme-python-hello-world, comprendre-les-variables-en-python, saisie-utilisateur-en-python-guide-complet, utiliser-les-operateurs-mathematiques-en-python, conversion-de-types-en-python-avec-cast, techniques-de-concatenation-en-python, structure-conditionnelle-if-else-en-python, utiliser-les-operateurs-de-comparaison-en-python, maitriser-les-operateurs-logiques-en-python, utilisation-de-elif-en-python-guide-pratique, boucle-for-en-python-guide-pratique, boucle-while-en-python-astuces-et-exemples, manipuler-break-et-continue-en-python, structures-de-donnees-listes-en-python, structures-de-donnees-dictionnaires-en-python, utiliser-les-tuples-en-python-guide, gerer-erreurs-et-exceptions-en-python, tp1-exercices-pratiques-calculatrice-en-python, introduction-aux-fonctions-en-python, valeurs-de-retour-des-fonctions-python, utiliser-les-fonctions-lambda-en-python, tp2-exercices-pratiques-sur-les-fonctions-python, presentation-de-la-modularite-en-python, utiliser-les-modules-de-bibliotheque-python, creer-des-modules-en-python-guide-pratique, tester-vos-modules-python-methodes-et-astuces, creer-et-gerer-des-packages-en-python, presentation-de-la-poo-en-python-introduction, creation-et-utilisation-des-classes-en-python, le-constructeur-de-classe-en-python-explications, definir-et-utiliser-les-methodes-en-python, methodes-de-classe-en-python-utilisation, methodes-statiques-en-python-guide, proprietes-en-python-gestion-et-utilisation, concepts-et-utilisation-de-l-heritage-en-python, exercices-pratiques-poo-en-python, introduction-a-tkinter-pour-interfaces-graphiques, creer-une-fenetre-avec-tkinter-tutoriel, utiliser-le-widget-label-avec-tkinter, afficher-des-messages-avec-tkinter","protected":false},"excerpt":{"rendered":"<p>Placer des Widgets avec place en Tkinter est une technique essentielle pour contr\u00f4ler pr\u00e9cis\u00e9ment la position des widgets dans vos interfaces graphiques en Python. Le&#8230;<\/p>\n","protected":false},"author":4,"featured_media":2946,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[24],"tags":[18],"class_list":["post-5815","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\/5815","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=5815"}],"version-history":[{"count":1,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5815\/revisions"}],"predecessor-version":[{"id":5816,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5815\/revisions\/5816"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media\/2946"}],"wp:attachment":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media?parent=5815"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/categories?post=5815"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/tags?post=5815"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}