FAQ PythonDate de publication : 24/05/2005 Dernière mise à jour : 23/05/2009 Cette FAQ a été réalisée à partir des questions posées sur le forum Python complétées par d'autres questions qui pouvaient nous sembler intéressantes de traiter. Toutefois il se peut que les réponses apportées contiennent des erreurs, imprécisions ... Vous pouvez dans ce cas contacter un des membres de la rédaction pour lui faire part de vos remarques. L'équipe Python de Developpez. Ont contribué à cette FAQ : Guigui_ - oiffrig - Miksimus - naxelas Onarap - Choupi - THE_VIP - Wormus DiGiTAL_MiDWAY - airod - jean-jacques varvenne - FAQ Python 1. 2. 3. 4. 5. Introduction (5) .......................................................................................................................................................................... 5 IDLE (3) .................................................................................................................................................................................... 7 Généralités (13) ......................................................................................................................................................................... 8 Mode console (4) .....................................................................................................................................................................16 Type de données (31) ..............................................................................................................................................................18 5.1. Les nombres (4) ..............................................................................................................................................................19 5.2. Les chaînes de caractères (17) ....................................................................................................................................... 22 5.2.1. String (10) .............................................................................................................................................................. 23 5.2.2. Les chaînes Unicode (5) ........................................................................................................................................27 5.2.3. Expressions régulières (2) ..................................................................................................................................... 29 5.3. Listes (6) ......................................................................................................................................................................... 30 5.4. Dictionnaire (4) ...............................................................................................................................................................33 6. Les fonctions (2) ......................................................................................................................................................................35 7. Programmation objet (5) ..........................................................................................................................................................37 8. Gestion Fichier/Répertoire (21) ...............................................................................................................................................40 8.1. Prérequis (1) ....................................................................................................................................................................41 8.2. Fichier (7) ....................................................................................................................................................................... 42 8.3. Répertoire (5) ..................................................................................................................................................................46 8.4. Fichiers de configuration (6) .......................................................................................................................................... 48 8.4.1. Fichiers variable=valeur (2) ...................................................................................................................................49 8.4.2. ConfigParser (4) .....................................................................................................................................................50 8.5. Compression/Archive (2) ................................................................................................................................................52 9. Base de registre sous Windows (4) .........................................................................................................................................54 10. Thread (3) .............................................................................................................................................................................. 56 11. Réseau / Web (9) ................................................................................................................................................................... 59 11.1. FTP (5) ..........................................................................................................................................................................61 12. Les erreurs (5) ....................................................................................................................................................................... 64 13. GUI (64) .................................................................................................................................................................................67 13.1. Tkinter / Tix / Pmw (55) .............................................................................................................................................. 68 13.1.1. Prérequis (4) .........................................................................................................................................................69 13.1.2. Tkinter (45) .......................................................................................................................................................... 71 13.1.2.1. Widget (4) ................................................................................................................................................... 72 13.1.2.2. Fenêtre (7) ...................................................................................................................................................74 13.1.2.3. Entry (5) ......................................................................................................................................................77 13.1.2.4. Button (2) ....................................................................................................................................................79 13.1.2.5. Label (1) ......................................................................................................................................................81 13.1.2.6. Listbox (3) ...................................................................................................................................................82 13.1.2.7. Canvas (3) ................................................................................................................................................... 84 13.1.2.8. Text (4) ....................................................................................................................................................... 86 13.1.2.9. Menu (3) ..................................................................................................................................................... 88 13.1.2.10. tkMessageBox (3) ..................................................................................................................................... 90 13.1.2.11. tkFileDialog (2) .........................................................................................................................................91 13.1.2.12. Gestion de la géométrie (1) ...................................................................................................................... 92 13.1.2.13. Evènements (5) ......................................................................................................................................... 93 13.1.2.13.1. Evènements Clavier (1) ................................................................................................................... 94 13.1.2.13.2. Evènements Souris (2) .....................................................................................................................95 13.1.2.14. Divers (2) .................................................................................................................................................. 96 13.1.3. Tix (6) .................................................................................................................................................................. 97 13.1.3.1. Widget (1) ................................................................................................................................................... 98 13.1.3.2. Tix.Combobox (2) .......................................................................................................................................99 13.1.3.3. Tix.Notebook (1) .......................................................................................................................................101 13.1.3.4. Tix.Meter (1) .............................................................................................................................................102 13.1.3.5. Tix.Balloon (1) ..........................................................................................................................................103 13.2. wxPython (6) ...............................................................................................................................................................104 -3Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005-2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python.developpez.com/faq/ ...................................117 16..... Matplotlib (3) ........... 107 14........... Copyright © 2005-2009 Developpez LLC............... 111 15...................... Py2exe (6) .............119 -4Les sources présentées sur cette pages sont libres de droits......Python Image Library (7) ............................................................................... Optimisation (2) ..............................................................................developpez...................................................................... pyGTK (2) ........................................................................................ 112 16....................2.............. Tout droits réservés Developpez LLC....................................... Déploiement (7) ........ Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts..........................................com/faq/ ........ ne peut être faite de ce site et de l'ensemble de son contenu : textes.............. http://python.................................................................................................................................................................FAQ Python 13.......... Pil .............................................................................................................109 15................................ 116 16.....................................1............................................ et vous pouvez les utiliser à votre convenance.........................3.... documents et images sans l'autorisation expresse de Developpez LLC..... Autres bibliothèques (10) .......... Aucune reproduction.................. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs... même partielle...................................................................1.......... . Une présentation du langage Python est faite dans la première partie du cours de Swinnen qui vous montrera les caractéristiques du langage: Apprendre à programmer avec Python. En voici un résumé # Python est portable sur de nombreux OS (Unix..developpez. Delphi. Tout droits réservés Developpez LLC. Il existe plusieurs implémentations du langage Python: • • • CPython. C++. en français un peu moins. Java. Aucune reproduction. # Python est extensible : On peut l'interfacer avec d'autres langages (C.. la plus utilisée et appelée plus simplement Python Jython codée en Java et fonctionnant sur les machines virtuelles Java IronPython codée en C# et fonctionnant sur les plateformes . http://python. # Python est orienté-objet. .FAQ Python Sommaire > Introduction Qu'est-ce que Python ? Auteurs : Guigui_ . Il supporte l'héritage multiple et la surcharge des opérateurs. Documentation officielle Python Library Reference The Python Language Reference Global Module Index Cours et tutoriel de Développez. . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Net Outils Python et avoir plus de détails sur leur fonctionnement..) # La bibliothèque standard de Python est très riches et de nombreuses bibliothèques gratuites peuvent être facilement ajoutées Où trouver de l'aide pour Python ? Auteurs : Guigui_ . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Windows. # Python est dynamiquement typé. et vous pouvez les utiliser à votre convenance. # La syntaxe de Python est très simple. Vous pouvez les télécharger à partir de notre rubrique -5Les sources présentées sur cette pages sont libres de droits. Mac. l'indentation du code (plutôt que l'usage d'accolades) permet d'avoir des programmes très lisibles et plus compactes # Python détruit lui-même les objets créés lorsque plus aucune référence ne pointe sur eux # Il n'y a pas de pointeurs explicites en Python.com Quelle implémentation de Python choisir ? Auteurs : Guigui_ .com/faq/ . La documentation en anglais est très importante. codée en C.) # Python est gratuit et utilisable sans restriction dans des projets commerciaux. Copyright © 2005-2009 Developpez LLC. même partielle. documents et images sans l'autorisation expresse de Developpez LLC. vous pouvez optez pour d'autres IDE que vous pouvez télécharger dans la rubrique Outils Python Si vous programmez des interfaces graphiques. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Lorsque nécessaire. Tout droits réservés Developpez LLC. les pages seront mise à jour pour être conforme à cette release. Vous trouverez quelques tutoriels pour programmer intégralement vos IHMs dans la rubrique Tutoriels Python A quelle version de Python se rapporte cette FAQ ? Auteurs : Guigui_ .6 de Python (ainsi que dans les versions ultérieures de la branche 2. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. nous assurons que les codes source proposés dans cette FAQ sont compatibles avec la version 2.x) mais dans la majorité des cas. Aucune reproduction. -6Les sources présentées sur cette pages sont libres de droits. même partielle. ce qui n'est pas si difficile que cela avec l'habitude. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. il est peut-être préférable de tout programmer. et vous pouvez les utiliser à votre convenance.FAQ Python Si vous débutez en Python. Il est important d'utiliser un éditeur qui gère Python car le formatage du code est primordiale sous peine d'avoir des erreurs de syntaxe (notamment au niveau de l'indentation) Si vous faites uniquement de la programmation en mode console. Si vous aimez aussi l'auto-complétion. ils fonctionneront également sans problème avec des versions antérieures. Toute la documentation du site ainsi que le forum sont consacrés presque exclusivement à cette implémentation. si vous voulez rester complètement maître de votre code. Copyright © 2005-2009 Developpez LLC. la version utile de Python sera mentionnée.com/faq/ . La FAQ Python se rapporte à la dernière release de Python. Quel éditeur utiliser ? Auteurs : Guigui_ . documents et images sans l'autorisation expresse de Developpez LLC. http://python. l'éditeur IDLE proposé à l'installation de Python est un bon choix avec en particulier l'indentation automatique et la coloration syntaxique. En revanche. Actuellement. Lors de nouvelles releases de Python. téléchargez de préférence CPython. vous pouvez également être aidés par des éditeurs spécialement conçus pour cela tels que Boa Constructor téléchargeables depuis la même rubrique.developpez. .com/faq/ . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.FAQ Python Sommaire > IDLE Comment éditer un script python avec IDLE ? Auteurs : Guigui_ . Dans le menu Options. >>> nb = input("Choisissez un nombre :") Choisissez un nombre :5 >>> if nb > 0: print "positif" else: print "négatif" File "<pyshell#18>".. A la prochaine ouverture de IDLE. Dans IDLE. distribué dans la distribution standart de Python.developpez. Vous n'avez alors plus qu'à charger votre fichier (menu File -> Open. Vous pouvez alors sélectionner l'option Open Edit Window si vous voulez ouvrir IDLE uniquement en mode éditeur ou bien Open Shell Window si vous voulez ouvrir IDLE en mode interactif. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. cliquez sur l'option Configure IDLE.. et vous pouvez les utiliser à votre convenance. documents et images sans l'autorisation expresse de Developpez LLC. Pour ouvrir IDLE. L'erreur IndentationError intervient lorsqu'il y a un problème d'indentation dans votre code. même partielle. Une autre solution est d'éditer directement votre script par un clic droit sur votre fichier puis Edit with IDLE. lien : Comment configurer IDLE en mode Editeur ou Shell au démarrage ? Comment configurer IDLE en mode Editeur ou Shell au démarrage ? Auteurs : Guigui_ .. Tout droits réservés Developpez LLC. Mais au niveau de l'alignement des blocks. Aucune reproduction. Copyright © 2005-2009 Developpez LLC. il faut faire abstraction de ce prompt. http://python. il suffit d'exécuter le fichier <PYTHONHOME>/ lib/idlelib/idle. il vous faut vous mettre en mode éditeur si cela n'est pas fait par défaut (menu File -> New Window ). l'option sera prise en compte.pyw ). line 3 else: print "négatif" ^ IndentationError: unindent does not match any outer indentation level >>> if nb > 0: print "positif" else: print "négatif" positif >>> if nb > 0: print "positif" else: print "négatif" positif -7Les sources présentées sur cette pages sont libres de droits. Pourquoi j'obtiens le message d'erreur IndentationError: unindent does not match any outer indentation level ? Auteurs : Guigui_ ..pyw (typiquement sous Windows c:/python25/lib/idlelib/idle. ). la première ligne contient les caractères du prompt (>>>). Une fois IDLE ouvert. Cliquez ensuite sur l'onglet General. à l'installation de Python.exe (si on ne veut pas que la console soit affichée).py Certains éditeurs permettent également d'exécuter ses scripts. Donnez ensuite l'attribut exécutable au fichier (soit en ligne de commande avec chmod+x monscript. même partielle.py. vous pouvez obtenir facilement des informations sur tout objet. dir([object]) retourne la liste des attributs de l'objet object. Vous pouvez également l'exécuter à partir de la console DOS en tapant directement c:/python25/python. En général.. le système d'aide interactif démarre sur la console de l'interpréteur. fichiers que l'on retrouve dans le répertoire d'installation de Python (typiquement c:/python25). Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.com/faq/ . . et vous pouvez les utiliser à votre convenance.FAQ Python Sommaire > Généralités Comment exécuter un programme Python ? Auteurs : Guigui_ . méthode. http://python. Par exemple sous IDLE. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.exe ou pythonw. Aucune reproduction. Les fichiers Python que vous pouvez utiliser portent les extensions .developpez. d'utiliser les fonctions dir([object]). un simple F5 exécute votre source.cos) -8Les sources présentées sur cette pages sont libres de droits.). Quelques exemples ## code pour obtenir des informations sur les string: dir(str) help(str) str.exe monscript.py soit à partir d'un gestionnaire de fichier) et exécutez le fichier à partir la ligne de commande python monscript. le nom des attributs ou fonctions d'une classe. Si l'argument est une chaîne de caractères. Avant même de rechercher dans une quelconque documentation (cours. Pour cela.__doc__ ## code pour obtenir des informations sur la fonction math. Si l'argument est un autre type d'objet. cette association est faite d'elle-même et un double-clic sur votre script Python suffit pour l'exécuter.py si le répertoire c:/python25/ a été ajouté auparavant à la variable d'environnement PATH de windows (Panneau de Configuration->Système->Avancé->Variables d'environnement).. Si aucun argument n'est donné. help([object]) invoque le système d'aide intégré. Sous Windows: Les scripts Python sont exécutés par l'application python. classe. La liste obtenue n'est cependant pas forcément complète. mot clé et la page d'aide détectée est donnée sur la console. . ne peut être faite de ce site et de l'ensemble de son contenu : textes. lien : lien : Comment ne pas afficher la fenêtre DOS à l'exécution du programme ? Comment empêcher la fermeture de la fenêtre DOS à l'exécution d'un programme ? Comment obtenir des informations utiles sur l'utilisation d'un objet/module/fonction ? Auteurs : Guigui_ .py ou bien simplement python monscript. help([object]) ou encore les docstrings avec l'attribut __doc__. Sous linux: en début de script.__doc__ ## code pour obtenir des informations sur le module math: import math dir(math) help(math) ## ou help("math") math. fonction. il vous suffit d'insérer en première ligne #!/usr/bin/env python. Copyright © 2005-2009 Developpez LLC.pyo.. celle-ci est considérée comme le nom d'un module.. Cette ligne permet au système Unix de trouver quel logiciel doit être utilisé pour interpréter la suite du fichier.cos: import math dir(math. documents et images sans l'autorisation expresse de Developpez LLC. tutoriel. Tout droits réservés Developpez LLC. Enfin vous pouvez aussi visualiser les docstrings en appelant le paramètre __doc__ sur un objet.pyc ou . la page d'aide de cet objet est alors générée. . module ou fonction que vous souhaitez utiliser. Ces attributs peuvent être par exemple le nom des classes ou fonctions d'un module. FAQ. il suffit à partir d'un interpréteur python. com/faq/ . http://python. '') Pour connaître la plateforme sur lequel tourne Python: >>> import sys >>> sys.5.cos.system() 'Windows' >>> platform.FAQ Python Quelques exemples help(math. Vous pouvez ainsi en lui appliquant les paramètres adéquats opter pour une installation silencieuse. 1.python_version_tuple() ['2'.2600'. Tout droits réservés Developpez LLC. La version 2.version '2. Ces 2 modules sont de parcourir les différents liens pour découvrir toutes les fonctions disponibles. 0) >>> sys. Il vous suffira >>> import platform >>> platform.4 de Python est distribué sur Windows avec l'installateur de Microsoft (MSI).1 (r251:54863.cos") math.cos) ## ou help("math.1310 32 bit (Intel)]' >>> platform.1' >>> platform. ''. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.uname() ('Windows'.exe qui doit se trouver dans <Windows>\System32\ si non reconnu) -9Les sources présentées sur cette pages sont libres de droits.__doc__ Comment obtenir des informations sur son système (d'exploitation.python_version() '2.msi /q où python<version>.platform 'win32' Pour connaître la version de Python: >>> import sys >>> import platform >>> sys. même partielle. python) ? Auteurs : Guigui_ . plateforme.1. 'final'.developpez. ce qui peut-être utile nécessaire si on développe une application multi-plateforme ou devant être compatible avec différentes versions de Python. La commande à utiliser est: msiexec /i python<version>.version_info (2. 08:51:08) [MSC v.5. vous pouvez faire: sys et platform. 5. Par exemple. msiexec est le l'installateur de microsoft (fichier msiexec. 'ordiguigui'.1. '1'] Comment procéder à une installation silencieuse de Python sous windows ? Auteurs : Guigui_ . 'XP'. '5'. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Aucune reproduction. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. documents et images sans l'autorisation expresse de Developpez LLC.platform() 'Windows-XP-5. pour connaître le système d'exploitation.2600-SP2' >>> platform. '5. Copyright © 2005-2009 Developpez LLC. et vous pouvez les utiliser à votre convenance. Python propose 2 modules principaux pour obtenir un maximum d'informations sur le système sur lequel est installé Python et sur Python lui-même.msi correspond au fichier à installer . Apr 18 2007. De plus. la variable d'environnement PYTHONPATH entre autres) Voici les syntaxes que vous pouvez utiliser: import MonModule import MonModule as MonAlias from MonModule import * from MonModule import MonObjet1 as MonAlias1. En résumé. on se contente d'un import simple.txt'. Si le module n'est pas trouvé. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Tk() import Tkinter as Tk root=Tk. et vous pouvez les utiliser à votre convenance.com/faq/ . Tout droits réservés Developpez LLC. MonObjet2 as MonAlias2 import Tkinter root=Tkinter. Copyright © 2005-2009 Developpez LLC.4. cela pourra entraîner des conflits de noms. même partielle. pour faire une installation sans interaction de l'utilisateur mais avec affichage complet du processus d'installation. Lors de l'importation d'un module.10 Les sources présentées sur cette pages sont libres de droits.Tk() from Tkinter import * root=Tk() On utilise régulièrement un alias lorsque le nom du module est long (genre Tk pour Tkinter). http://python. Pour les modules courts (os.path (qui contient le répertoire courant. documents et images sans l'autorisation expresse de Developpez LLC. le programme va tout d'abord vérifier si le module à importer se trouve dans le dictionnaire sys. le programme le cherchera à partir de la liste définie par sys.msi ALLUSERS=1 /qr D'autres paramètres peuvent être utiliser. re). il est nécessaire de spécifier un autre paramètres ALLUSERS=1. il suffit d'utiliser la commander suivante msiexec /i python-2. Le code sera moins lisible car on ne saura pas à priori d'où viennent les fonctions utilisées. f=open('test. ne peut être faite de ce site et de l'ensemble de son contenu : textes.FAQ Python et q est un paramètre qui peut prendre les valeurs suivantes: • • • • • • qn: Pas d'interface qb: Affichage d'une simple barre de progression qb!: Comme qb mais sans le bouton Annuler qr: Affiche les boîtes de dialogue mais sans interaction avec l'utilisateur qn+: Comme qn avec affichage à la fin de la boîte de dialogue de fin d'installation qb+: Comme qb avec affichage à la fin de la boîte de dialogue de fin d'installation On peut également rajouter un paramètre TARGETDIR si on veut changer le répertoire de destination msiexec /i python<version>. vous pouvez consulter la officielle documentation Comment importer des modules/fonctions/fichiers ? Auteurs : Guigui_ . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.developpez. On déconseille l'utilisation de l'instruction from même si le programme est plus concis.msi TARGETDIR=d:\Python24 Pour une installation pour tous les utilisateurs. Pour plus d'information.modules (module de bases + les modules d'autres bibliothèques que vous avez installés). Aucune reproduction.2. 'w') ## la fonction open est celle des objets prédéfinies de Python . Aucune reproduction. il n'y aura bien entendu plus aucune erreur de ce type. ne peut être faite de ce site et de l'ensemble de son contenu : textes.py. C'est pourquoi.py et b.py qui effectueront respectivement un import b et un import a et nous exécutons le script main. Si vous voulez structurer vos projets en ayant des fichiers dans différents répertoires. Le corps du module a est alors exécuté jusqu'à ce qu'il tombe sur l'instruction import b.py qui lui même importe le module a.py tombe sur l'instruction import a. Un nouvel objet sys. la définition de la fonction open du __builtin__ a été ## écrasée par celle de l'os lors lors de son import Quid des importations circulaires ? Auteurs : Guigui_ . Evitez donc au maximum l'importation circulaire.testA. Tout droits réservés Developpez LLC. lien : What's New in Python: 4 PEP 328: Absolute and Relative Imports . Il y a en général presque toujours moyen de le programmer autrement. Une fois que les 2 modules a et b auront été entièrement importés.11 Les sources présentées sur cette pages sont libres de droits. vous pouvez importer testA par l'instruction import A.py dans le répertoire contenant les modules à importer.modules['a'] existe déjà. Cette variable d'environnement permet d'initialiser la liste sys. Comment importer un module qui n'est pas dans le répertoire courant ? Auteurs : Guigui_ .txt'. l'importation circulaire est inévitable. import sys sys. le corps du module b est alors exécuté.append(monchemin) Depuis Python 2.5. Cependant.FAQ Python from os import * f=open('test. Il vous est néanmoins proposé plusieurs solutions pour que l'importation se fasse sans erreur. considérons un répertoire locale qui contient un répertoire A lui même contenant un fichier __init__. Leur utilisation est en général déconseillée et peut parfois introduire des erreurs à cause de variables non définies au moment des importations. http://python. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. documents et images sans l'autorisation expresse de Developpez LLC. dans ce cas précis. le corps du module b n'aura donc accès qu'aux objets déjà chargés dans le module a et des erreurs seront générés pour tout accès à d'autres objets du module a. from A import testA ou from A. Il ira ensuite dans chercher dans les chemins définis par la variable d'environnement PYTHONPATH. Lorsque main. le module a n'ayant pas été entièrement chargée. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. il est important de bien maîtriser l'ordre des déclarations des objets dans chacun de vos modules. Nous avons 2 modules a.com/faq/ .path à partir de laquelle Python effectuera les importations. O_CREAT) ## la fonction open est celle du module os. Si pour vous. une variable globale a est alors liée dans le module b à cet objet.path.py vide et un fichier testA. même partielle.testA import *. un objet sys. vous aurez parfois des problèmes au moment de l'importation des modules parce que Python ne saura pas où chercher vos modules. Pour cela.developpez. Ce fichier peut être vide. Depuis votre répertoire locale. Nous allons partir sur un exemple simple. L'importation circulaire typique est quand 2 modules s'importent mutuellement. Par exemple.modules['b'] est alors créé et initialisé à vide. Python cherche en premier lieu le module à importer dans le répertoire courant. et vous pouvez les utiliser à votre convenance. il vous faut simplement comprendre le fonctionnement de l'exécution d'un programme afin de placer les instructions dans le bon ordre. Copyright © 2005-2009 Developpez LLC.modules['a'] est alors créé et initialisé à vide. Lorsqu'il tombe sur l'instruction import a. comme l'objet sys. il vous faut d'abord créer un fichier __init__. Vous pouvez modifier dynamiquement cette liste de chemins (liste qui ne sera donc valable qu'à l'exécution de votre programme) en ajoutant les répertoires supplémentaires dans lesquels vous voulez que Python cherchent les modules à importer. il est également possible d'effectuer des importations relatives. l'exécution du corps du module b se poursuit alors jusqu'à la fin. pour créer de nouveaux attributs.5) . (5. Dans le cas d'un attribut: Pour récupérer l'ensemble des noms de variables globales. '6'] Dans le cas d'une fonction: il n'est pas possible d'utiliser directement l'ajout d'un élément en passant directement par le dictionnaire. même partielle.com/faq/ . Il arrive parfois qu'il nous faille déclarer des attributs à partir de la chaînes de caractères représentant leur nom. Il suffit d'ajouter un élément à ces dictionnaires pour créer une nouvelle variable.variable2 (5. Aucune reproduction. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. 'variable2'. classes ou simples attributs) sont conservés en Python dans des dictionnaires. documents et images sans l'autorisation expresse de Developpez LLC.FAQ Python lien : Comment importer des modules/fonctions/fichiers ? Comment déclarer une variable à partir d'une chaine de caractères ? Auteurs : Guigui_ .developpez. est d'utiliser la méthode global setattr(obj. Le nom de toutes les variables (fonctions.'6']") >>> mavariable ['5'. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.__dict__['variable1']=[1. 2. et vous pouvez les utiliser à votre convenance. ne peut être faite de ce site et de l'ensemble de son contenu : textes.2.y): print x+y") >>> plus(3. Copyright © 2005-2009 Developpez LLC. on peut utiliser l'appel au dictionnaire __dict__ >>> class maclasse: def __init__(self): self.6)) >>> a. value) qui aura le même effet >>> setattr(a.12 Les sources présentées sur cette pages sont libres de droits. Il faudra passer par la méthode exec >>> exec("def plus(x.3] print self. http://python. Tout droits réservés Developpez LLC. 3] Une autre façon. 6) Une autre méthode est d'utiliser directement la fonction exec(unstr) qui exécute la chaîne de caractères passé en argument >>> exec('mavariable=5') >>> mavariable 5 >>> exec("mavariable=['5'.__dict__['variable1'] >>> a=maclasse() [1. il suffit d'appler la méthode globals() >>> globals()['mavariable']=5 >>> mavariable 5 Dans le cas d'une classe. par exemple lors de la lecture d'un fichier de configuration contenant le nom des variables et leur valeurs. name. python. http://python. import sys sys.. les encodages iso-8859-1. see http://www. on line .html for details Par défaut l'interpréteur s'attend à ne devoir traiter que des caractères ascii. Quand vous lancez votre script Python.coding: iso8859-1 -*- Pour plus de détails: http://www.argv[0] est le nom complet du programme appelé. but no encoding declared. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005-2009 Developpez LLC.FAQ Python 8 Comment empêcher les messages d'avertissement lors de l'utilisation de caractères non-ASCII ? Auteurs : naxelas .argv qui contient la liste des paramètres et où sys. La déclaration se fait comme ceci: # -*. Pour que l'interpréteur reconnaisse les caractères non ascii. et vous pouvez les utiliser à votre convenance.. Latin-1. si vous voulez attendre la fin du programme externe ou non avant de poursuivre le programme principal. in file .developpez. . Aucune reproduction.exit() Comment récupérer les paramètres passés à un programme ? Auteurs : Guigui_ .. Il existe de multiples façon pour exécuter un programme externe qui dépendront de plusieurs facteurs (si il y a ou non des paramètres.python. vous devez déclarer l'encodage que vous utilisez au début du fichier source.). Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. cp1252 ainsi que utf-8 fonctionneront. documents et images sans l'autorisation expresse de Developpez LLC.. ne peut être faite de ce site et de l'ensemble de son contenu : textes. n'incluant pas les caractères accentués et spéciaux du français.html Comment quitter son application ? Auteurs : Guigui_ .org/peps/pep-0263.13 Les sources présentées sur cette pages sont libres de droits.. Vous pourrez récupérer les paramètres passés à votre programme par l'attribut sys..com/faq/ . L'encodage ascii ne contient que 256 caractères. Pour le français.org/peps/pep-0263. .. Tout droits réservés Developpez LLC. si celui-ci contient des caractères non-ASCII. même partielle.. vous pouvez avoir le message d'avertissement suivant: sys:1: DeprecationWarning: Non-ASCII character . Vous trouverez dans la Python Library Reference toutes les informations pour exploiter au mieux les différentes méthodes exposées à la suite.. Comment lancer un programme externe ? Auteurs : Guigui_ . et vous pouvez les utiliser à votre convenance.exe') os. import os os. ne rend la main que lorsque l'application lancée prend fin...P_WAIT pour attendre la fermeture de l'application avant de poursuivre le programme principal ou os.exe") Une quatrième méthode est la fonction os. bufsize]]) qui exécute command dans un processus enfant et rend immédiatement la main en retournant un descripteur du fichier. Tout droits réservés Developpez LLC. Le problème de cette solution peut cependant être l'absence de droit d'écriture ou bien un plantage de l'application (ou bien une fermeture de l'application non prévu) qui empêcherait la suppression de ce fichier. import os os.system( command) qui exécute command.) ou os. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. La deuxième exécution d'un même programme générera une erreur lors de la tentative de création de ce mini-serveur sur ce même port.developpez. Il vous suffit alors de vérifier l'existence ou non de ce fichier pour poursuivre l'exécution du programme.P_NOWAIT pour rendre la main immédiatement. mode[.system('MonImage.FAQ Python Toutes ses fonctions sont obtenues à partir du module os ou subprocess.com/faq/ . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Copyright © 2005-2009 Developpez LLC. même partielle. operation]) qui exécute le fichier path avec l'application associée par défaut et rend immédiatement la main.exe monfichier.exe monfichier. Une deuxième solution consiste à créer un mini-serveur sur un port défini qui se contente de simplement exister. import os os.14 Les sources présentées sur cette pages sont libres de droits.. Tout d'abord.spawnl(os.log") Vous pouvez également regarder du côté du module subprocess ( management ) qui aura pour but de remplacer les 3 dernières méthodes.system("c:/windows/notepad. Le premier paramètre attendu peut prendre comme valeur os. vous pouvez utilisez la fonction os. Python Library Reference: Subprocess lien : lien : lien : Python Library Reference: File Object Creation Python Library Reference: Process Management Python Library Reference: Subprocess management Comment n'instancier qu'une seule fois un programme ? Auteurs : jean-jacques varvenne . .spawnl(.) ainsi que leurs variantes qui permet d'exécuter un programme dans un nouveau processus.. documents et images sans l'autorisation expresse de Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.bmp') Une deuxième méthode est la fonction os.startfile('MonImage. Aucune reproduction. Pour n'instancier qu'une fois un programme. http://python.log") os. Vous pouvez lancer l'application externe avec des paramètres.popen( command[.spawnv(.startfile('c:/windows/notepad.startfile( path[.popen("c:/windows/notepad.bmp') Une troisième méthode est la fonction os. import os os.P_NOWAIT. "c:/windows/notepad. une solution simple peut être de créer un fichier au moment de l'exécution du programme et de le supprimer à la fin de l'exécution. FAQ Python #!/usr/bin/python # -*.sleep(10) print 'STOP' .__init__(self) self. Aucune reproduction. 50000 ) ) self. documents et images sans l'autorisation expresse de Developpez LLC.exit() print 'START' time. même partielle. socket. socket class Server( dispatcher ): def __init__(self): dispatcher.15 Les sources présentées sur cette pages sont libres de droits. Copyright © 2005-2009 Developpez LLC.developpez.SOCK_STREAM ) self. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.listen(1) try: Server() except: print 'Déjà en service !' sys. time. et vous pouvez les utiliser à votre convenance.bind( ( ''.AF_INET. Tout droits réservés Developpez LLC.com/faq/ .coding: iso-8859-1 -*from asyncore import dispatcher import sys. http://python.create_socket( socket. Si vous ne voulez pas que la fenêtre DOS s'ouvre. Copyright © 2005-2009 Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Tout droits réservés Developpez LLC.developpez. il suffit de changer l'extension de votre programme de . Si la fenêtre DOS s'ouvre encore. et vous pouvez les utiliser à votre convenance. # Si votre programme ne présente aucun bogue. Sous Linux: import os os. vous pouvez utilisez en fin de programme la fonction raw_input(prompt='') qui attend l'entrée d'une chaine de caractères avant de poursuivre l'exécution du programme.py. vous devez appeler votre programme par l'interpréteur pythonw (situé dans le même répertoire que l'interpréteur python).16 Les sources présentées sur cette pages sont libres de droits.py test.com/faq/ .exe test.bat (qui n'est autre qu'un fichier texte renommée avec l'extension bat) dans lequel vous tapez: c:/python24/python.FAQ Python Sommaire > Mode console Comment ne pas afficher la fenêtre DOS à l'exécution du programme ? Auteurs : Guigui_ .pyw. # Si vous êtes sous Windows et que vous voulez exécuter un programme test. il vous faut alors associer manuellement les fichiers . Comment empêcher la fermeture de la fenêtre DOS à l'exécution d'un programme ? Auteurs : Guigui_ . raw_input("Appuyer sur une touche pour quitter le programme") . En général.py en .py pause ou si le programme python.pyw à pythonw. http://python. documents et images sans l'autorisation expresse de Developpez LLC.system('clear') Sous Windows: import os . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. vous pouvez procéder de la manière suivante: créer un fichier test.exe est le programme par défaut pour l'exécution d'un fichier . même partielle.py pause Comment effacer le contenu de la console Dos/Shell ? Auteurs : Onarap . Aucune reproduction. ne peut être faite de ce site et de l'ensemble de son contenu : textes. vous pouvez. soit à la fin de l'instruction print ajouter une virgule (mais cela ajoutera néanmoins un espace avec le prochain élément écrit sur la console.write(unstr) qui écrit unstr à la position courante du curseur. Tout droits réservés Developpez LLC. print "un autre texte toujours sur la 1er ligne" sys. ne peut être faite de ce site et de l'ensemble de son contenu : textes. http://python.system('cls') Comment afficher un texte sans aller à la ligne Auteurs : Guigui_ .FAQ Python os.write("on est sur la 2ème ligne") print "on est toujours sur la 2ème ligne". documents et images sans l'autorisation expresse de Developpez LLC.stdout. et vous pouvez les utiliser à votre convenance. soit utilisez l'instruction sys. pour retourner à la ligne. même partielle. Pour afficher un texte dans la console Python sans qu'il y ait un retour à la ligne.stdout. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. sys. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.com/faq/ .17 Les sources présentées sur cette pages sont libres de droits.stdout. il suffira d'écrire le caractère "\n" import sys print "un texte sur la 1er ligne".developpez. Copyright © 2005-2009 Developpez LLC.write("on est sur toujours sur la 2ème ligne\n") print "on est sur la 3ème ligne" . Avec cette méthode. Aucune reproduction. Tout droits réservés Developpez LLC.developpez.FAQ Python Sommaire > Type de données . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. et vous pouvez les utiliser à votre convenance. Copyright © 2005-2009 Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. http://python.18 Les sources présentées sur cette pages sont libres de droits. Aucune reproduction. documents et images sans l'autorisation expresse de Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes.com/faq/ . même partielle. 6 de Python. Tout droits réservés Developpez LLC.developpez.FAQ Python Sommaire > Type de données > Les nombres Comment convertir un nombre d'une base quelconque en base 10 ? Auteurs : Guigui_ . Pour convertir un nombre entier (ou en base 10) en un nombre octal. on utilise la fonction int(x [. 16) ## Conversion de AA de la base 16 à la base 10 ## Conversion de OxAA de la base 16 à la base 10 int('0xAA'. 16) int('71'. on utilise la fonction hex(N) >>> hex(21) '0x15' A partir de la version 2. 11) ## Conversion de 71 de la base 8 à la base 10 ## Conversion de 071 de la base 8 à la base 10 ## Conversion de 11 de la base 11 à la base 10 Si base=0. et vous pouvez les utiliser à votre convenance. un nombre hexadécimale est écrit sous forme d'une chaîne commençant par 0x. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.0) 21 >>> int('071'. Par exemple. un nombre octale sous forme d'une chaîne commençant par 0. on n'est pas obligé de spécifier la base de départ en lui donnant la valeur 0. 8) int('071'.19 Les sources présentées sur cette pages sont libres de droits. documents et images sans l'autorisation expresse de Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Copyright © 2005-2009 Developpez LLC. Pour convertir un nombre X (écrit sous forme d'une chaîne de caractères) d'une base quelconque en base 10 (ou nombre entier). même partielle. 0) 57 Comment convertir un nombre entier dans une autre base ? Auteurs : Guigui_ . >>> 170 >>> 170 >>> 57 >>> 57 >>> 120 int('AA'.base]) où base représente la base sous laquelle est écrit le nombre. on utilise la fonction bin(N) >>> bin(21) '0b10101' .com/faq/ . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Aucune reproduction. on utilise la fonction oct(N) >>> oct(21) '025' Pour convertir un nombre entier (ou en base 10) en un nombre hexadécimal. Dans ces cas-là. >>> int('0x15'. la base est déterminée automatiquement en fonction de l'écriture du nombre sous forme de chaîne. 8) int('AA'. pour convertir un nombre entier (ou en base 10) en un nombre binaire. http://python. 12. Aucune reproduction. c-b >>> 15. vous devrez programmer vos propres fonctions Comment convertir un nombre entier en binaire ? Auteurs : oiffrig . il suffit alors de passer par la fonction bin >>> print (0bbb) 7 >>> bin(7) . `n & 1` + res return res Un petit test pour vérifier le gain en temps import time n = 1000000 a = time.6 de Python. les nombres binaires font leur apparition et commence par 0b. Il n'existe pas de fonctions dans la distribution de Python pour convertir un nombre entier en binaire. Copyright © 2005-2009 Developpez LLC. '.clock() print b-a.'. ce qui peut être utile si on a besoin de convertir beaucoup de nombres def bin_optimise(n): """Convertit un nombre en binaire""" if n == 0: return '0' res = '' while n != 0: n. Voici une fonction qui construit une chaîne binaire à partir d'un nombre. même partielle. res = n >> 1.clock() for i in range(n): bin_optimise(i) c = time. def bin(n): """Convertit un nombre en binaire""" q = -1 res = '' while q != 0: q = n // 2 r = n % 2 res = `r` + res n = q return res >>> bin(109323) '11010101100001011' On peut accélérer le processus avec un code sur le même algorithme mais beaucoup plus concis (suppression de toutes les variables intermédiaires). Vous devez donc écrire votre propre fonction.20 Les sources présentées sur cette pages sont libres de droits.7892307542 A partir de la version 2. documents et images sans l'autorisation expresse de Developpez LLC.FAQ Python Pour convertir dans d'autres bases.clock() for i in range(n): bin(i) b = time. Elle est basé sur l'algorithme d'Euclide. Guigui_ . Tout droits réservés Developpez LLC.developpez.com/faq/ . Pour convertir un nombre entier en binaire. http://python. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. et vous pouvez les utiliser à votre convenance. ne peut être faite de ce site et de l'ensemble de son contenu : textes.9132169033 . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Copyright © 2005-2009 Developpez LLC. Pour obtenir le code ascii d'une caractère. 100.FAQ Python '0b111' Comment obtenir le code Ascii ou Unicode d'un caractère ? Auteurs : Guigui_ .developpez. documents et images sans l'autorisation expresse de Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes. 98. >>> unichr(63000) u'\uf618' >>> unichr(97) u'a' >>> chr(97) 'a' . machaîne) ou bien d'utiliser une liste en intention. une erreur est retournée sinon. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. 100. il suffit d'appliquer la méthode ord(c) où c est le caractère en question. Aucune reproduction. Tout droits réservés Developpez LLC. 101] >>> [ord(i) for i in "abcde"] [97. Dans ce dernier ça. ord renvoie un nombre entre 0 et 65535. i doit être compris entre 0 et 255. il suffit d'utiliser la fonction map( ord. 101] la méthode inverse est unichr(i) pour obtenir le caractère unicode de i ou chr(i) pour obtenir le caractère ascii de i. 99. 98.com/faq/ . S'il s'agit d'un caractère ascii. le code sera compris entre 0 et 255. "abcde") [97. >>> map(ord. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.21 Les sources présentées sur cette pages sont libres de droits. 99. même partielle. >>> ord("é") 233 >>> ord("a") 97 >>> ord(" ") 32 >>> ord(u'\u9000') 36864 Si vous voulez l'ensemble des codes ascii d'une chaîne de caractères. http://python. et vous pouvez les utiliser à votre convenance. http://python. Tout droits réservés Developpez LLC.developpez. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. même partielle. Copyright © 2005-2009 Developpez LLC.com/faq/ .FAQ Python Sommaire > Type de données > Les chaînes de caractères . et vous pouvez les utiliser à votre convenance.22 Les sources présentées sur cette pages sont libres de droits. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. documents et images sans l'autorisation expresse de Developpez LLC. Aucune reproduction. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Dans ce cas-là.developpez. De plus si start est omis. il est traité comme valant 1. Pour récupérer les derniers caractères (les plus à droite) d'un string. Ainsi.'i'.replace('a'. Aucune reproduction. il suffit d'utiliser la syntaxe x[-nb:] où nb représente le nombre de caractères à récupérer. start et end peuvent être négatifs. new. http://python. >>> x = "0123456789" >>> x[3:5] '34' >>> x[::2] '02468' >>> x[1::2] '13579' >>> x[:3] '012' >>> x[-3:] '789' Comment remplacer une chaine de caractères par une autre ? Auteurs : Guigui_ . si end est omis.2) 'tipidaca' . un grand nombre de fonctions sur les strings accessibles directement sur les chaines de caractères sans importation de nouveau module: string. l'index est considéré comme relatif à la fin du string et len(x)+start ou len(x)+end leur sont substitués. Tout droits réservés Developpez LLC.23 Les sources présentées sur cette pages sont libres de droits. maxsplit=sys. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. s. vous pouvez extraire une sous-séquence par la forme x[start:end:step] où start est l'index de départ. documents et images sans l'autorisation expresse de Developpez LLC.FAQ Python Sommaire > Type de données > Les chaînes de caractères > String Où trouver de l'aide ? Auteurs : Guigui_ . Comme pour tous les objets de type séquence. il suffit d'utiliser la syntaxe x[:nb] où nb représente le nombre de caractères à récupérer. Ainsi.replace(old. vous pourrez trouver une explication complète (avec l'utilisation des paramètres optionels) aux différentes fonctions présentées par la suite. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.maxint) renvoit une copie de s où les occurences de la sous-chaine old est remplacée par la sous-chaine new >>>'tapadaca'. même partielle. Copyright © 2005-2009 Developpez LLC. end l'index de fin non inclu et step le pas. pour récupérer les permiers caractères (les plus à gauche) d'un string.com/faq/ . Comment extraire une sous-chaîne d'un string ? Auteurs : Guigui_ . ne peut être faite de ce site et de l'ensemble de son contenu : textes. il est considéré comme len(x). il est considéré comme valant 0. Si step est omis. et vous pouvez les utiliser à votre convenance. rstrip() ' a' Comment compter le nombre d'occurences d'une sous-chaine dans un string ? Auteurs : Guigui_ . 'd'] Comment supprimer une chaine de caractères en tête/fin d'un string ? Auteurs : Guigui_ . >>> mystr='abcde' >>> mystr[::-1] .maxint) renvoit une liste L de strings où chaque élément de L est un mot de s. s. http://python.com/faq/ . start=0.split('=') ['a '.maxint) renvoie le nombre d'occurences de la souschaine sub dans s[start:end] >>> 'tapadaca'. 'b'. où la chaîne sep sépare les mots. end=sys.FAQ Python Comment découper un string selon une chaine de caractères ? Auteurs : Guigui_ .split() ['a'. même partielle.' b'] >>>'a b c d'.strip(x=None) renvoit une copie de s où la chaine x en début/fin de s est supprimé. ce sont les espaces qui seront supprimés.strip('aaa') 'bbbbb' >>> ' a '. Aucune reproduction. les mots sont séparés par une suite quelconque d'espaces >>>'a = b'. s. si x=None. et vous pouvez les utiliser à votre convenance.count('a') 4 Comment renverser une chaîne de caractères ? Auteurs : Guigui_ .count(sub. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.developpez.split(sep=None.24 Les sources présentées sur cette pages sont libres de droits. lstrip et rstrip sont utilisées respectivement pour la suppresion à gauche et à droite >>> 'aaaaabbbbbaaaaa'. s. Copyright © 2005-2009 Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes. maxsplit=sys. Si sep=None. documents et images sans l'autorisation expresse de Developpez LLC. Tout droits réservés Developpez LLC. On peut utiliser les tranches de séquences de syntaxe s[i:j:k] qui retourne la sous-séquence de s comprise entre le ième élément compris et le jème non compris de pas k s[::-1] renvoie les éléments de s dans l'ordre inverse. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. 'c'. Dans vos programmes. Cela est particulièrement utile avec les chaînes de caractères représentant les chemin d'accès à un fichier ou à un répertoire qui peuvent s'utiliser avec des / ou des \ et ainsi parfois entraîner des erreurs si vous oubliez de doubler les backslash. Ainsi. lorsque vous travaillez avec des chaînes de caractères.dll' >>> print a c:\python25 cl eg1. si celle-ci contient un \. '\t' est le caractère de tabulation.25 Les sources présentées sur cette pages sont libres de droits.FAQ Python 'edcba' Qu'est-ce qu'un raw string ? Auteurs : Guigui_ . Tout droits réservés Developpez LLC. Le caractère \ (backslash) est en Python un caractère spécial qui peut donner un sens spécial au caractère le succédant. notamment lorsque vous manipulez sous windows des path de fichiers ou répertoires. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.isdir(r'c:\python24\bin') True >>> os.developpez. ne peut être faite de ce site et de l'ensemble de son contenu : textes. http://python. même partielle.path. dédoublez-le (\\) ou bien utilisez les raw string qui ne considèrent pas le caractère \ comme spécial.dll" >>> a 'c:\\python25\\tcl\\reg1.1\tclreg11. Par exemple. Aucune reproduction.isdir('c:/python24/bin') . Python Reference Manual qui >>> a = "c:\python25\tcl\reg1.dll' >>> print a c:\python25\tcl\reg1.dll" >>> a 'c:\\python25\tcl\reg1. Si vous avez besoin du caractère \ dans une de vos chaînes.1 clreg11. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Copyright © 2005-2009 Developpez LLC.1\tclreg11.1\tclreg11. une erreur ou une mauvaise interprétation de la chaîne peut apparaître.dll lien : Pourquoi j'obtiens une erreur lorsque mon string contient le caractère \ (backslash) ? Pourquoi j'obtiens une erreur lorsque mon string contient le caractère \ (backslash) ? Auteurs : Guigui_ .path.path. Dans le cas de fichiers ou répertoires sous windows. Un raw string est simplement une chaîne de caractères dont les séquences d'échappement avec le caractère \ (backslash ou antislash) ne sont pas interprétées. Vous pouvez voir les caractères spéciaux dans le nécessiteront une attention particulière. documents et images sans l'autorisation expresse de Developpez LLC.1\tclreg11.1\\tclreg11.path. et vous pouvez les utiliser à votre convenance. on peut aussi utiliser le caractère / (slash) à la place qui est reconnu de la même façon. Vous trouverez la liste des caractères spéciaux dans le Python Reference Manual.dll >>> a = r"c:\python25\tcl\reg1.com/faq/ . >>> import os >>> os. Les raw string sont aussi très utiles pour améliorer la lisibilité des expressions régulières friantes de backslash. un raw string est simplement une chaîne de caractères précédée de la lettre r.isdir('c:\python24\bin') False >>> os.isdir('c:\\python24\\bin') True >>> os. zfill( width) qui rajoute des caractères '0' devant la chaînes de caractères jusqu'à ce que celle-ci ait une longueur égale à width. Vous pouvez également utiliser la fonction s. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. fillchar]) permet d'ajuster une chaîne de caractères en ajoutant à droite le nombre de caractères fillchar nécessaires pour que la nouvelle chaîne de caractères ait une longueur égale à width . ne peut être faite de ce site et de l'ensemble de son contenu : textes. http://python.FAQ Python True Comment gérer un compteur avec un nombre de chiffres constant ? Auteurs : Guigui_ . fillchar]) qui permet d'ajuster une chaîne de caractères en ajoutant à gauche le nombre de caractères fillchar nécessaires pour que la nouvelle chaîne de caractères est une longueur égale à width for i in range(1000): print str(i). Aucune reproduction.developpez.zfill(3) for i in range(1000): print str(i). documents et images sans l'autorisation expresse de Developpez LLC. même partielle.rjust( width[.26 Les sources présentées sur cette pages sont libres de droits. et vous pouvez les utiliser à votre convenance.ljust( width[.com/faq/ . '0') La fonction s.rjust(3. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Tout droits réservés Developpez LLC. celleci est retournée telle quelle. Si la chaînes de caractère a une longueur inférieure à width. il vous suffit d'utiliser la fonction s. Pour cela. Problèmatique: vous souhaitez gérer un compteur avec nombre de chiffres constants (donc en affichant des "0" à gauche des nombres ne possédant pas assez de chiffres). Copyright © 2005-2009 Developpez LLC. Si vous avez une chaîne normale dont vous connaissez l'encodage. encoding [. vous pouvez directement le faire en rajoutant en ajoutant le caractère u devant la chaîne .. documents et images sans l'autorisation expresse de Developpez LLC. a = u'a\xe2' print isinstance(a. classinfo) renvoie True si l'objet object est une instance de la classe classinfo ou d'une classe dérivée.decode('utf-8') ## uni2 = u'\xe2\xe4\xe0\xe9\xe8\xeb\xea' Si vous utilisiez un autre encodage.com/faq/ . unicode) ## True Comment convertir une chaîne normale en chaîne unicode ? Auteurs : Guigui_ . vous pouvez la transformer en chaîne unicode par la fonction unicode( [object[. ne peut être faite de ce site et de l'ensemble de son contenu : textes. http://python. utf-8. l'encodage d'interprétation de object. 'ascii') génèrera une erreur) ou bien une chaîne unicode ne décrivant par la chaîne spécifiée (unicode(strutf8. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. errors]]]) où object est la chaîne à convertir et encoding. La méthode isinstance( object. et vous pouvez les utiliser à votre convenance. Comment savoir si une chaîne de caractères est de type str ou unicode ? Auteurs : Guigui_ . Copyright © 2005-2009 Developpez LLC. . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.27 Les sources présentées sur cette pages sont libres de droits.developpez. Ils en existent de nombreux comme l'ascii (7 bits) qui est l'encodage par défaut de Python. errors]]) appliquée à un objet de type str strutf8 = '\xc3\xa2\xc3\xa4\xc3\xa0\xc3\xa9\xc3\xa8\xc3\xab\xc3\xaa' ## chaîne "âäàéèëê" encodée en utf-8 uni = unicode(strutf8. ISO-8859-1 (ou latin_1 sur 8 bits) pour les langues occidentales.FAQ Python Sommaire > Type de données > Les chaînes de caractères > Les chaînes Unicode Quel est la différence entre une chaîne unicode et une chaîne normale ? Auteurs : Guigui_ . Tout droits réservés Developpez LLC. Vous pouvez transformer une chaîne normale en chaîne unicode et vice versa. même partielle. Les chaînes normales décrites par le type str sont des chaînes d'octets qui peuvent être interprétées en connaissant leur encodage. Aucune reproduction. Les chaînes unicode décrites par le type unicode permette de définir tout caractère existant où chaque caractère nécessite plusieurs octets pour être codées (2 octets pour Python qui utilise unicode UCS2). utf-16. Vous pouvez également utiliser la méthode decode( [encoding[.. Si vous voulez convertir une chaîne de caractères non contenue dans une variable en chaîne unicode. 'utf-8') ## uni = u'\xe2\xe4\xe0\xe9\xe8\xeb\xea' uni2 = strutf8. vous pourriez obtenir une erreur (unicode(strutf8. Les chaînes unicode sont reconnaissables par la présence du caractère u devant la chaîne. 'latin_1') ). FAQ Python uni = u"âäàéèëê" ## u'\xe2\xe4\xe0\xe9\xe8\xeb\xea' Comment convertir une chaîne unicode en chaîne normale ? Auteurs : Guigui_ . documents et images sans l'autorisation expresse de Developpez LLC. même partielle.errors]]) où encoding est l'encodage souhaité pour la chaîne normale créée. Vous pouvez connaître l'encodage par défaut dans lequel Python encodera vos chaînes contenant des caractères spéciaux par l'attribut sys. Tout droits réservés Developpez LLC.stdin. http://python. Si vous avez une chaîne unicode.com/faq/ . ne peut être faite de ce site et de l'ensemble de son contenu : textes.28 Les sources présentées sur cette pages sont libres de droits. sys.encode('utf-8') ## '\xc3\xa2\xc3\xa4\xc3\xa0\xc3\xa9\xc3\xa8\xc3\xab\xc3\xaa' Comment connaître l'encodage par défaut des chaînes de caractères ? Auteurs : Guigui_ . Aucune reproduction.stdin. Les problèmes viennent souvent du fait que l'on définit des chaînes contenant des caractères spéciaux sans que l'on écrive ses caractères spéciaux avec un encodage spécifique (par exemple 'ä' au lieu de '\x84' dans l'encodage cp850).stdin.encoding ## cp1252 sous IDLE. et vous pouvez les utiliser à votre convenance.encoding unicode(machaine. la console interactive Python l'encodage cp850 .developpez. import sys print sys.stdin. a = u'\xe2\xe4\xe0\xe9\xe8\xeb\xea' a. Copyright © 2005-2009 Developpez LLC. vous pouvez facilement la convertir en chaîne normale sous n'importe quel encodage (capable d'interpréter la chaîne unicode) avec la méthode appliquée à une chaîne unicode encode( [encoding[.encoding) ## u'\xe4\xe2' Ainsi la fenêtre interactive d'IDLE utilise l'encodage cp1252. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. cp850 sous la console Python machaine = 'äâ' ## machaine est une chaîne encodée selon l'encodage sys. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.encoding et ainsi facilement la convertir en chaîne unicode. il convient alors d'utiliser le module re et la fonction re. Tout droits réservés Developpez LLC. repl. Comment remplacer un motif d'une chaîne de caractères par un autre string ? Auteurs : Guigui_ .sub("\d".developpez. Copyright © 2005-2009 Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes. a) 'Phrase test avec des nombres comme *** ou ****' >>> re.29 Les sources présentées sur cette pages sont libres de droits. "*". "*".sub("\d+".sub( pattern. string[. pattern est le motif en question dont vous pouvez retrouver la syntaxe dans la Python Library Reference. string est la chaîne à traiter. même partielle. Mais il arrive souvent que l'on veuille plutôt traiter un motif plutôt qu'une sous-chaîne prédéfinie. count. count]) .FAQ Python Sommaire > Type de données > Les chaînes de caractères > Expressions régulières Comment tester la validité de son expression régulière ? Auteurs : Miksimus . indique le nombre d'occurences du motif qui seront substitués (les count premiers). toutes les occurences seront substituées. a) 'Phrase test avec des nombres comme * ou *' lien : Comment remplacer une chaine de caractères par une autre ? . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Il est disponible sous Linux et Windows. Si ce paramètre est omis ou égal à 0. Le logiciel Kodos permet de tester vos expressions régulières.com/faq/ . et vous pouvez les utiliser à votre convenance. >>> import re >>> a = "Phrase test avec des nombres comme 500 ou 2487" >>> re. Pour cela. Son utilisation est très simple et les quelques exemples disponibles vous permettront de comprendre rapidement son fonctionnement. qui est un paramètre facultatif. documents et images sans l'autorisation expresse de Developpez LLC. repl est la sous-chaîne qui sera substituée au motif rencontré. http://python. Aucune reproduction. Enfin. Les chaînes de caractères possèdent une méthode replace qui permettent de remplacer une sous-chaîne par une autre. 6. 7 . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. 6. i[. 6) ## a = [5. 0. 4. 'a'.remove(3) ## a = [5. 3. 35.pop() ## a = [5.35.extend((45.23. et vous pouvez les utiliser à votre convenance.sort() ## a = [0.append(x) : ajoute l'occurence x en fin de liste. 9.1. 45. 'e'.4. Tout droits réservés Developpez LLC.35. 'd'. 'b'. la liste est triée dans l'ordre alphanumérique croissant. l. l.FAQ Python Sommaire > Type de données > Listes Quelles sont les méthodes basiques de l'objet list ? Auteurs : Guigui_ . 9. http://python. 0. ne passer pas par la méthode remove qui est lente mais reconstruisez plutôt entièrement votre liste en omettant les éléments qui ne vous intéressent plus. l.2] Si vous voulez supprimer toutes les occurences d'une valeur dans une liste.insert(i. 12. le dernier élément de la liste est retourné et supprimé l. 'b'. 4. 3. 12 . documents et images sans l'autorisation expresse de Developpez LLC. >>> >>> >>> >>> >>> 2 >>> 2 >>> >>> 'f' >>> >>> >>> a = [5.1. 6. 5. 3. 3. 35)) ## a = [5. l. 7 .count(3) a. l. Le booléan reverse permet de retourner ou non la liste triée dans l'ordre croissant ou décroissant. Les listes sont des objets qui possèdent quelques méthodes très pratiques pour les manipuler: l.sort([cmp[. 45. 7. Cela se fait très facilement avec une liste en intension. key[.reverse() ## a = ['e'.remove(x) : supprime la première occurence de x de la liste. 7 . 5] a. 0. 7] a. 'c'. Si ces paramètres sont omis. 9. 3. même partielle. 7 . 'b'. 3. 45. 'd'. ne peut être faite de ce site et de l'ensemble de son contenu : textes. 4. 'e'] a.15.reverse() : renverse la liste sur place. Aucune reproduction. 'b'. 4. 3. 6. 'c'. 9. 'd'. 'e'] Comment supprimer une occurence dans une liste ? Auteurs : Guigui_ .extend('abcdef') ## a = [5. retourne une erreur si l'élément n'est pas présent dans la liste. 45.4. 35] a. 3. 12 . 12. 'e'. 3.35. l'ensemble de la liste est considéré. l = [1. 9. Vous avez plusieurs manières de supprimer une occurence dans une liste La première façon est d'utiliser la méthode l. Copyright © 2005-2009 Developpez LLC. j]]) : retourne le plus petit k tel que s[k] = x et i<=k<=j. 45. 12. 3. 'c'. 4. 12. 12 .15. 0. 7. l. Si i est omis. 0. 4. 0. 4. l. 3. 'f'] a.15.extend(x) : ajoute chaque élement de la séquence x en fin de liste. 'c'. 'b'.2. 6. 7. x) : insère l'occurence x à la position i. 3.1] try: while True: l.15.developpez.30 Les sources présentées sur cette pages sont libres de droits. Vous pouvez définir votre propre fonction de comparaison en définissant le paramètre cmp.remove(1) except: pass print l ## [5.pop([i]) : retourne l'élément de la position i et le supprime de la liste. 3. 0. 'a'. 'e'] a.index(3) a.remove(x) qui supprime la première occurence x dans la liste l et qui retourne une erreur si l'occurence x n'existe pas dans l. 4. 'd'. reverse]]]) : trie les éléments de la liste sur place. 'd'. 'b'. 'c'.23.com/faq/ . 9. Suppression de la valeur 0 dans une liste . 'a'. 9.5. 3. 0. 9. 'd'. 9. Si i et j sont omis. 15] a. 45. 3. 12 .insert(8.append(15) ## a = [5. 'a'. 'f'] a. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. 15. 35. 'c'. 'a'.count(x) : renvoie le nombre d'occurences x de la liste. 4. retourne une erreur si cette valeur n'est pas présente. 45.35.index(x[. 7. 'a'. 101. >>> import random >>> l = range(100) >>> random. 116. et vous pouvez les utiliser à votre convenance. 118. 32. 121.4. 1.developpez. Copyright © 2005-2009 Developpez LLC. http://python. 3. voici une méthode pour mélanger une liste d'une complexité linéaire (par rapport au nombre d'éléments de la liste).31 Les sources présentées sur cette pages sont libres de droits. 1.randint for i in range(count): j = randint(0. random]) qui permet de mélanger une séquence en place.shuffle(l) Niveau algorithmique. Choupi . On va simplement parcourir tous les élements de la liste et à chaque fois en choisir un autre au hasard et faire l'échange des 2 éléments. 3.join(chr(i) for i in l2) Comment mélanger les éléments d'une liste ? Auteurs : Guigui_ . même partielle. 32. 103.shuffle( x[. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. 2.FAQ Python Suppression de la valeur 0 dans une liste l = 5 * range(4) ## [0.5. 1. Le module random propose la fonction random.com/faq/ . 2.'en'. 1. 0. 3. 2.' '. utilisez le type set qui représente les objets ensembles et qui conserve donc une unique occurence de chaque élément d'une séquence.' '. l = [1. 101] str2 = ''.2. 2. ne peut être faite de ce site et de l'ensemble de son contenu : textes.1] s = set(l) l = list(s) print l ## [1. Si votre liste ne contient que des string.4. 111. 110. 2.join(l) où l représente une séquence. 2. 0.'part'.1. 97. 2. 1.5. 0. Tout droits réservés Developpez LLC. documents et images sans l'autorisation expresse de Developpez LLC. 3. 114.2.' '. Aucune reproduction. 3. 112. 111. il suffira d'utiliser la méthode ''. 3. 111. 2. 32. vous pouvez utilisez toujours cette méthode join tout en traitant chaque élément de la séquence exemple: l1 = ['toto'.23] Comment concaténer les éléments d'une liste dans une string ? Auteurs : Guigui_ . 1. Cette méthode sera de toute façon beaucoup plus longue que l'utilisation de la fonction précédente.1. 1. 3] l = [x for x in l if x!=0] print l ## [1. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. 1. 2. 97. 1. 2. 3. 116. 0. 3.'voyage'] strl1 = ''. Si votre liste contient autre chose que des string.count-1) ## Selection au hasard de l'index d'un element de la liste ## Echange des 2 elements . import random l = range(1000) count = len(l) randint = random.join(l1) l2 = [116.23. 3] Pour ne conserver qu'une seule occurence pour chaque élement de la liste. [1. 0. 0]. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. 0. la sous-liste 5*[0] n'a en fait été créée qu'une seule fois et que chaque sous-liste l[i] (0<=i<=4) pointe ainsi sur la même zone mémoire. 0. 0. Aucune reproduction. Tout droits réservés Developpez LLC. 0. 0. 0. Si vous affecter la liste vide à votre liste ( mylist = [] ). 0. L'objet list ne possède pas de méthode pour vider complètement ses éléments. 0].FAQ Python l[i]. [1. l[i] Comment vider une liste ? Auteurs : Guigui_ . [0. 0]. 0. 0]] Cependant en tenant de modifier un élément de la liste. 0. 0. 0. 0. 0]. 0. ne peut être faite de ce site et de l'ensemble de son contenu : textes. 0]. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. [0. même partielle. http://python. Copyright © 2005-2009 Developpez LLC. 0. 0. 0]. [0.pop() Comment créer une liste de listes de nombres (ou tableau à 2 dimensions) ? Auteurs : Guigui_ . l[j] = l[j]. La méthode intuitive serait la suivante: >>> l = 5 * [5*[0]] >>> l[0][0] = 1 >>> print l [[1. 0]. [1. La méthode la plus simple si vous souhaitez toujour travailler sur la même liste est d'utiliser directement la fonction comme suit: del(mylist[:]) une autre méthode beaucoup moins rapide est d'utiliser la méthode pop dans une boucle while while mylist: mylist. 0. vous créer en faite un nouvel objet. Supposons que nous voulions créer un tableau d'entiers de 5 cases par 5. 0. 0. 0. 0]] Il est à noter que cette méthode ne fonctionne qu'avec des types ou objets immuables (nombres ou chaînes de caractères) mais pas avec des objets. documents et images sans l'autorisation expresse de Developpez LLC. il vous faudra donc passer par 2 étapes: >>> l = 5*[0] ## peu importe ce que l'on met dans cette liste >>> for i in range(len(l)): l[i] = 5*[0] >>> l[0][0]=1 >>> print l [[1. [1. . 0. 0. 0. 0. Pour créer une liste de listes (contenant des éléments initialisés). 0.com/faq/ . et vous pouvez les utiliser à votre convenance. on s'aperçoit que l'affectation s'est faite à plusieurs endroits.32 Les sources présentées sur cette pages sont libres de droits. 0].developpez. ce qui peut poser problème si d'autres références pointent sur ce même objet et que cette particularité est importante dans votre programme. 0. Ceci vient simplement du fait que lors de la création de notre liste de listes. 0. 0. 0. [0. 0. FAQ Python Sommaire > Type de données > Dictionnaire Quelles sont les opérations de base sur l'objet dict ? Auteurs : oiffrig . et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Un dictionnaire permet l'utilisation de la syntaxe x in dic dic = {'prenom': 'Jean'. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. 'tel': '0123456789'.update(dic2) # dic = {'nom': 'Dupond'.com')
[email protected]()) par exemple On peut aussi itérer sur les clés : for cle in dic: print cle. val): Retourne la valeur associée à la clé cle. ces méthodes ne renvoient plus des listes mais des vues. 'prenom': 'JeanPierre'.com/faq/ . http://python.com >>> dic['tel'] = '0123456789' # dic = {'nom': 'Dupond'. 'mail': 'jp@dupond. 'nom': 'Dupond'} if 'tel' in dic: print 'Téléphone:'.com'} >>> dic. ":". 'mail': 'jp@dupond. pour obtenir une liste.get(cle. Copyright © 2005-2009 Developpez LLC. même partielle. elle est créée) del dic[cle]: Supprime la clé cle dic.get('mail'. Tout droits réservés Developpez LLC. dic[cle] .33 Les sources présentées sur cette pages sont libres de droits.clear() # dic = {} Comment tester si une clé existe dans un dictionnaire ? Auteurs : oiffrig . ne peut être faite de ce site et de l'ensemble de son contenu : textes. 'nom': 'Dupond'} >>> print dic['nom'] Dupond >>> print dic. Aucune reproduction. valeur) Attention: Avec Python 3. 'tel': '0123456789'.0.update(dic2): Assigne à dic1 les éléments de dic2 >>> dic = {'prenom': 'Jean'. 'tel': '0123456789'. ou val si la clé n'existe pas dic[cle] = val: Assigne la valeur val à cle (si la clé n'existe pas. '
[email protected](): Vide le dictionnaire dic1. dic[cle]: Retourne la valeur associée à la clé cle dic. Il y a trois méthodes permettant de lister les éléments : • • • dic.developpez.com'} >>> del dic['mail'] # dic = {'nom': 'Dupond'.keys() donne la liste des clés dic.items() donne la liste des couples (clé. dic['tel'] Comment obtenir la liste des éléments d'un dictionnaire ? Auteurs : oiffrig .values() donne la liste des valeurs dic. 'prenom': 'Jean'} >>> dic2 = {'prenom': 'Jean-Pierre'. il faut utiliser list(dict. documents et images sans l'autorisation expresse de Developpez LLC. 'prenom': 'Jean-Pierre'} >>> dic. FAQ Python Quels sont les types de clés que l'on peut utiliser ? Auteurs : oiffrig . tuples. Tout droits réservés Developpez LLC. chaînes de caractères. Copyright © 2005-2009 Developpez LLC. http://python.developpez. Aucune reproduction. documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. et vous pouvez les utiliser à votre convenance. etc. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.34 Les sources présentées sur cette pages sont libres de droits. Les clés d'un dictionnaire doivent être hashables : • • Tous les types immuables de python (numériques. même partielle. mais pas les listes ni les dictionnaires !) Tous les types disposant des méthodes __hash__ et __eq__ ou __cmp__ .com/faq/ . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Aucune reproduction. Copyright © 2005-2009 Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes. même partielle.4) 10 S'il s'agit d'une surcharge de fonctions dont le nombre de paramètres peut varier ainsi que leur type (ou leur sens).2. data def fonctiontest(data): if type(data) == int: _testint(data) elif type(data) == str: _teststr(data) elif type(data) == list: _testlist(data) else: raise AttributeError. data def _testlist(data): print "traitement d'une liste ".2) 10 >>> print somme(1.FAQ Python Sommaire > Les fonctions Comment effectuer une surcharge de fonctions (ou polymorphisme paramétrique) ? Auteurs : Guigui_ . on peut simplement tout d'abord tester le type du paramètre avant d'appeler une autre fonction privée adéquate. il n'est pas possible d'effectuer une surchage de fonctions. produit = 9) 36 . documents et images sans l'autorisation expresse de Developpez LLC.developpez. et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. def _testint(data): print "traitement d'un entier ". somme = 2. "aucun traitement pour le type "+str(type(data)) >>> fonctiontest(1) traitement d'un entier 1 >>> fonctiontest("1") traitement d'un string 1 >>> fonctiontest({}) AttributeError: aucun traitement pour le type <type 'dict'> S'il s'agit d'une surcharge de fonctions dont le nombre de paramètres peut varier.3. Tout droits réservés Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. pour une fonction proposant un paramètre nécessitant un traitement spécial suivant son type. data def _teststr(data): print "traitement d'un string ". on peut dans ce cas utiliser soit un paramètre dictionnaire soit un paramètre de la forme **keys qui permet de passer des paramètres par la syntaxe nomparametre = valeurparametre def calcul(**keys): score = keys['value'] if 'somme' in keys: score += keys['somme'] if 'produit' in keys: score *= keys['produit'] return score >>> print calcul(value = 5. produit = 7) 49 >>> print calcul(value = 4. http://python.3. par exemple. on peut utiliser la syntaxe *args qui permet de passer autant de paramètres supplémentaires par position que l'on veut def somme(*args): return sum(args) >>> print somme(5. On peut toutefois contourner le problème de plusieurs façons dépendant du paramétrage des fonctions que vous souhaitez écrire.35 Les sources présentées sur cette pages sont libres de droits.com/faq/ . Comme tout langage à typage dynamique. . args est la liste des noms des paramètres spécifiés. varargs et varkx correspondent aux noms des arguments * et ** ou bien à None si ceux-ci ne sont pas présents. None. 'arg'.. param2.36 Les sources présentées sur cette pages sont libres de droits. La syntaxe général étant def mafonction(param1. vous pouvez tout de même récupérer le prototype complet de la fonction. même partielle. p2 = 'PPP2'. Un tuple de 4 valeurs est retourné de la forme (args.com/faq/ . il vous faudra passer par le module inspect. documents et images sans l'autorisation expresse de Developpez LLC... ('PPP2'. **keys): . p3 = 'PPP3'. None) inspect. Copyright © 2005-2009 Developpez LLC. p1. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. 'p3']. Tout droits réservés Developpez LLC. http://python. et vous pouvez les utiliser à votre convenance. varkw. ils correspondent aux n derniers éléments listés dans args import inspect def TestInspectFonction(p1. **kwarg ): pass inspect.developpez.getargspec( func) qui renvoie le nom et les valeurs par défaut des arguments de la fonction func. p2. Comment récupérer le prototype d'une fonction ? Auteurs : Guigui_ .getargspec(TestInspectFonction) ## (['p1'.. Enfin defaults est un tuple des valeurs par défaut des arguments ou bien None si il n'y a aucune valeur par défaut de spécifier. 'p2']. **kwarg): pass class TestInspect: def MaFonction(self.MaFonction) ## (['self'. Aucune reproduction. Si ce tuple a n éléments. *arg . kwarg. Si vous avez besoin d'utiliser une fonction et que vous ne connaissez pas les paramètres qu'elle prend. Pour cela. 'p1'. *args. .getargspec(TestInspect. 'p2'. defaults). Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Ce module propose la fonction inspect. 'PPP3')) lien : lien : Python Library Reference: inspect # Inspect live objects Comment obtenir des informations utiles sur l'utilisation d'un objet/module/fonction ? . varargs.FAQ Python On peut bien évidemment mélanger les différentes syntaxe. 'kwarg'. ne peut être faite de ce site et de l'ensemble de son contenu : textes. En revanche. "wb")) .com/faq/ . fileobj étant un fichier ouvert en lecture. Vous pouvez sauvegarder de manière très simples dans des fichiers des objets python basiques ou même des objets que vous auriez vous-mêmes définis.FAQ Python Sommaire > Programmation objet Comment sauvegarder une instance Python dans un fichier ? Auteurs : Guigui_ .load(open("mondico". et vous pouvez les utiliser à votre convenance. documents et images sans l'autorisation expresse de Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes. la méthode seek(0) vous permet de vous placer au début du fichier et la méthode read() de lire le contenu entier du fichier ouvert. . float.read() img1.37 Les sources présentées sur cette pages sont libres de droits. Vous pouvez avoir besoin de travailler sur des objets contenant directement le contenu d'images ou bien de transférer des objets devant travailler sur des images. 'rb') img2. vous pouvez utiliser le module marshal. import marshal import cPickle dico = {} dico['toto'] = [23. il suffit tout d'abord d'ouvrir chaque image en tant fichier binaire grâce à la commande open et le paramètre 'rb' et de les conserver dans une variable ou un autre conteneur (comme une liste ou un dictionnaire). dictionnaires) contenant uniquement des objets de types élémentaires..{'a':5}] marshal.x ## Sauvegarde de l'objet tutu ## Rechargement de l'objet tutu Comment sauvegarder une instance Python contenant des images dans un fichier ? Auteurs : Guigui_ . listes. conteneurs (tuples. Aucune reproduction. 'wb')) ## Sauvegarde du dictionnaire print marshal. Au lieu de devoir ainsi fournir un fichier contenant l'objet et chacune des images dans des fichier séparés ou dans un fichier . Sinon. utilisez le module pickle ou cPickle (qui est beaucoup plus rapide que pickle) La fonction dump(value. Vous devez tout d'abord récupérer et installer la bibliothèque Pil. http://python.'53453'.zip. chaînes de caractères.developpez. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.close() dic = {'img1' : w1. Sauvegarde dans un fichier une instance Python contenant 2 images import cPickle img1 = open('first.dump(dic. S'il s'agit de nombres (int.load(open("toto2")).jpg'.dump(tutu. s'il s'agit d'instances de classe que vous avez vous-mêmes définis. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. open("monfichier". 'rb') img1.x = 5 tutu = toto() cPickle. Tout droits réservés Developpez LLC.dump(dico.seek(0) w2 = img2. vous pouvez alors décider d'utiliser un unique fichier qui peut ainsi faciliter la procédure. si vous travaillez avec des images compressées.jpg'. open("toto2".read() img2. Copyright © 2005-2009 Developpez LLC.seek(0) w1 = img1. open("mondico".. "wb")) print cPickle.close() img2 = open('second. file) où value est l'objet élémentaire à sauvegarder et file est un fichier ouvert en écriture. Pour cela. 'img2': w2} cPickle. La focntion load(fileobj) permet de lire un fichier et retourne l'objet enregistré.). même partielle. le fichier que nous allons créer sera beaucoup plus gros que l'ensemble des fichiers images le constituant. "rb")) ## Rechargement du dictionnaire class toto: def __init__(self): self. FAQ Python Une fois que vous avez récupérer le fichier créé avec cPickle, vous pouvez récupérer en connaissant la structure du fichier les 2 images transmises. Pour cela, on va utiliser le module cStringIO qui permet de lire et de créer des fichiers en mémoire. Par la méthode write, nous allons écrire le contenu de nos variables, se repositionner avec seek(0) au début du fichier. Enfin, nous allon récréer une image grâce à Pil et la fonction Image.open. Recréation des 2 images à partir d'une instance créée avec cPickle import Image, cPickle, cStringIO monobjet = cPickle.load(open("monfichier")) img1 = cStringIO.StringIO() img1.write(monobjet['img1']) img1.seek(0) im1 = Image.open(img1) im1.save('first.jpg') img2 = cStringIO.StringIO() img2.write(monobjet['img2']) img2.seek(0) im2 = Image.open(img2) im2.save('second.jpg') Comment récupérer le nom de la classe d'un objet ? Auteurs : Guigui_ , Vous pouvez récupérer le nom de la classe d'un objet en appliquant à cet objet l'attribut .__class__.__name__ >>> a = 5 >>> a.__class__.__name__ 'int' >>> class toto: pass >>> b = toto() >>> b.__class__.__name__ 'toto' Comment hériter d'un objet immuable ? Auteurs : Guigui_ , Les objets immuables que l'on utilise traditionnellement sont les nombres et les chaînes de caractères. Pour ces objets, on ne peut effectuer un héritage traditionnelle qui utilise la méthode __init__ qui n'a aucune influence sur la valeur retournée par le constructeur dans ce cas-là. Vous devez alors utiliser la méthode __new__(...) comme sur l'exemple suivant. Si vous redéfinissez ensuite des fonctions que la classe parente possède déjà, n'oubliez pas d'utiliser si nécessaire la fonction super(cls, obj) qui permet d'appeler les fonctions de la classe mère sous peine parfois d'obtenir des erreurs de récursion infinie. Etudiez ainsi l'exemple suivant où la classe angle dérive de la classe int en redéfinissant quelques fonctions basiques. Construction d'une classe angle qui donne l'angle principale entre 0 et 360° class angle(int): def __new__(self, n): ## On retourne l'angle principale dans l'intervalle [0;360] return int.__new__(self, n % 360) def __sub__(self, n): ## On calcule la différence de 2 angles en retournant l'angle principal return angle(super(angle, self).__sub__(n)) def __add__(self, n): - 38 Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005-2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python.developpez.com/faq/ FAQ Python Construction d'une classe angle qui donne l'angle principale entre 0 et 360° ## On calcule la somme de 2 angles en retournant l'angle principal return angle(super(angle, self).__add__(n)) A = angle(540) B = angle(- 460) print A, B, type(A), type(B) ## 180 260 <class '__main__.angle'> <class '__main__.angle'> print A - B, type(A - B) ## 280 <class '__main__.angle'> print A + B, type(A - B) ## 80 <class '__main__.angle'> Comment effectuer une surchage d'opérateur ? Auteurs : Guigui_ , En Python, on peut surcharger tous les opérateurs. L'ensemble de ces opérateurs est identique à ceux que l'on retrouve dans le module operator. Ces opérateurs se redéfinissent donc dans une classe de la manière suivante def __operateur__(self, ...): ... Dans l'exemple suivant, nous allons créer une classe Vecteur et définir les opérations habituelles sur un vecteur # -*- coding: cp1252 -*import math class Vector: def __init__(self, x=0, y=0): self.x=x self.y=y def __eq__(self, vB): return (self.x==vB.x) and (self.y==vB.y) ## test l'égalité de 2 vecteurs def __add__(self, vB): return Vector(self.x+vB.x,self.y+vB.y) ## retourne le vecteur somme def __sub__(self, vB): return Vector(self.x-vB.x,self.y-vB.y) ## retourne le vecteur différence def __mul__(self, c): if isinstance(c,Vector): return self.x*c.x+self.y*c.y ## retourne le produit scalaire else: return Vector(c*self.x,c*self.y) ## retourne le vecteur multiplé par un scalaire def __div__(self, c): return Vector(self.x/c, self.y/c) ## retourne le vecteur ayant subi une division scalaire def __abs__(self): return math.hypot(self.x, self.y) ## retourne la norme2 du vecteur def __str__(self): return '('+str(self.x)+','+str(self.y)+')' ## retourne la réprésentation du vecteur sous fo >>> a = Vector(4,5) >>> b = Vector(6,7) >>> print a==b False >>> print a+b (10,12) >>> print a-b (-2,-2) >>> print a*b 59 >>> print abs(a) 6.40312423743 - 39 Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005-2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python.developpez.com/faq/ FAQ Python Sommaire > Gestion Fichier/Répertoire - 40 Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005-2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python.developpez.com/faq/ Copyright © 2005-2009 Developpez LLC. un grand nombre de fonctions sur les fichiers/répertoires sont proposées par les module shutil module os.FAQ Python Sommaire > Gestion Fichier/Répertoire > Prérequis Où trouver de l'aide ? Auteurs : Guigui_ . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. même partielle. documents et images sans l'autorisation expresse de Developpez LLC.41 Les sources présentées sur cette pages sont libres de droits.com/faq/ . Aucune reproduction. et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. module os.path et . Tout droits réservés Developpez LLC. http://python.developpez. 'NEWS.manifest'.exe'.log'.exe. 'Lib'.exe'.exe'.exe'. 'c:\\python24\\psycopg2-wininst. 'psycopg-wininst. ne peut être faite de ce site et de l'ensemble de son contenu : textes. 'c:\\python24\ \Removematplotlib. 'Tools'. 'c:\\python24\\Removepy2exe.manifest'. 'PIL-wininst. 'share'.log'.log'.dll'.exe'.txt'.exe'.exe-wininst. 'c:\\python24\ \Removeboa-constructor.listdir('c:/python24') ['DLLs'.txt'. 'c:\\python24\\py.exe'] On peut également utiliser la fonction glob. 'c:\\python24\\include'.exe.ico'. 'c:\\python24\\msvcp71.glob(path) import glob import os.log'.dll'. 'python.log'.exe'.txt'. 'Removematplotlib.log'. 'c:\\python24\\README. 'libs'.log'.ico'. 'c:\\python24\ \MySQL-python.exe'. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.exe'. 'c:\\python24\\pythonw. 'c:\\python24\\pyc. 'matplotlib-wininst. 'c:\\python24\\Removepsycopg2. 'Doc'. 'w9xpopen.exe-wininst. 'c:\\python24\ \unins000.log'. 'c:\\python24\\numarray-wininst. 'Removekinterbasdb.log'.exe'. 'pythonw. 'msvcr71.exe'. 'pyc. 'numarray-wininst. 'msvcp71. 'kinterbasdb-wininst.txt'. 'c:\\python24\\egenix-mx-base-wininst. 'c:\\python24\\NEWS. documents et images sans l'autorisation expresse de Developpez LLC.exe.log'.log'.exe'. 'c:\\python24\\DLLs'. 'MySQL-python. 'Numeric-wininst. 'c:\\python24\\LICENSE.listdir(path) renvoie une liste contenant les noms de tous les fichiers et répertoires de path >>> import os >>> os.glob(path) qui renvoie une liste contenant le chemin complet des fichiers ou répertoire contenu dans path >>> import glob >>> glob.exe'.exe'.42 Les sources présentées sur cette pages sont libres de droits. 'RemoveNumeric. 'include'.log'. os. Aucune reproduction. 'README. La première méthode utilise la fonction glob.log'.log'. 'c:\\python24\ \matplotlib-wininst. 'Removepywin32. 'c:\\python24\\Removekinterbasdb. 'c:\\python24\\libs'.exe'] Comment lister l'arborescence d'un répertoire ? Auteurs : Guigui_ . 'pythonw.ico'.txt'.com/faq/ .exe'. 'python. 'c:\\python24\\Removenumarray.manifest'.dat'.glob(path) qui va lister le contenu d'un répertoire avec appel récursif aux sous-répertoires Lister l'aborescence d'un répertoire grâce à la fonction glob. 'tcl'. Voici 2 façons de faire.manifest'. 'c:\\python24\\tcl'. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.exe'.txt'.FAQ Python Sommaire > Gestion Fichier/Répertoire > Fichier Comment lister les fichiers/répertoires d'un répertoire ? Auteurs : Guigui_ .glob('c:/python24/*') ['c:\\python24\\boa-constructor-wininst. Copyright © 2005-2009 Developpez LLC.exe'. Tout droits réservés Developpez LLC. 'c:\\python24\\Doc'.developpez. 'Removenumarray. 'pywin32-wininst. et vous pouvez les utiliser à votre convenance. 'RemovePIL.exe'. 'c:\\python24\\msvcr71. Chacune des fonctions retournera la liste des fichiers (avec chemin complet) contenus dans un répertoire ou dans un de ses sous-répertoires.exe'.log'. 'Scripts'. 'c:\ \python24\\share'. 'RemoveMySQL-python.ico'.exe'. 'c:\\python24\\python.log'.log'. 'c:\\python24\\python. 'py. http://python. 'Removepsycopg.exe.exe. 'c:\ \python24\\pythonw. 'c:\\python24\\Removeegenix-mx-base. 'c:\\python24\ \kinterbasdb-wininst. 'c:\\python24\ \RemovePIL.exe. 'LICENSE. 'c:\\python24\\w9xpopen.exe'.dll'. 'c:\\python24\\unins000.dll'. 'c:\\python24\\Tools'.exe'. 'c:\\python24\\py2exe-wininst. 'c:\\python24\\Lib'. même partielle.path . 'c:\\python24\\Scripts'. 'c:\\python24\\RemoveMySQL-python. 'c:\\python24\\PIL-wininst. developpez. Copyright © 2005-2009 Developpez LLC.43 Les sources présentées sur cette pages sont libres de droits. Lister l'aborescence d'un répertoire grâce à la fonction os. dirs. i)) return fichier On peut en profiter pour tester la rapidité des 2 fonctions. et vous pouvez les utiliser à votre convenance.glob(path) def listdirectory(path): fichier=[] l = glob. Utilisation des fonctions import time def compare(path): a = time.isdir(i): fichier.glob(path+'\\*') for i in l: if os.append(i) return fichier La fonction os.append(os. documents et images sans l'autorisation expresse de Developpez LLC.path. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.walk(path) import os. dirs est la liste des sous-répertoires du répertoire root et files est la liste des fichiers du répertoire root. même partielle. http://python.FAQ Python Lister l'aborescence d'un répertoire grâce à la fonction glob. files) dans l'arborescence de path. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Tout droits réservés Developpez LLC.clock() return b-a.extend(listdirectory(i)) else: fichier.clock() listdirectory2(path) c = time.path def listdirectory2(path): fichier=[] for root.com/faq/ .clock() listdirectory(path) b = time. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. files in os. root représente le chemin d'accès du répertoire visité.walk(path): for i in files: fichier. Aucune reproduction. c-b >>>print compare('c:/python24') .walk(path) crée un générateur de triplets (root. dirs.path.join(root. Un triplet est généré par répertoire visité. documents et images sans l'autorisation expresse de Developpez LLC..path propose plusieurs fonctions simples d'utilisation pour récupérer les parties d'un nom de fichier: Fonctions pour récupérer des les différentes parties d'un nom de fichier • dirname(path): retourne le répertoire associé au path • basename(path): retourne le nom simple du fichier (extension comprise) • split(path): retourne le couple (répertoire. Le module os. os.FAQ Python Utilisation des fonctions (1.developpez. Copyright © 2005-2009 Developpez LLC. dst) permet de renommer le fichier de chemin src en le fichier de chemin dst. Comment savoir si un chemin représente un fichier ? Auteurs : Guigui_ .move(src..44 Les sources présentées sur cette pages sont libres de droits.rename.rename(src. vous pouvez utiliser aussi bien les fonctions os. Tout droits réservés Developpez LLC. os. il suffit d'utiliser la fonction os. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.com/faq/ .path. et vous pouvez les utiliser à votre convenance. Enfin shutil.0782314512039937.renames le fichier src en dst si le fichier de destination est sur le même système de fichiers.remove(path) où path réprésente le chemin d'accès au fichier. dst) permet de renommer le fichier src en dst tout en créant si nécessaire les répertoires contenant le fichier de destination. os. lien : lien : lien : Comment renommer/déplacer un répertoire ? Python Library Reference: Files and Directories Python Library Reference: shutil -. les 2 autres fonctions pouvant échouer à leur tâche. le répertoire contenant le fichier de destination doit cependant déjà exister. Autrement elle copie simplement src sur dst puis efface src Si le fichier de destination se trouve sur le même système de fichiers. Pour supprimer un fichier.renames(src.path. Comment renommer/déplacer un fichier ? Auteurs : Guigui_ .0392410208560028) ## les 2 fonctions se valent. chemin du fichier sans le lecteur) .move. os.getsize(path) renvoie la taille du fichier path Comment supprimer un fichier ? Auteurs : Guigui_ .isfile(path) renvoie True si path désigne un fichier existant Comment connaître la taille d'un fichier ? Auteurs : Guigui_ .High-level file operations Comment manipuler les différentes parties d'un nom de fichier ? Auteurs : Guigui_ .move sinon préférez shutil. une erreur étant sinon retournée. dst) renomme exactement comme os.renames que shutil. Aucune reproduction. 1. os. nom du fichier) • splitdrive(path): retourne le couple (lecteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. même partielle. http://python. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.path.exe') >>> os.exe') >>> os.com/faq/ .splitext('c:\\python24\\python.45 Les sources présentées sur cette pages sont libres de droits.path.exe') ('c:'.split('c:\\python24\\python. extension) splitunc(path): retourne le couple (unc. Aucune reproduction.developpez. '\\python24\\python.exe' >>> os. ne peut être faite de ce site et de l'ensemble de son contenu : textes.exe') ('c:\\python24'.path. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. '.path.FAQ Python • • splitext(path): retourne le couple (chemin du fichier sans l'extension.exe') ('c:\\python24\\python'. Tout droits réservés Developpez LLC.path.splitdrive('c:\\python24\\python.exe') >>> os.basename('c:\\python24\\python.py') .py') ('\\\\host\\python24'.splitunc(r'\\host\python24\lib\ftplib.path. même partielle.dirname('c:\\python24\\python. 'python.exe') 'python. '\\lib\\ftplib. http://python. documents et images sans l'autorisation expresse de Developpez LLC.exe') 'c:\\python24' >>> os. Copyright © 2005-2009 Developpez LLC. rest) où unc est du type \\host\répertoire partagé et rest le reste du path (cette fonction n'est valable que sous Windows) >>> import os.path >>> os. et vous pouvez les utiliser à votre convenance. mkdir(path.move sinon préférez shutil. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.rename. tous les répertoire parent de dst doivent cependant déjà exister.move. même partielle.developpez.46 Les sources présentées sur cette pages sont libres de droits. il suffit de le parcourir son arborescence en ajoutant la taille de chaque fichier rencontré. os. vous pouvez utiliser aussi bien les fonctions os. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Aucune reproduction. Copyright © 2005-2009 Developpez LLC. os. on utilise la fonction shutil.High-level file operations Comment connaître la taille d'un répertoire ? Auteurs : Guigui_ . documents et images sans l'autorisation expresse de Developpez LLC.renames que shutil. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Pour connaître la taille d'un répertoire. lien : lien : lien : Comment renommer/déplacer un fichier ? Python Library Reference: Files and Directories Python Library Reference: shutil -.rmdir(path) supprime le répertoire path si celui-ci est vide Pour supprimer un répertoire non vide.makedirs(path. mode=0777) crée tous les répertoires de path n'existant pas Comment supprimer un répertoire ? Auteurs : Guigui_ .isdir(path) renvoit True si path désigne un répertoire existant Comment créer un répertoire ? Auteurs : Guigui_ . dst) permet de renommer le répertoire src en dst tout en créant si nécessaire les répertoires parent du répertoire de destination. dirs. Autrement elle copie simplement src sur dst puis efface src Si le répertoire de destination se trouve sur le même système de fichiers. os. et vous pouvez les utiliser à votre convenance. Tout droits réservés Developpez LLC. os. http://python. Enfin shutil. os.path def sizedirectory(path): size = 0 for root.com/faq/ . une erreur étant sinon retournée.renames le répertoire src en dst si le répertoire de destination est sur le même système de fichiers.FAQ Python Sommaire > Gestion Fichier/Répertoire > Répertoire Comment savoir si un chemin représente un répertoire ? Auteurs : Guigui_ .move(src. les 2 autres fonctions pouvant échouer à leur tâche. mode=0777) créé un répertoire le plus à droite dans path os.renames(src.path. os.walk(path): . import os. dst) permet de renommer le répertoire src en le répertoire dst. dst) renomme exactement comme os.rename(src. files in os.rmtree(path) Comment renommer/déplacer un répertoire ? Auteurs : Guigui_ . FAQ Python for fic in files: size += os.developpez. http://python.path. fic)) return size print sizedirectory("c:/python25") lien : lien : Comment connaître la taille d'un fichier ? Comment lister l'arborescence d'un répertoire ? . Tout droits réservés Developpez LLC. Copyright © 2005-2009 Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.getsize(os.path.com/faq/ . Aucune reproduction. et vous pouvez les utiliser à votre convenance. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.47 Les sources présentées sur cette pages sont libres de droits.join(root. ne peut être faite de ce site et de l'ensemble de son contenu : textes. même partielle. documents et images sans l'autorisation expresse de Developpez LLC. Aucune reproduction. documents et images sans l'autorisation expresse de Developpez LLC.com/faq/ . ne peut être faite de ce site et de l'ensemble de son contenu : textes. http://python. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.developpez.48 Les sources présentées sur cette pages sont libres de droits. et vous pouvez les utiliser à votre convenance. Tout droits réservés Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. même partielle.FAQ Python Sommaire > Gestion Fichier/Répertoire > Fichiers de configuration . Copyright © 2005-2009 Developpez LLC. nous sommes obligés de lire le contenu entier du fichier. documents et images sans l'autorisation expresse de Developpez LLC.strip()]=sp[1]. Libre à vous ensuite de passer d'un dictionnaire à une liste de variables dicoval={} ## dictionnaire dans lequel on introduit les paires variables/valeurs path = open('conf. On permet d'utiliser des commentaires (##). ## Commentaire variable1 = value1 variable2 = value2 . Ceux si peuvent être soit placés en début de ligne soit après une ligne variable=valeur.txt'. et vous pouvez les utiliser à votre convenance. Copyright © 2005-2009 Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Le principe est de lire le contenu entier du fichier puis de traiter ligne par ligne..FAQ Python Sommaire > Gestion Fichier/Répertoire > Fichiers de configuration > Fichiers variable=valeur Quel est la structure d'un fichier variable=valeur ? Auteurs : Guigui_ .com/faq/ . http://python.close() ## Fermeture du fichier de configuration On peut ensuite traiter le dictionnaire pour pouvoir accéder directement aux variables sans passer par le dictionnaire ## pour un traitement automatique ou si on ne connaît pas à l'avance le nom des variables for i in dicoval: exec(i + '=' + str(dicoval[i])) ## si on connaît le nom des variables variable1 = dicoval['variable1'] variable2 = dicoval['variable2'] . conf. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.'rb') ## Ouverture du fichier de configuration en mode lecture lignes = path.split('#')[0] ## Elimination des commentaires potentiels sp = sp.developpez. La manière la plus simple de créer un fichier de configuration est la suivante: une suite de lignes "variable = valeur.readlines() ## Récupération du contenu du fichier ## Traitement ligne par ligne for lig in lignes: sp = lig. c'est qu'il s'agit d'une ligne vide ou qu'avec des if len(sp)==2: dicoval[sp[0]. Dans le cas d'un tel type de fichiers.. Celles-ci sont introduit dans un dictionnaire.strip() path. Aucune reproduction. même partielle. ## commentaire1 ## commentaire2 Comment récupérer le contenu d'un fichier variable=valeur ? Auteurs : Guigui_ . Tout droits réservés Developpez LLC. si elle n'est pas égale à 2.txt ## Voici un exemple d'un fichier de configuration variable1 = 10 ## un integer variable2 = Guigui ## un string Voici un exemple pour récupérer les variables/valeurs.49 Les sources présentées sur cette pages sont libres de droits. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.split('=') ## Séparation variable / valeur ## on teste la longueur de sp. option) pour les clés de type float cp.set(section.add_section('Section String') config.set('Section String'. On peut utiliser 4 méthodes dépendantes du type de la clé: • • • • cp. Aucune reproduction. 'MonString') config.getfloat( section. 100) config.cfg gérés par ConfigParser ? Auteurs : Guigui_ . même partielle.cfg ? Auteurs : Guigui_ . Les lignes commençants par le caractère # ou . value) permet de rajouter la clé option à la section existante section avec la valeur value La fonction cp. option) pour les clés de type string cp. La documentation officielle est largement suffisante pour utiliser ce module: ConfigParser Quelle est la structure des fichiers .50 Les sources présentées sur cette pages sont libres de droits. option) pour les clés de type boolean .FAQ Python Sommaire > Gestion Fichier/Répertoire > Fichiers de configuration > ConfigParser Où trouver de l'aide pour ConfigParser ? Auteurs : Guigui_ .ConfigParser permet de déclarer notre objet La fonction cp.cfg ? Auteurs : Guigui_ .com/faq/ . et vous pouvez les utiliser à votre convenance.getint( section. Tout droits réservés Developpez LLC.get( section. Copyright © 2005-2009 Developpez LLC. sont ignorées. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. La structure des fichiers est la suivante: [Section1] NomDeClé1 : Valeur1 NomDeClé2 = Valeur2 [Section2] NomDeClé3 : Valeur3 .'w')) Comment lire une clé d'un fichier . http://python..write(fileobject) permet de sauvegarder la structure import ConfigParser config = ConfigParser.write(open('conf. documents et images sans l'autorisation expresse de Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. 'str1'.ConfigParser() config.add_section('Section Integer') config. 'int1'. La fonction ConfigParser.add_section(section) permet de rajouter une section à notre structure La fonction cp. Comment créer la structure d'un fichier . option) pour les clés de type integer cp.cfg'..getboolean( section.developpez. option.set('Section String'. ne peut être faite de ce site et de l'ensemble de son contenu : textes. 'int1') monstring = config.cfg') monint = config. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.getint('Section Integer'.developpez. même partielle. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.get('Section String'.51 Les sources présentées sur cette pages sont libres de droits. et vous pouvez les utiliser à votre convenance. documents et images sans l'autorisation expresse de Developpez LLC. Aucune reproduction. Copyright © 2005-2009 Developpez LLC. http://python. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Tout droits réservés Developpez LLC.com/faq/ .FAQ Python config. 'str1') .read('conf. zipfile.write(i) pour stocker les chemins complets zfile = zipfile. compression représente le mode de compression ZIP et aura pour valeur ZIP_STORED ou ZIP_DEFLATED. compression[.path. La deuxième fonction est la méthode z.ZipFile(filezip.path import glob def zipdirectory(filezip. mode. Tout droits réservés Developpez LLC. et vous pouvez les utiliser à votre convenance.ZipFile(filezip.FAQ Python Sommaire > Gestion Fichier/Répertoire > Compression/Archive Comment compresser un répertoire dans une archive ZIP ? Auteurs : Guigui_ . le mode d'ouverture du fichier.namelist() et de copier chaque fichier de cette archive dans un nouveau fichier que l'on crée.52 Les sources présentées sur cette pages sont libres de droits. i ) else: print i zfile. La première fonction zipfile. allowZip64]]]) où file est le nom du fichier de l'archive à créer. donc ici 'w' (ou 'a' si l'archive existe déjà et que vous voulez la compléter). Vous utiliserez 2 fonctions de ce module. ne peut être faite de ce site et de l'ensemble de son contenu : textes.zip'.developpez.isdir(i): ## S'il s'agit d'un repertoire. Il vous faudra également parcourir l'arborescence du répertoire afin d'ajouter chaque fichier dans l'archive.isdir(i): _zipdirectory(zfile. documents et images sans l'autorisation expresse de Developpez LLC.'w'.write( filename[. http://python.write(i.com/faq/ .ZipFile( file[. Pour décompresser une archive ZIP. pathzip) zfile. on se contente de creer le dossier try: os. i[lenpathparent:]) ## zfile. il suffit de parcourir l'ensemble des fichiers de l'archive donnée par z. La méthode z.path os glob def dezip(filezip. 'r') permet d'ouvrir une archive ZIP en mode lecture.sep + i) except: pass else: .close() zipdirectory('python25.makedirs(pathdst + os. mode[. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. pathdst = ''): if pathdst == '': pathdst = os. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. 'r') for i in zfile. Pour manipuler les archives ZIP. arcname[.getcwd() ## on dezippe dans le repertoire locale zfile = zipfile. 'c:/python25') lien : lien : Comment lister l'arborescence d'un répertoire ? Python Library Reference Comment dézipper une archive ZIP ? Auteurs : Guigui_ .path.namelist(): ## On parcourt l'ensemble des fichiers de l'archive print i if os.ZIP_DEFLATED) _zipdirectory(zfile. arcname le chemin d'accès du fichier lors de la décompression (par défaut identique à filename). il vous faudra passer par le module zipfile. Zip du répertoire c:/python25/ import zipfile import os. compress_type]]) où filename est le chemin du fichier à compresser.glob(path+'\\*'): if os.ZipFile(file. Aucune reproduction.read(name) permet de lire le contenu du fichier name de l'archive import import import import zipfile os. path): for i in glob. Copyright © 2005-2009 Developpez LLC. même partielle.compression=zipfile. pathzip): lenpathparent = len(pathzip)+1 ## utile si on veut stocker les chemins relatifs def _zipdirectory(zfile. 'python25') . http://python.write(data) ## ajout des donnees du fichier compresse dans le fichier local fp.makedirs(pathdst + os. documents et images sans l'autorisation expresse de Developpez LLC.sep + i. Copyright © 2005-2009 Developpez LLC.sep + os.53 Les sources présentées sur cette pages sont libres de droits.read(i) ## lecture du fichier compresse fp = open(pathdst + os.zip'. même partielle.developpez. Tout droits réservés Developpez LLC.path. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.dirname(i)) except: pass data = zfile. "wb") ## creation en local du nouveau fichier fp. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.com/faq/ . et vous pouvez les utiliser à votre convenance.close() dezip('python25. ne peut être faite de ce site et de l'ensemble de son contenu : textes.close() zfile. Aucune reproduction.FAQ Python try: os. Cette fonction retourne le handle de la clé ouverte. la sous-clé à ouvrir. value_name) où key est une clé déjà ouverte et value_name le nom de la valeur à lire. Cette fonction ne peut pas supprimer une clé qui possède des sous-clés import _winreg _winreg. Pour lire une valeur. documents et images sans l'autorisation expresse de Developpez LLC. Aucune reproduction. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Cette fonction retourne un couple où le premier élément est la valeur de la donnée et le deuxième un entier donnant le type de la donnée. sub_key[.developpez. même partielle. http://python. Le module _winreg permet d'accéder aux bases de registre sous Windows.QueryValueEx( key. on utilise la fonction _winreg. 'Software\\MonProg'. res = 0][. Tout droits réservés Developpez LLC. La constante KEY_SET_VALUE permettra de modifier la clé en question alors que KEY_READ ne permettra d'accéder à cette clé qu'en lecture seule.KEY_READ) (valeur. Python Library Comment créer une clef ? Auteurs : Guigui_ .CreateKey(_winreg. 'Software\\MonProg') Comment ouvrir une clef et lire/modifier/supprimer une valeur ? Auteurs : Guigui_ . 'Software\\MonProg') Comment supprimer une clef ? Auteurs : Guigui_ . Copyright © 2005-2009 Developpez LLC. import _winreg key = _winreg.HKEY_CURRENT_USER.OpenKey( _winreg. on utilise la fonction _winreg. et vous pouvez les utiliser à votre convenance.typevaleur) = _winreg.0.'MaDonnee') _winreg.QueryValueEx(key. Vous trouverez dans la reference l'aide suffisante pour manipuler la base de registre.com/faq/ .DeleteKey( key. Cette fonction retourne le handle de la clé. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. sub_key.OpenKey( key.CreateKey( key. sub_key) où key est une clé déjà ouverte ou une constante HKEY_* prédéfinie et sub_key représente la sous-clé qui sera supprimée. Pour créer une nouvelle clé au registre on utilise la méthode _winreg. sub_key) où key est une clé déjà ouverte ou une constante HKEY_* prédéfinie et sub_key représente la sous-clé qui sera créée. Pour ouvrir une clé. Pour supprimer une clé au registre on utilise la méthode _winreg. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. import _winreg key = _winreg. typevaleur . sam = KEY_READ]) où key est une clé déjà ouverte où une constante du type HREF_*.CloseKey(key) print valeur.DeleteKey(_winreg. res un entier qui doit rester à 0 et sam un entier qui définit le masque d'accès.HKEY_CURRENT_USER.54 Les sources présentées sur cette pages sont libres de droits.FAQ Python Sommaire > Base de registre sous Windows Où trouver de l'aide pour accéder aux bases de registre ? Auteurs : Guigui_ .HKEY_CURRENT_USER. _winreg. Tout droits réservés Developpez LLC.0. 'MaDonnee'. Copyright © 2005-2009 Developpez LLC. Aucune reproduction.HKEY_CURRENT_USER. même partielle.CloseKey(key) Constante REG_BINARY REG_DWORD REG_DWORD_LITTLE_ENDIAN REG_DWORD_BIG_ENDIAN REG_EXPAND_SZ REG_LINK REG_MULTI_SZ REG_NONE REG_RESOURCE_LIST REG_SZ Description Donnée binaire de n'importe quel forme Un nombre sur 32 bits Un nombre sur 32 bits au format littleendian Un nombre sur 32 bits au format big-endian String référençant une variable d'environnement Un lien symbolique Une séquence de string Type sans valeur définie Une liste de ressources Un string Pour supprimer une valeur. type. 'MaDonnee') _winreg.com/faq/ . import _winreg key = _winreg.OpenKey( _winreg. value) import _winreg key = _winreg.DeleteValue( key.0. et vous pouvez les utiliser à votre convenance.developpez. documents et images sans l'autorisation expresse de Developpez LLC.55 Les sources présentées sur cette pages sont libres de droits. 0. 5) _winreg.KEY_SET_VALUE) _winreg.OpenKey( _winreg. ne peut être faite de ce site et de l'ensemble de son contenu : textes. on applique la fonction SetValueEx( key. _winreg. reserved peut être n'importe quoi (c'est toujours 0 qui est transmis).DeleteKey(key. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.KEY_SET_VALUE) _winreg. http://python.CloseKey(key) . 'Software\\MonProg'.HKEY_CURRENT_USER. _winreg. reserved.REG_DWORD. value) sur la key précédente où value_name représente le nom de la valeur.SetValueEx(key. _winreg.FAQ Python Pour modifier une valeur. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. on exécute la fonction _winreg. 'Software\\MonProg'. type est un entier (dont les valeurs possibles sont données dans le tableau ci-dessous) représentant le type de la donnée et value la valeur de la donnée en question. value_name. définissez une méthode stop qui met simplement le paramètre Terminated à True. nom = ''): threading.nom = nom self.sleep(2. target est la fonction appelée par le Thread. même partielle.nom +" s'est termine proprement" def stop(self): self. Pour arrêter le thread.developpez. name=None. import threading import time class Affiche(threading.Terminated: print self. {'nom':'thread b'}) a. args=().). Aucune reproduction.start() b. name est le nom du Thread.nom. kwargs={}) où : • • • • • group doit rester à None.Terminated = False def run(self): i = 0 while not self.Terminated = True . nom = ''): for i in range(nb): print nom. Vous retrouvez un tel exemple avec la classe Affiche.start() Comment arrêter définitivement un Thread ? Auteurs : Guigui_ . Vous pouvez ajouter ou non un timer dans la méthode run pour que le thread ne monopolise pas toutes les ressources CPU. Il existe pour cela plusieurs méthodes. target=None. le thread se termine._Thread__stop() qui termine l'instruction en cours et tue ensuite le thread.Thread): def __init__(self. L'objectif est donc simplement de tuer le thread lancé. en attendant que la classe ThreadGroup soit implantée.56 Les sources présentées sur cette pages sont libres de droits. (200. on appelle simplement la méthode stop et une fois la boucle while entièrement parcourue. documents et images sans l'autorisation expresse de Developpez LLC.Thread(None. Copyright © 2005-2009 Developpez LLC. http://python. Nous allons ici simplement nous intéresser aux threads ne présentant pas d'accès concurrent à des ressources. il suffit de déclarer une instance par le constructeur threading.FAQ Python Sommaire > Thread Comment utiliser simplement les Thread ? Auteurs : Guigui_ . i i += 1 time. Tout droits réservés Developpez LLC. Wormus . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Les Thread en Python s'utilisent très facilement.com/faq/ . args est un tuple d'arguments pour l'invocation de la fonction target kwargs est un dictionnaire d'argumens pour l'invocation de la fonction target il suffit ensuite pour exécuter le Thread d'appliquer la méthode start() import threading def affiche(nb. et vous pouvez les utiliser à votre convenance. Une deuxième méthode plus propre est de définir un paramètre Terminated initialisé à False et dand la méthode run de lancer une boucle infinie testant le booléen Terminated. i a = threading. (200. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. affiche. Pour cela.Thread( group=None. {'nom':'thread a'}) b = threading. affiche. Une première est d'appeler simplement la méthode MonThread. Enfin.Thread(None. None.0) print "le thread "+self.). Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.__init__(self) self.Thread. None. clock() ## Reste du traitement MyTimer(2. A la création de l'objet. nom = ''): threading.Thread): def __init__(self.Timer sur elle-même. http://python. il n'existe pas d'objet intrinsèque permettant de gérer un timer afin d'exécuter périodiquement un bout de code. vous devez fournir un flottant interval indiquant le temps d'attente (après le lancement de la méthode start()) avant l'exécution de la fonction function lancée avec les arguments args et kwargs.nom +" s'est termine proprement" def stop(self): self.start() b.start() ## verification de la proprete du timer print time.start() c. MyTimer.wait(timeout) bloque le thread pendant la durée timeout où jusqu'au moment où la méthode monevent. ce qui aura pour effet de répéter périodiquement cette fonction._stopevent. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.5) a.Timer( interval.nom = nom self.0): threading. Aucune reproduction. A ma connaissance.start() time.0) L'exemple précédent très simple ne permet pas de stopper et de relancer le Timer à votre guise. ne peut être faite de ce site et de l'ensemble de son contenu : textes. La classe Affiche2 présente un exemple sur ce principe. [tempo])._stopevent = threading. function. class Affiche2(threading.sleep(6.57 Les sources présentées sur cette pages sont libres de droits. En utilisant la classe Event. documents et images sans l'autorisation expresse de Developpez LLC.wait(2._stopevent.developpez.com/faq/ . Vous pouvez alors créer une fonction qui lancera un objet threading. et vous pouvez les utiliser à votre convenance.Event( ) def run(self): i = 0 while not self.stop() Comment créer un Timer ? Auteurs : Guigui_ ._Thread__stop() b.FAQ Python Le problème de la méthode précédente est donc le fait qu'il peut y avoir un laps de temps important entre le moment de la demande de l'arrêt du thread et celui où le thread est réèllement terminé dû à la durée du timer. kwargs={}) de simuler ce comportement.0) print "le thread "+self. .stop() c.set() est appelée.set( ) a = Affiche('Thread A') b = Affiche('Thread B') c = Affiche2('Thread C') a. Copyright © 2005-2009 Developpez LLC. on peut ainsi accélérer l'arrêt du thread car la méthode monevent. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Timer(tempo. args=[].__init__(self) self.isSet(): print self.Thread. import threading import time def MyTimer(tempo = 1. i i += 1 self._stopevent. Tout droits réservés Developpez LLC. même partielle.nom. Il est cependant possible avec la classe threading. Tout droits réservés Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Ce Timer prend en paramètre la période du Timer (tempo)._target = target self. ["MyTimer"]) a._run) self._timer. kwargs={}): self._kwargs) def start(self): self.stop() time. documents et images sans l'autorisation expresse de Developpez LLC.start() Il existe d'autres implémentations de Timer.start() def stop(self): self.start() self._tempo = tempo def _run(self): self. **self. même partielle._timer.0. par exemple la bibliothèque wxPython fournit un objet wx. affiche._target(*self. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts._tempo. time._timer = threading.sleep(5. self.0) print u"Timer relancé" a.sleep(2.cancel() def affiche(unstr): print unstr. target._args = args self.Timer lien : Python Library Reference: Timer Object .start() time. args= []._run) self.coding: cp1252 -*import threading import time class MyTimer: def __init__(self. Copyright © 2005-2009 Developpez LLC.com/faq/ . Vous pouvez alors lancer la fonction par la méthode start() et l'arrêter par la méthode stop() # -*. self. http://python.58 Les sources présentées sur cette pages sont libres de droits.5) print u"Timer arrêté" a.developpez. la fonction à appeler (target) et les arguments à passer à la fonction (une liste args et un dictionnaire kwargs)._args. et vous pouvez les utiliser à votre convenance.clock() a = MyTimer(1.Timer(self._kwargs = kwargs self. tempo. Aucune reproduction._timer = threading.Timer(self. ne peut être faite de ce site et de l'ensemble de son contenu : textes._timer._tempo.FAQ Python Voici un exemple d'une classe gérant un Timer avec possibilité de l'arrêter et de le relancer. vous pouvez interroger une page du type www.gif'.HTTPMessage instance at 0x00B8DBC0>) Comment connaître l'adresse IP de son ordinateur sur le réseau Internet ? Auteurs : Guigui_ . Si vous êtes derrière un routeur. filename[. Cette solution fonctionne aussi si vous êtes directement relié au réseau Internet (sans passer par un routeur). vous pouvez utiliser la fonction urllib. filename le nom du fichier sauvegardé en local.developpez.minidom. data]]]) où url représente le chemin du fichier à télécharger. reporthook[. documents et images sans l'autorisation expresse de Developpez LLC. il y a deux manières de procéder pour connaître l'adresse IP de son ordinateur sur le réseau Internet suivant que son ordinateur est derrière un routeur ou non. et vous pouvez les utiliser à votre convenance.minidom import urllib ## On va ici simplement analyser un fichier xml disponible sur internet qui donne l'adresse IP ipxml = xml.MonIP.59 Les sources présentées sur cette pages sont libres de droits.urlretrieve('http://python.getElementsByTagName('ip')[0].com/faq/ .com qui affiche votre adresse IP externe et ensuite analyser cette page pour récupérer l'adresse IP en question ou bien également d'autres sites qui proposent directement un fichier xml d'où l'on peut encore plus facilement extraire l'information. ne peut être faite de ce site et de l'ensemble de son contenu : textes.gif'.urlretrieve( url[.dom.showmyip. Pour télécharger un fichier d'un site web.org') Comment lire le contenu d'une page web ? Auteurs : Guigui_ . 'c:/cpython. import webbrowser webbrowser. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.com/outils/PythonZope/images/cpython. Aucune reproduction.gif') ('c:/cpython.com/xml/')) myIP = ipxml. http://python.dom.FAQ Python Sommaire > Réseau / Web Comment ouvrir le navigateur internet par défaut ? Auteurs : Guigui_ .urlopen('http://python. Dans le cas où vous êtes derrière un routeur.open('http://python. >>> import urllib >>> urllib.org') strpage=page.nodeValue print myIP . Connaître son adresse IP externe en étant derrière un routeur import xml. Copyright © 2005-2009 Developpez LLC.developpez. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. import urllib page=urllib. l'adresse IP visible depuis Internet est celui du routeur. même partielle.parse(urllib.childNodes[0].urlopen('http://www. <httplib. Tout droits réservés Developpez LLC.read() Comment télécharger un fichier d'un site web ? Auteurs : Guigui_ . None) print info .getaddrinfo(socket. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. documents et images sans l'autorisation expresse de Developpez LLC.developpez.com/faq/ . socktype[. import socket info = socket. et vous pouvez les utiliser à votre convenance. port[. même partielle. Tout droits réservés Developpez LLC. Copyright © 2005-2009 Developpez LLC. family[. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.60 Les sources présentées sur cette pages sont libres de droits. vous récupérer le nom de votre ordinateur puis la fonction socket. flags]]]]) retourne une liste d'informations utiles pour la manipulation de socket dont on peut extraire facilement l'adresse IP que l'on recherche. Par la fonction socket. vous pouvez récupérer très facilement récupérer cette information. Aucune reproduction. ne peut être faite de ce site et de l'ensemble de son contenu : textes. http://python.getaddrinfo( host.FAQ Python Pour connaître l'adresse IP interne de votre ordinateur (si vous êtes derrière un routeur) ou l'IP externe (si vous n'êtes pas derrière un routeur). proto[.gethostname().gethostname(). Tout droits réservés Developpez LLC. http://python. Par exemple.close() print ftp. import ftplib class GDDFTP(ftplib.user = user self. Une instance ftplib.Command(ftp.size(filename) qui renvoie la taille du fichier filename ou bien une erreur si ce fichier n'existe pas ou n'est pas un répertoire.FAQ Python Sommaire > Réseau / Web > FTP Comment gérer les déconnexions intempestives du serveur FTP ? Auteurs : Guigui_ . monpassword) print ftp.FTP qui gère le client FTP. monport.password = password def Reconnect(self): self.FTP): def __init__(self.__init__(self. Nous avons ensuite la fonction Reconnect qui permet la connexion au serveur et la fonction Command(self. '') self.Reconnect() return command(*args) ftp = GDDFTP(monadresse. il arrive parfois qu'une déconnexion survienne (commandé par le serveur ou non).FTP ne possède pas de fonction permettant de savoir directement si un fichier est un répertoire ou non. Copyright © 2005-2009 Developpez LLC.adresse. *args) qui exécute la requête command avec la liste de paramètres donnés par *args en se reconnectant si nécessaire au serveur.Command(ftp. self. command. command. Ceci peut être gênant notamment lorsqu'on veut exécuter de nombreuses actions sans maîtriser le temps entre chaque.login(self. Il n'y a à ma connaissance non plus aucune commande FTP directe qui permettrait de nous l'indiquer. Une méthode serait de se reconnecter à chaque fois avant d'exécuter une requête sur le serveur. monfichier) Comment savoir si un fichier représente un répertoire sur un serveur FTP ? Auteurs : Guigui_ .FTP.size(MyPath) ## Traitement si c'est un fichier except: ## Traitement si c'est un répertoire . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Toutes ces méthodes ne fonctionnent aussi que si vous avez les droits d'accès à ces dossiers ou fichiers. Cette classe hérite de ftplib.61 Les sources présentées sur cette pages sont libres de droits. port.size. ce qui arrive souvent lorsque l'on reste trop longtemps connecté à un serveur sans rien faire.port) ## Recherche FTP self. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.adresse = adresse self.port = port self. Aucune reproduction. Une autre façon de faire est de se créer une petite classe qui va gérer la reconnexion quand la connexion est perdu au moment de l'exécution de la requête. *args): try: return command(*args) except: self. try: ftp. ne peut être faite de ce site et de l'ensemble de son contenu : textes. user. vous pouvez demander la taille du fichier par la commande ftp.developpez. self. password): ftplib.user.password) ## Connexion def Command(self.com/faq/ .size. documents et images sans l'autorisation expresse de Developpez LLC. Une méthode pour obtenir cette information consiste alors en la génération d'une erreur en fonction de la présence d'un fichier ou répertoire avec certaines requêtes. même partielle.connect(self. et vous pouvez les utiliser à votre convenance. Quand vous manipulez un objet FTP et que vous vous connectez à un serveur FTP. monlogin. adresse. monfichier) ftp. Copyright © 2005-2009 Developpez LLC. il vous suffit d'utiliser la commande ftp. même partielle. maxblocksize[. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.com/faq/ . callback[.').connect(monadresse. file le chemin d'accès du fichier à transférer ouvert en lecture binaire et blocksize la taille des blocks transférés au serveur (on se contente généralement de la valeur par défaut).cwd( pathname) qui générera une erreur si pathname ne représente pas un répertoire. import ftplib ftp = ftplib. Tout droits réservés Developpez LLC. DiGiTAL_MiDWAY . blocksize = 8192) où command est une chaîne de caractères en général du type "STOR CheminFichierSurServeur" (CheminFichierSurServeur étant le fichier (accompagné de son chemin d'accès) qui sera créé sur le serveur).cwd('. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.nlst(path) renvoie la liste des fichiers/répertoires de path.developpez.retrbinary( command. il vous suffit de parcourir récursivement chaque sous-dossier et de télécharger chaque fichier trouvé. vous pourrez remédier à cela. ftp. il suffit d'appliquer la méthode ftp.cwd( pathname) où pathname est le chemin relatif ou absolu du répertoire souhaité. rest]]) où command doit être du type 'RETR filename' et callback est un fichier ouvert en écriture. 'rb')) Comment télécharger les fichiers d'une arborescence d'un répertoire? Auteurs : Guigui_ .") ## Traitement si c'est un répertoire except: ## Traitement si c'est un répertoire Comment se déplacer dans l'arborescence d'un serveur FTP ? Auteurs : Guigui_ .cwd(".FAQ Python On peut aussi tenter d'accéder au dossier ftp. Si vous voulez télécharger tous les fichiers d'un répertoire et de ses sous-répertoires. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Aucune reproduction. try: ftp. pathdst): ..FTP('') ftp. Vous pouvez changer le répertoire courant. open(fichieratransferer.storbinary('STOR fichiersurserveur'.size(path) permet de savoir si le fichier path étudié est un fichier ou un répertoire. file.62 Les sources présentées sur cette pages sont libres de droits. La fonction ftp.sendcmd('CDUP') Comment envoyer un fichier sur un serveur FTP ? Auteurs : Guigui_ . On peut également utiliser directement une commande FTP avec la méthode ftp. et vous pouvez les utiliser à votre convenance. En suivant les liens proposés. monport) ftp. Pour envoyer un fichier sur un serveur FTP. Ainsi pour remonter d'un niveau dans l'arborescence des dossiers. il vous faut tout d'abord vous connecter à se serveur puis appliquer la fonction storbinary(command. documents et images sans l'autorisation expresse de Developpez LLC. http://python. ftp.login(monlogin. Il faudra cependant penser à retourner dans le répertoire parent ensuite. monpassword) ftp.cwd(MyPath) ftp. La fonction suivante ne gère pas par contre les déconnexions au serveur.. import os import ftplib def download(pathsrc. login(monlogin. ne peut être faite de ce site et de l'ensemble de son contenu : textes.write) except: try: os. Tout droits réservés Developpez LLC. Copyright © 2005-2009 Developpez LLC.connect(monadresse.size(i) print i ftp.sep+i[lenpathsrc:]. Aucune reproduction. monpassword) download(cheminsource.dirname(i[lenpathsrc:])) except: pass _download(i) _download(pathsrc) ftp = ftplib.sep+os.FTP('') ftp.path. documents et images sans l'autorisation expresse de Developpez LLC. open(pathdst+os. chemindestination) lien : lien : Comment gérer les déconnexions intempestives du serveur FTP ? Comment savoir si un fichier représente un répertoire sur un serveur FTP ? . même partielle. et vous pouvez les utiliser à votre convenance. 'wb').com/faq/ . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.makedirs(pathdst+os.63 Les sources présentées sur cette pages sont libres de droits. monport) ftp. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.nlst(pathsrc) for i in l: try: ftp. http://python.developpez.retrbinary('RETR '+i.FAQ Python lenpathsrc = len(pathsrc) def _download(pathsrc): l = ftp. on trie en place l >>> l ..sort() ## ici..1 (dernier élément).append(5) Traceback (most recent call last): File "<pyshell#12>".developpez. il est donc courant d'utiliser la syntaxe monstring = monstring. in <module> print s[len(s)] IndexError: string index out of range Pourquoi j'obtiens le message AttributeError: 'NoneType' object has no attribute .. il s'agit d'un objet que vous aviez précédemment construit correctement mais auquel vous avez réaffecté une valeur None en lui appliquant une fonction de retour None. Souvent. Mais pour les objets muables.64 Les sources présentées sur cette pages sont libres de droits. pour une liste. même partielle. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. line 1. 4] >>> l. in <module> l. Ce message est obtenu lorsque vous essayer d'accéder à un attribut de type None. Tout droits réservés Developpez LLC. http://python. 4] >>> l = l. 1. 1. ne peut être faite de ce site et de l'ensemble de son contenu : textes. 15] s = "abcde" print l[0]. les chaînes de caractères et les entiers sont des objets immuables. et vous pouvez les utiliser à votre convenance. line 1. on a en fait affecté None à l >>> l. Par exemple.com/faq/ .. ? Auteurs : Guigui_ ... Copyright © 2005-2009 Developpez LLC. ou encore AttributeError: 'int' object has no attribute . Vous pouvez également obtenir des erreurs de même type AttributeError: 'str' object has no attribute . documents et images sans l'autorisation expresse de Developpez LLC. index out of range ? Auteurs : Guigui_ .FAQ Python Sommaire > Les erreurs Pourquoi j'obtiens le message IndexError: ..mafonction() pour pouvoir réaffecter la valeur de retour de mafonction à monstring.sort() va trier la liste malist en place et retourner une valeur de None) >>> l = [5. la fonction malist. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Les séquences sont indexées de 0 (premier élément) à longueur(séquence) .. in <module> print l[6] IndexError: list index out of range >>> print s[3] 'd' >>> print s[len(s)] Traceback (most recent call last): File "<pyshell#4>". qui résulteront de fonctions de retour une chaîne de caractères ou un entier.sort() ## ici.append(5) AttributeError: 'NoneType' object has no attribute 'append' >>> l = [5. 3. l[2] 15 print l[6] Traceback (most recent call last): File "<pyshell#2>". L'erreur de type IndexError intervient lorsqu'on tente d'accéder à un élément d'une séquence n'existant pas. >>> l = [10. ceux-ci possèdent parfois des fonctions qui les modifient directement sans avoir besoin de les réaffecter (par exemple. line 1. >>> >>> >>> 10. Aucune reproduction. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Python est sensible au majuscule/minuscule. ce dernier ne sera pas importé. Choississez donc un nom pour vos fichiers qui soit différent des autres modules existants. Référerez à la Library Reference pour vérifier la disponibilité du module en question.. Cela peut arriver lorsque vous faites des importations directement depuis le shell Python (ou celui d'IDLE par exemple) où le répertoire local n'est souvent pas celui auquel on pense. ? Pourquoi j'obtiens le message AttributeError: 'module' object has no attribute ... S'il s'agit d'une bibliothèque externe. ne peut être faite de ce site et de l'ensemble de son contenu : textes.developpez. La deuxième possibilité est que le module où l'erreur a eu lieu n'est pas celui que vous pensiez avoir importé. lien : Comment importer un module qui n'est pas dans le répertoire courant ? Python Pourquoi j'obtiens le message TypeError: unsupported operand type(s) for .65 Les sources présentées sur cette pages sont libres de droits. Pourquoi j'obtiens le message ImportError: No module named . line 1. Avec un simple print dir(monmodule).. Python est un langage fortement typé. ? Auteurs : Guigui_ .FAQ Python [1. vérifier qu'il est bien présent selon la version de Python que vous utilisez. Pour un module standard... Typiquement. et vous n'êtes plus sûr de celui qui subsistera. . si vous voulez concaténer un nombre et une chaîne de caractères. >>> 5 + 'e' Traceback (most recent call last): File "<pyshell#0>". Python étant sensible à la casse. 4... et vous pouvez les utiliser à votre convenance. ? Auteurs : Guigui_ . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python. cela signifie donc que Python ne cherche pas au bon endroit.com/faq/ . Ce message d'erreur intervient lorsque vous essayer d'effectuer entre 2 objets une opération qui n'est pas supportée.. Faites attention aussi à la casse.. Vous trouverez bon nombres de liens sur notre page Outils Python. Aucune reproduction. Ce message peut intervenir pour deux raisons principales. Il peut enfin s'agir d'un module qui n'est pas disponible sous tous les systèmes d'exploitation. il vous faudra tout d'abord convertir le nombre en chaîne.. vérifiez alors que vous ne vous êtes pas trompé dans l'utilisation des majuscules et minuscules. Ainsi. S'il s'agit d'un de vos propres modules. and . Cela intervient souvent lorsque les objets sont de types différents. vous aurez aussi accès à tous les attributs du module monmodule et vous pourrez alors effectivement vérifier que l'attribut en question n'est pas présent (ou sous une autre orthographe). in <module> 5 + 'e' TypeError: unsupported operand type(s) for +: 'int' and 'str' .. il en existe 2 ayant le même nom.. La première est que vous essayer d'accéder à un attribut du module qui n'existe pas. 5] lien : [Tkinter] Pourquoi j'obtiens le message AttributeError: 'NoneType' object has no attribute . Copyright © 2005-2009 Developpez LLC. c'est à dire qu'il ne modifiera jamais le type d'un objet sauf si une conversion est demandée explicitement. si celui-ci n'est pas installé sur votre ordinateur ou bien que Python n'est pas capable de le trouver à partir des variables d'environnement. Lorsque vous faite une importation d'un module. vous obtiendrez le message d'erreur ImportError: No module named . Il suffit que dans l'ensemble des répertoires dans lequel Python va rechercher les modules à importer. ? Auteurs : Guigui_ . si le nom de votre programme est le même que celui d'un module de la bibliothèque standard. même partielle.: . documents et images sans l'autorisation expresse de Developpez LLC. il vous faudra donc en général télécharger et installer la bibliothèque en question. Tout droits réservés Developpez LLC.. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. documents et images sans l'autorisation expresse de Developpez LLC.66 Les sources présentées sur cette pages sont libres de droits.com/faq/ . même partielle. Copyright © 2005-2009 Developpez LLC.FAQ Python >>> str(5) + 'e' '5e' . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.developpez. Aucune reproduction. ne peut être faite de ce site et de l'ensemble de son contenu : textes. http://python. Tout droits réservés Developpez LLC. et vous pouvez les utiliser à votre convenance. vous avez le choix entre différentes bibliothèques qui vous permettront de construire votre interface. Jython permet de manipuler des objets Java ou encore IronPython permet de s'interfacer avec . vous pourrez toujours en trouver d'autres mais qui sont néanmoins beaucoup moins utilisées que ces quatre-ci. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Tix. Il vous ait donc possible de créer votre interface dans un autre langage tout en programmant en Python. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Aucune reproduction. Tkinter est très bien pour débuter avec les interfaces graphiques en Python ou pour de petites applications qui ne nécessitent pas une interface trop élaborée.. Pour des projets professionnels. wxPython semble la plus portable des 2 et est à préférer pour une utilisation sous Windows. Ensuite on retrouve 2 bibliothèques open source et d'utilisation gratuite pour des projets commerciaux à savoir pyGTK et wxPython. encore. Cette question est assez fréquente. wxWindows C++. http://python. Python s'interface bien avec d'autres langages. vous retrouverez les liens sur la page Outils Python lien : lien : FAQ Tkinter Tutoriel wxPython lien : Tutoriel pyGTK lien : Débat: Quel GUI choisir ? lien : Forum Python GUI . pyQt est gratuit pour les projets libres et payant pour les projets commerciaux. documents et images sans l'autorisation expresse de Developpez LLC. et pyQt. Ces 4 bibliothèques sont des interfaces à respectivement Tcl/ Tk. Vous pourrez les télécharger à partir de notre page Outils Python Comment alors choisir sa bibliothèque ? La plus simple à prendre en main est Tkinter.67 Les sources présentées sur cette pages sont libres de droits. à savoir Tkinter.com/faq/ . la documentation sur Tkinter est très abondantes. et vous pouvez les utiliser à votre convenance. Tkinter reste cependant assez limité en composants graphiques et l'utilisation des widgets fournis n'est pas forcément très habituelle par rapport à ce que l'on retrouve dans toutes les autres. pyQt semble la plus élaborée des 4..Net. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.developpez. Linux et Mac.FAQ Python Sommaire > GUI Quel GUI choisir pour ses interfaces graphiques ? Auteurs : Guigui_ . même partielle. Enfin. Si vous voulez créer une interface graphique en Python pour programmer des logiciels classiques (applications de gestion par exemple). on peut en dénombrer 4 qui sont portables sur Windows. Enfin. par exemple. choississez wxPython sinon pyQt. si vous ne voulez pas vous acquitter d'une licence payante. wxPython. le composant PythonForDelphi permet de créer une interface Delphi et de manipuler des objets Python. Là. livrée dans la distribution Python et qui possède de nombreuses extensions possibles (Pmw. Classiquement. pyGTK. GTK+ et Qt. De plus. Copyright © 2005-2009 Developpez LLC. Tout droits réservés Developpez LLC.). . En recherchant sur Internet. Copyright © 2005-2009 Developpez LLC. et vous pouvez les utiliser à votre convenance.com/faq/ . Tout droits réservés Developpez LLC. même partielle.developpez. documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Aucune reproduction.68 Les sources présentées sur cette pages sont libres de droits. ne peut être faite de ce site et de l'ensemble de son contenu : textes.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw . ils sont maintenant tous regroupés dans un même paquetage nommé tkinter. Copyright © 2005-2009 Developpez LLC. 13-15 Python Library Reference 2. la plupart des modules externes (Pmw.colorchooser tkinter. pour le moment. • • • • • Apprendre à programmer avec Python : chapitres 8. et vous pouvez les utiliser à votre convenance. Python 3 apporte une harmonisation au niveau des modules. . Une documentation complète en anglais est disponible mais vous trouverez également de nombreux cours en français qui vous permettront d'apprendre à construire une interface avec Tkinter. http://python. ne peut être faite de ce site et de l'ensemble de son contenu : textes.0 An Introduction to Tkinter (1999) : documentation exhaustive de Tkinter An Introduction to Tkinter (2005) : en cours de rédaction Quels sont les changements pour Tkinter entre Python 2 et Python 3 ? Auteurs : Guigui_ . Au niveau de Tkinter. Tout droits réservés Developpez LLC. Attention.messagebox tkinter. Le changement majeur entre Python 2 et Python 3 pour Tkinter apparaît donc lors de l'importation des modules.scrolledtext tkinter.developpez.. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.) dépendants de Tkinter n'ont pas encore été mis à jour et ne fonctionneront qu'avec une version 2 de Python. Importation avec Python 2 import import import import import import import import import Tkinter Tix ScrolledText tkColorChooser tkCommonDialog tkFileDialog tkFont tkMessageBox tkSimpleDialog Importation avec Python 3 import import import import import import import import import tkinter tkinter.com/faq/ .simpledialog Prérequis pour les questions suivantes Auteurs : Guigui_ .FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Prérequis Où trouver de l'aide pour Tkinter ? Auteurs : Guigui_ .6 Python Library Reference 3.font tkinter. Aucune reproduction.commondialog tkinter. .tix tkinter.69 Les sources présentées sur cette pages sont libres de droits. documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.filedialog tkinter.. Tous commencent maintenant par une minuscule. même partielle. FAQ Python import import import import Tkinter as Tk tkMessageBox tkFileDialog Tix root=Tk.Tk() ## Création de la fenêtre principale si vous n'utilisez que des objets Tkinter root=Tix.Tk() ## Création de la fenêtre principale si vous utilisez des objets Tix entry=Tk.Entry(root) ## Création d'un Entry button=Tk.Button(root) ## Création d'un Button label=Tk.Label(root) ## Création d'un Label listbox=Tk.Listbox(root) ## Création d'une Listbox canvas=Tk.Canvas(root) ## Création d'un Canvas text=Tk.Text(root) ## Création d'un Text Comment installer la bibliothèque Pmw ? Auteurs : Guigui_ , L'installation est très simple. Vous devez tout d'abord récupérer le zip des sources qui se nomme Pmw.1.3.2.tar.gz. Il suffit ensuite d'extraire les fichiers/répertoires dans le répertoire PythonPath/Lib/site-packages où PythonPath est le répertoire d'installation de Python (par exemple, c:/python26 typiquement sous Windows). Vous pourrez alors vérifier que la bibliothèque est bien installé en testant avec l'interpréteur Python la commande import Pmw. - 70 Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005-2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python.developpez.com/faq/ FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter - 71 Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005-2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python.developpez.com/faq/ FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Widget Comment donner le focus à un Widget ? Auteurs : Guigui_ , w.focus_set() donne le focus au widget w Comment modifier la fonte d'un Widget ? Auteurs : Guigui_ , Le module tkFont fournit une classe Font qui permet de définir les caractéristiques des fontes de n'importe quel widget avec les attributs suivants: attributs de la classe Font • family: 'courier', 'arial', ... • size: integer • slant: NORMAL ou ITALIC • weight: NORMAL ou BOLD • underline: True ou False • overstrike: True ou False La fonction font.config(**font_option) permet de configurer la fonte, les différents attributs étant optionnels. import tkFont fonte = tkFont.Font(root) fonte.config(size=18, family='courier', slant=tkFont.ITALIC, weight=tkFont.BOLD, underline=True, overstrike=True) label.config(font = fonte) Comment afficher une image sur un Widget ? Auteurs : Guigui_ , La classe Tkinter PhotoImage reconnaît les images GIF et PPM. Le fait qu'elle soit utilisée comme option de configuration image d'un widget ne suffit pas à maintenir une instance PhotoImage en vie. Il faut donc s'assurer de conserver ces instances dans un objet conteneur de Python; # -*- coding: cp1252 -*import Tkinter as Tk def imgaffiche(): img = Tk.PhotoImage(file = imgfile) ## Création d'un objet PhotoImage qui reconnait les extensions .gif et .ppm gifsdict[imgfile] = img ## si on commente cette ligne, l'image ne s'affichera pas button.configure(image=img) ## Ajout de l'image sur le bouton ## On pourrait aussi directement faire ## gifsdict[imgfile] = Tk.PhotoImage(file = imgfile) ## button.configure(image = gifsdict[imgfile]) root = Tk.Tk() button = Tk.Button(text = "affiche image", command = imgaffiche) imgfile = strchemin ## strchemin:str, chemin d'accès à l'image - 72 Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005-2009 Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python.developpez.com/faq/ Il faudra également conserver l'image dans un objet conteneur Python pour les mêmes raisons que précedemment. text = "test") label. il suffit d'appliquer la méthode w.mainloop() .pack() root. Aucune reproduction. from PIL import Image.image = photo ## Maintient en vie de photo dans un objet non détruit par le garbage ## pour pas que l'image disparaisse du label label.) soit directement une couleur avec ses composantes RVB en ayant la forme "#RRVVBB" où RR..config(background = NewColor) où NewColor est une chaîne représentant soit un nom de couleur (par exemple "red". Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Tk() monimage = Image.Label(root. http://python.configure(background = "#50A42D") label. et vous pouvez les utiliser à votre convenance.pack() root.Tk() root.com/faq/ . "green". Pour modifier la couleur de fond d'un widget.config (bg = "red") label = Tk.Label(image=photo) ## Insertion de l'image de l label. BB sont des valeur hexadécimales comprises entre 00 et FF import Tkinter as Tk root = Tk. documents et images sans l'autorisation expresse de Developpez LLC. Tout droits réservés Developpez LLC.FAQ Python gifsdict={} ## Utilisation d'un dictionnaire pour conserver une référence sur la PhotoImage créée button..config(bg = NewColor) ou w.73 Les sources présentées sur cette pages sont libres de droits. ne peut être faite de ce site et de l'ensemble de son contenu : textes.open("lena. il vous faudra passer par la bibliothèque PIL qui est capable de lire tout type d'images.jpg") ## Chargement d'une image à partir de PIL photo = ImageTk.PhotoImage(monimage) ## Création d'une image compatible Tkinter label = Tk.mainloop() Comment changer la couleur de fond d'un widget ? Auteurs : Guigui_ . ImageTk ## Importation des modules utiles dans PIL import Tkinter as Tk root = Tk. Copyright © 2005-2009 Developpez LLC. .pack() root.mainloop() Si vous voulez afficher une image autre que GIF ou PPM. VV. même partielle. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.developpez. mainloop() Comment intercepter la fermeture d'une fenêtre ? Auteurs : Guigui_ . handler) où handler est la fonction exécutée lors de la fermeture de la fenêtre. cela n'empêchera pas le redimensionnement automatique de votre fenêtre si vous utilisez le gestionnaire de géométrie pack ou grid Comment afficher une fenêtre en plein écran ? Auteurs : Guigui_ .wm_state(newstate="zoomed").Label(text=0) def go(): for i in range(100000): lbl.pack() btn.protocol("WM_DELETE_WINDOW". http://python. Copyright © 2005-2009 Developpez LLC. en appliquant l'instruction root.com/faq/ .update() btn = Tk. Aucune reproduction. vous pouvez rajouter dans votre programme des appels à root. import Tkinter as Tk root = Tk. Tkinter ne rafraîchit l'interface graphique que lorsque le traitement de l'exécution de la fonction lancée est terminée (par exemple lorsque l'on clique sur un bouton).config(text=i) root.Button(text='go'. height=False) Remarque: en revanche. Si vous voulez éviter ce désagrément. et vous pouvez les utiliser à votre convenance. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Il arrive cependant parfois que la fonction exécutée dure un certain temps qui empêche donc la fenêtre de se redessiner. vous afficherez la fenêtre principale en plein écran.Tk() def Intercepte(): . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Tkinter supporte un mécanisme appelé protocol handlers dont le plus utilisé est le protcole WM_DELETE_WINDOW qui définit ce qui doit se passer quand une fenêtre se ferme. root.resizable(width=False.Tk() lbl = Tk. Tout droits réservés Developpez LLC. Ce protocole doit être associé à un widget de type root ou Toplevel de la manière suivante widget. De manière très simple.update() import Tkinter as Tk root = Tk. Cette instruction ne fonctionne que sous windows Comment forcer le rafraîchissement d'une fenêtre ? Auteurs : Guigui_ . command=go) lbl.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Fenêtre Comment empêcher le redimensionnement d'une fenêtre par l'utilisateur ? Auteurs : Guigui_ .74 Les sources présentées sur cette pages sont libres de droits.pack() root. même partielle. documents et images sans l'autorisation expresse de Developpez LLC.developpez. même partielle. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Copyright © 2005-2009 Developpez LLC. il vous suffit d'appliquer la fonction root.FAQ Python print "Interception de la fermeture de la fenetre" root.title(mytitle) où mytitle est le nouveau texte en question. http://python. vous ne pourrez ni déplacer ni détruire cette fenêtre de manière ordinaire (il faudra donc prévoir dans votre code les fonctions nécessaires pour gérer cela).title('Subroot') btn = Tk.Tk() root.Button(root.pack() root.protocol("WM_DELETE_WINDOW".Tk() def affiche(): .com/faq/ . et vous pouvez les utiliser à votre convenance.ico) import Tkinter as Tk root = Tk.iconbitmap("MyIcon. import Tkinter as Tk root = Tk. Tout droits réservés Developpez LLC.mainloop() Comment modifier l'icône de la barre de titre d'une fenêtre ? Auteurs : Guigui_ . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.Tk() root. vous pouvez lui appliquer la fonction overrideredirect(flag=None) avec un flag ayant une valeur non nulle.mainloop() Comment modifier le texte de la barre de titre d'une fenêtre ? Auteurs : Guigui_ . documents et images sans l'autorisation expresse de Developpez LLC.iconbitmap(myicon) où myicon représente le chemin d'accès de votre icône (testé uniquement avec des fichiers de type . command = createframe) btn. Cela peut être utile par exemple pour afficher une fenêtre contenant un message (une infobulle par exemple).ico") root. Pour modifier le texte de la barre de titre d'un widget de type root ou Toplevel il suffit d'appliquer la fonction w. Pour modifier l'icône de la barre de titre d'une fenêtre root ou toplevel. Aucune reproduction. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.developpez. text = 'create a frame'.destroy() root.Toplevel(root) toplevel. Toutefois. import Tkinter as Tk root = Tk. Si vous avez besoin de créer des fenêtres root (Tk) ou TopLevel.75 Les sources présentées sur cette pages sont libres de droits.mainloop() Comment créer une fenêtre sans barre de titre ni bordure ? Auteurs : airod .title('Main root') def createframe(): toplevel = Tk. Intercepte) root. et vous pouvez les utiliser à votre convenance. Aucune reproduction. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Toplevel() top.Button(root.pack() root. command = affiche) btn.Button(top. text = 'Afficher message'. command = top. http://python.overrideredirect(1) btn = Tk.FAQ Python top=Tk.developpez.com/faq/ .pack() btn = Tk. Copyright © 2005-2009 Developpez LLC.destroy) btn. documents et images sans l'autorisation expresse de Developpez LLC. même partielle. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. ne peut être faite de ce site et de l'ensemble de son contenu : textes. text = 'Fermer'. Tout droits réservés Developpez LLC.mainloop() lien : Création d'une classe InfoBulle .76 Les sources présentées sur cette pages sont libres de droits. De plus. documents et images sans l'autorisation expresse de Developpez LLC.DISABLED ou "readonly" de la manière suivante entry.DISABLED. Copyright © 2005-2009 Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.NORMAL.developpez. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. vous ne pourrez plus modifier le contenu de l'Entry (les fonctions insert et delete sont ignorées). entry.Entry(root.insert(index.com/faq/ . Si vous optez pour Tk. avec Tk. chose que vous pourrez encore faire avec "readonly".configure(show='*') Comment récupérer le contenu d'un Entry ? Auteurs : Guigui_ . même partielle.Tk. state=Tk. text) insère le string text à la position du curseur e. ne peut être faite de ce site et de l'ensemble de son contenu : textes.DISABLED ou "readonly" import Tkinter as Tk root = Tk.END) Comment insérer un texte dans un Entry ? Auteurs : Guigui_ .config(state = NewState). Tout droits réservés Developpez LLC.NORMAL puis le remettre à l'état Tk.Tk() entry = Tk.DISABLED ou "readonly".77 Les sources présentées sur cette pages sont libres de droits. Pour modifier l'état d'un Entry. vous devez configurer l'option state par une des 3 options suivantes Tk. http://python.insert(Tk. entry. Comment modifier l'état d'un Entry ? Auteurs : Guigui_ .DISABLED) i=0 def EntryStateModify(): global i . et vous pouvez les utiliser à votre convenance.insert(Tk. vous devrez avant d'appliquer une méthode insert/delete modifier l'état à Tk.END. vous ne pourrez ni sélectionner ni copier le contenu de l'Entry.INSERT. Si vous voulez donc pouvoir modifier le contenu de l'Entry tout en interdisant à l'utilisateur de le modifier manuellement.delete(0.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Entry Comment effacer le contenu d'un Entry ? Auteurs : Guigui_ . e. Tk. text) insère le string text à la fin du widget Comment utiliser la zone de texte comme une zone de saisie de mot de passe ? Auteurs : Guigui_ . text) insère le string text à la position index e. Il vous suffit simplement d'appliquer la méthode get() sur votre widget Entry pour récupérer son contenu (sous forme d'un string). Aucune reproduction. str(i)) entry. Tout droits réservés Developpez LLC. command = EntryStateModify) entry.com/faq/ .config(state = Tk.insert(Tk.pack() root.FAQ Python entry. Copyright © 2005-2009 Developpez LLC.developpez.END.mainloop() . ne peut être faite de ce site et de l'ensemble de son contenu : textes.pack() btn. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Button(root. documents et images sans l'autorisation expresse de Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. text = 'Ajouter'.78 Les sources présentées sur cette pages sont libres de droits.DISABLED) i += 1 btn = Tk. et vous pouvez les utiliser à votre convenance. même partielle.NORMAL) entry. Aucune reproduction.config(state=Tk. http://python. exemple: f1 = lambda x: x + 5 print f1(9) ## 14 f2 = lambda x. ne peut être faite de ce site et de l'ensemble de son contenu : textes. y) f3(7. import Tkinter as Tk def clic(): print 'Clic gauche sur le bouton' root = Tk.Button peut être utile si vous avez plusieurs Button qui pointent sur la même fonction ou encore que la fonction appelée par le clic sur le bouton ait besoin d'un argument que celle-ci ne peut connaître d'elle-même. Vous pouvez cependant utiliser les fonctions lambdas pour passer des arguments supplémentaires. Il est important de ne pas mentionner les void () lors de cette association.config(text = txt) root = Tk.developpez. y): print x * y f3 = lambda x.StringVar() edit = Tk.com/faq/ . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Tout droits réservés Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.Button. y:multiplie(x. cf Comment associer un évènement clavier/souris à un widget ?.Button(root.Entry(root. column = 0. Copyright © 2005-2009 Developpez LLC. Aucune reproduction. les arguments devront obligatoirement avoir une valeur par défaut vu que le clic sur un bouton ne peut apporter de valeurs aux paramètres de l'expression lambda. documents et images sans l'autorisation expresse de Developpez LLC. même partielle. Par défaut. le paramètre command d'un Button nécessite une fonction sans argument. Le passage d'arguments à l'action associée à un Tkinter.Label(root. y = 5: x * y f2(6) ## 30 def multiplie(x.79 Les sources présentées sur cette pages sont libres de droits.pack() root. On peut également utiliser la fonction bind. 3) ## 21 Pour utiliser les expressions lambda avec un Button. columnspan = 3) svEntry = Tk. Cet attribut est associé à une fonction sans paramètre. et vous pouvez les utiliser à votre convenance. text = 'toto'. textvariable = svEntry) .Tk() label = Tk.mainloop() Comment passer des paramètres à l'action associée à un Button ? Auteurs : Guigui_ . Une première méthode est de renseigner l'attribut command du widget Tk. Si vous voulez pouvoir modifier ces valeurs aux cours du programme il faudra soit utiliser des variables modifiables soit redéfinir le paramètre command import Tkinter as Tk def AfficheLabel(txt): label. La syntaxe d'une expression lambda est la suivante: mafonction = lambda argument:expression où argument est la liste des arguments de ma fonction et expression l'expression retournée par la fonction. command = clic) button. text = "Clic sur le bouton ") label. http://python.grid(row = 0.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Button Comment associer une fonction au clic gauche sur un bouton ? Auteurs : Guigui_ .Tk() button = Tk. text = "Button1". Copyright © 2005-2009 Developpez LLC. columnspan = 3) btn1 = Tk. même partielle. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.grid(row = 2. documents et images sans l'autorisation expresse de Developpez LLC. command = lambda x=svEntry:AfficheLabel("valeur de l'entry: "+x. command = lambda x=1:AfficheLabel("Clic sur le bouton "+str(x))) btn2 = Tk.FAQ Python edit. ne peut être faite de ce site et de l'ensemble de son contenu : textes. column = 0) btn2. Tout droits réservés Developpez LLC. et vous pouvez les utiliser à votre convenance.Button(root.mainloop() .grid(row = 2. text = "Button2".developpez.80 Les sources présentées sur cette pages sont libres de droits. Aucune reproduction.get())) btn1. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.Button(root.grid(row = 2.com/faq/ . text = "Button3".Button(root. http://python. command = lambda x=2:AfficheLabel("Clic sur le bouton "+str(x))) btn3 = Tk.grid(row = 1. column = 1) btn3. column = 2) root. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Aucune reproduction. Copyright © 2005-2009 Developpez LLC.81 Les sources présentées sur cette pages sont libres de droits. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://python. documents et images sans l'autorisation expresse de Developpez LLC.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Label Comment modifier le texte du label ? Auteurs : Guigui_ .config(text=newstr) remplace le texte du label par newstr . même partielle.com/faq/ . l. Tout droits réservés Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes.developpez. et vous pouvez les utiliser à votre convenance. set) l1.Tk.Scrollbar(f1) l1 = Tk.mainloop() Comment supprimer un élément dans une Listbox ? Auteurs : Guigui_ .pack(side = Tk. documents et images sans l'autorisation expresse de Developpez LLC.Listbox(root) listbox. il suffit d'appliquer la procédure l.Tk() f1 = Tk.Y) import Tkinter as Tk root = Tk. 'element1') .com/faq/ .END) Suppression de l'ensemble des éléments dans une listbox import Tkinter as Tk root = Tk.Y) s1.bind('<ButtonRelease-1>'. il faut configurer le Scrollbar et la Listbox pour que le déplacement dans la Listbox et le mouvement de l'ascenseur se fasse simultanément.yview) listbox.pack() root.delete(0. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Pour supprimer un élement dans une listbox.clic) ## on associe l'évènement "relachement du bouton gauche la souris" à la listbox Comment associer un Scrollbar à une Listbox ? Auteurs : Guigui_ .LEFT.RIGHT.developpez. un seul élément (désigné par first) sera supprimé. pour un Scrollbar vertical: scrollbar.yview) l1.pack(side = Tk.LEFT. fill = Tk.pack(side = Tk.config(yscrollcommand = s1.insert(i.Tk() listbox = Tk. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.delete(first. L'association d'un Scrollbar à une Listbox se fait très simplement. même partielle. Si ce dernier est omis. http://python.config(command = widget. Tout droits réservés Developpez LLC. last=None) où first représente l'index du premier élement supprimé et last.Listbox(f1) for i in range(20): l1.insert(0. et vous pouvez les utiliser à votre convenance. Aucune reproduction. fill = Tk.get(i) ## On retourne l'élément (un string) sélectionné listbox.config(command = l1. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Frame(root) s1 = Tk.pack(side = Tk. l'index du dernier. il suffit de créer un Scrollbar et la Listbox associée avec un même parent (en général une Frame). Pour cela.82 Les sources présentées sur cette pages sont libres de droits.Y) scrollbar. def clic(evt): i=listbox. Ensuite. fill = Tk.set Enfin.curselection() ## Récupération de l'index de l'élément sélectionné return listbox. Pour vider une listbox.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Listbox Comment récupérer un élément cliqué dans une Listbox ? Auteurs : Guigui_ .RIGHT. Copyright © 2005-2009 Developpez LLC. on les affiche à l'écran par l'intermédiaire du packer listbox. str(i)) s1.Y) f1. fill = Tk. il faut utiliser la fonction l.config(yscrollcommand = scrollbar. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Copyright © 2005-2009 Developpez LLC.Button(root. 'element3') listbox. et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.83 Les sources présentées sur cette pages sont libres de droits.delete(0.pack() root. 'element2') listbox. Tout droits réservés Developpez LLC. Aucune reproduction.insert(1.com/faq/ . http://python.FAQ Python Suppression de l'ensemble des éléments dans une listbox listbox.insert(2. text = 'Effacer la liste'. ne peut être faite de ce site et de l'ensemble de son contenu : textes. documents et images sans l'autorisation expresse de Developpez LLC.mainloop() .developpez.END) btn = Tk. même partielle.pack() def clear(): listbox. Tk. command=clear) btn. 0.NW. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. il faut tout d'abord que celui-ci supporte l'attribut fill.developpez. fill = NewColor) où item réprésente l'identifiant de l'item à modifier et NewColor la nouvelle couleur. fill = 'blue') . Le Canvas ne s'adapte pas par défaut à la place que prennent les éléments que vous dessiner dedans.delete(Tk.create_oval(20.140.Canvas(root.size[0]. Donc si l'image que vous insérez est trop grande. Pour afficher une image autre que GIF ou PPM. Aucune reproduction.20. ImageTk import Tkinter as Tk root = Tk.fill='red') rect = canvas. Avec la fonction ImageTk.mainloop() lien : Comment afficher une image sur un Widget ? Comment modifier la couleur d'item d'un Canvas ? Auteurs : Guigui_ . Donc pour que l'image soit positionnée en haut à gauche du Canvas.pack() oval = canvas. width =2. Pour modifier la couleur d'un item d'un Canvas.com/faq/ .create_rectangle(90. Tout droits réservés Developpez LLC. il vous faudra passer par la bibliothèque PIL qui est capable de lire tout type d'images.itemconfigure(item.84 Les sources présentées sur cette pages sont libres de droits.PhotoImage(image) canvas = Tk.create_image(0. vous créerez une image compatible Tkinter que vous pourrez afficher dans un Canvas par la méthode create_image(position. anchor = Tk.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Canvas Comment effacer le contenu d'un Canvas ? Auteurs : Guigui_ . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Ensuite vous pouvez modifier cette attribut par la méthode canvas. width = image.size[1]) canvas. Copyright © 2005-2009 Developpez LLC.pack() root. height = image.175.20. **options) où position réprésente les 2 coordonnées du coin en haut à gauche de l'image sachant que l'image sera aussi positionnée par rapport au paramètre anchor qui par défaut vaut CENTER.width=2.70.175. width=200) canvas.PhotoImage.70.45. vous pouvez vous assurer qu'elle sera entièrement visible en renseignant les paramètres width et height à la création du Canvas from PIL import Image. import Tkinter as Tk root = Tk.fill='green') poly = canvas. height=100.ALL) Comment insérer une image dans un Canvas ? Auteurs : Guigui_ .45.Canvas(root. canvas.jpg") photo = ImageTk. vous devez utilisez la position 0.NW. image=photo) canvas.70 ]. et vous pouvez les utiliser à votre convenance. http://python.70.open("lenna. même partielle.Tk() canvas = Tk.width=2.20. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Enfin le paramètre image représente l'image que vous voulez insérer.Tk() image = Image.190. documents et images sans l'autorisation expresse de Developpez LLC.create_polygon([160. 0 et rajouter le paramètre anchor = Tk. com/faq/ . fill = "blue") canvas.itemconfigure(oval. http://python. documents et images sans l'autorisation expresse de Developpez LLC. fill = "#67A12B") canvas. Copyright © 2005-2009 Developpez LLC.developpez.mainloop() .pack() root.itemconfigure(poly. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. fill = "#001020") btn = Tk.itemconfigure(rect. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. ne peut être faite de ce site et de l'ensemble de son contenu : textes.FAQ Python def ColorChange(): canvas.85 Les sources présentées sur cette pages sont libres de droits. command = ColorChange) btn. et vous pouvez les utiliser à votre convenance.Button(root. même partielle. Aucune reproduction. text = "Changer la couleur des objets". Tout droits réservés Developpez LLC. Scrollbar(f1.get(2." correspond au dernier caractère à récupérer de la ligne en question sachant que celui-ci est non inclu.CHAR) text.config(wrap=Tk.VERTICAL) = Tk.END) text.get(5. documents et images sans l'autorisation expresse de Developpez LLC.0. ne peut être faite de ce site et de l'ensemble de son contenu : textes.config(wrap=Tk.developpez. Aucune reproduction.config(state=Tk. Remarque: le première caractère de la première ligne est d'index 1.3.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Text Comment modifier le mode de coupure du texte ? Auteurs : Guigui_ . import Tkinter as Tk root = Tk. L'option orient permet de définir si la Scrollbar est horizontale ou verticale. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.0) text.DISABLED) text. 4. start: Le nombre avant le ". Tout droits réservés Developpez LLC. on utilisera plutôt le gridder que la packer.0 Exemple: text. on peut associer un Scrollbar horizontal ou/et un Scrollbar vertical." correspond au premier caractère à récupérer de la ligne en question.HORIZONTAL) ." décimal correspond à la première ligne à récupérer et le nombre après le ". Pour récupérer le contenu d'un widget Text. Le fonctionnement est quasiment similaire à celui pour la Listbox excepté que dans le cas de l'utilisation d'un double Scrollbar. orient=Tk. text. end=None) où start et end sont deux flottants.get(1. text.11) ## ## 11 (non inclu) ## Récupération du contenu entier d'un widget Text ## Récupération du contenu de la 5ème ligne Récupération du contenu du caractère 3 de la 2ème ligne jusqu'au caractère de la 4ème ligne Comment associer un Scrollbar à un Text ? Auteurs : Guigui_ .NORMAL) ## Remet le texte en mode normal Comment récupérer le contenu d'un widget Text ? Auteurs : Guigui_ . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs." décimal correspond à la dernière ligne à récupérer et le nombre après le ". 6.86 Les sources présentées sur cette pages sont libres de droits. même partielle. Tk.config(wrap=Tk.Tk() ## f1 s1 s2 Déclaration des différents widgets = Tk.get(start. Copyright © 2005-2009 Developpez LLC. et vous pouvez les utiliser à votre convenance.Frame(root) = Tk.Scrollbar(f1. Pour le widget Text. il suffit d'utiliser la fonction text. end: Le nombre avant le ". orient=Tk.com/faq/ . http://python.WORD) ## Découpe des mots selon les caractères ## pas de découpe des mots ## Découpe des mots selon un mot entier Comment mettre le texte en lecture seule ? Auteurs : Guigui_ .0.config(state=Tk.NONE) text. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.config(command = t1.W+Tk. sticky=Tk.com/faq/ .xview) t1. s1.pack() root.S+Tk.E) f1. row=1. Copyright © 2005-2009 Developpez LLC.grid(column=0. ne peut être faite de ce site et de l'ensemble de son contenu : textes.grid(column=1. Aucune reproduction.developpez.87 Les sources présentées sur cette pages sont libres de droits. même partielle.FAQ Python t1 = Tk. sticky=Tk.N) s2.config(command = t1.grid(column=0. row=0) s1.yview) s2.config(yscrollcommand = s1. xscrollcommand = s2.set) ## Placement du widget Text et des Scrollbar associés t1.mainloop() lien : Comment associer un Scrollbar à une Listbox ? .set. et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.Text(f1. row=0. http://python. Tout droits réservés Developpez LLC. documents et images sans l'autorisation expresse de Developpez LLC.NONE) ## association du déplacement de la glissière des scrollbar avec la position visible dans ## le widget Text et inversement. wrap=Tk. config(menu = mainmenu) root. le widget Menu peut être utiliser pour créer une barre de menu dans une fenêtre. La fonction add_cascade(**options) peut recevoir une liste de paramètres où les principaux sont label pour le titre du menu fils et menu représentant l'indentifiant du menu fils en question. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.add_command(label="Affiche".Menu(mainmenu) ## Menu fils menuExample menuExample. Exemple de création d'un Menu # -*. Pour ajouter des menus à la barre de menu.mainloop() Comment ajouter un séparateur dans un menu ? Auteurs : THE_VIP . menu=menuExample) ).Menu(mainmenu) ## Menu Fils menuHelp. vous créerez de nouveaux Menu ayant pour parent le premier menu crée ( menuExample = Tk. command=Affiche) ## Ajout d'une option au menu fils menuFile menuExample.showinfo("A propos". Copyright © 2005-2009 Developpez LLC.add_command(label="Quitter".com/faq/ . menu=menuExample) mainmenu. et vous pouvez les utiliser à votre convenance.quit) menuHelp = Tk.config(menu = mainmenu) ).add_command(label="A propos". même partielle.add_cascade(label = "Exemple".developpez. vous devez tout d'abord définir un premier Menu de parent une fenêtre ( mainmenu = Tk. .Tk() ## Fenêtre principale def Affiche(): tkMessageBox. command=About) mainmenu. Aucune reproduction. Pour ajouter des options à un menu fils. "Version 1. ne peut être faite de ce site et de l'ensemble de son contenu : textes.add_cascade(label = "Exemple".Menu(root) ) puis associé ce menu à la fenêtre ( root.coding: cp1252 -*import Tkinter as Tk import tkMessageBox root = Tk. Pour cela.showinfo("Exemple d'un Menu Tkinter") def About(): tkMessageBox.add_cascade(label = "Aide". documents et images sans l'autorisation expresse de Developpez LLC.88 Les sources présentées sur cette pages sont libres de droits. http://python. vous utilisez la fonction add_command(**options) qui peut recevoir une liste de paramètres et où les principaux sont label pour le titre de l'option et command qui représente la fonction associée au clic sur l'option.Menu(mainmenu) ) et sera insérée à la barre par la fonction add_cascade ( mainmenu. La méthode add_separator() permet de rajouter une ligne de séparation dans un menu.0") mainmenu = Tk. Tout droits réservés Developpez LLC. menu=menuHelp) root. command=root.Menu(root) ## Barre de menu menuExample = Tk.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Menu Comment insérer une barre de menu ? Auteurs : Guigui_ . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. showinfo("A propos". ne peut être faite de ce site et de l'ensemble de son contenu : textes.config(menu = mainmenu) root.quit) root.coding: cp1252 -*import Tkinter as Tk import tkMessageBox root = Tk.add_cascade(label = "Exemple".Tk() def Affiche(): tkMessageBox.Menu(mainmenu) menuExample. Aucune reproduction.add_command(label="Quitter".Menu(root) menuExample = Tk. même partielle.add_separator() ## Ajout d'une ligne séparatrice menuExample. menu = menudetachable) menunondetachable.mainloop () .89 Les sources présentées sur cette pages sont libres de droits. "Version 1.Tk() mainmenu = Tk. http://python. Le widget Menu admet un paramètre booléen tearoff qui indique si le menu en question peut être détaché de son parent ou non. command = fenetre. tearoff = 1 et le menu est détachable. command=root. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. menu = menuExample) root.showinfo("Exemple d'un Menu Tkinter") def About(): tkMessageBox.Menu(mainmenu. import Tkinter as Tk root = Tk. command=Affiche) menuExample.add_cascade(label="Menu2".add_command(label="Quit".com/faq/ . menu = menunondetachable) mainmenu. Copyright © 2005-2009 Developpez LLC. command = fenetre.Menu(root) menunondetachable = Tk.0") mainmenu = Tk.config(menu = mainmenu) root.FAQ Python # -*. Tout droits réservés Developpez LLC.add_cascade(label="Menu1".add_command(label="Affiche". tearoff = 1) mainmenu. tearoff = 0) menudetachable = Tk. Un menu détachable est caractérisé par la présence d'une ligne pointillée en son début.quit) menudetachable. par défaut. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.mainloop() Comment permettre ou non qu'un menu soit détachable de son parent ? Auteurs : THE_VIP . et vous pouvez les utiliser à votre convenance.add_command(label="Quit". documents et images sans l'autorisation expresse de Developpez LLC.Menu(mainmenu.quit) mainmenu.developpez. developpez.showinfo(strTitel.showerror(strTitel. http://python. même partielle. Copyright © 2005-2009 Developpez LLC.90 Les sources présentées sur cette pages sont libres de droits. strMessage) signale un warning avec le message strMessage et le caption de la boite strTitel Comment afficher une boîte de dialogue Error ? Auteurs : Guigui_ .FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > tkMessageBox Comment afficher une boîte de dialogue Information ? Auteurs : Guigui_ . tkMessageBox. et vous pouvez les utiliser à votre convenance. Aucune reproduction. ne peut être faite de ce site et de l'ensemble de son contenu : textes.showwarning(strTitel. tkMessageBox. strMessage) signale une erreur avec le message strMessage et le caption de la boite strTitel . documents et images sans l'autorisation expresse de Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Tout droits réservés Developpez LLC.com/faq/ . strMessage) ouvre une boite d'Information avec le message strMessage et le caption de la boite strTitel Comment afficher une boîte de dialogue Warning ? Auteurs : Guigui_ . tkMessageBox. Cette fonction renvoie le chemin du fichier sélectionné si vous appuyez sur le bouton Ouvrir et '' si vous appuyez sur le bouton Annuler ## exemple: tkFileDialog.com/faq/ . même partielle. http://python. Il suffit d'utiliser la fonction tkFileDialog.askdirectory(initialdir='c:/Python24') . et vous pouvez les utiliser à votre convenance. Copyright © 2005-2009 Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.askopenfilename(filetypes= tuplelist) le paramètre facultatif filetypes est une list de tuple de strings de la forme (Nom du groupe des extensions. ne peut être faite de ce site et de l'ensemble de son contenu : textes."*. Il suffit d'utiliser la fonction tkFileDialog.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > tkFileDialog Comment afficher une boîte de dialogue pour sélectionner un fichier ? Auteurs : Guigui_ . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.91 Les sources présentées sur cette pages sont libres de droits.askdirectory(initialdir= strDirectory) où le paramètre facultatif initialdir indique le répertoire initiale d'ouverture ## Exemple: tkFileDialog.pyw")]) Comment afficher une boîte de dialogue pour sélectionner un répertoire ? Auteurs : Guigui_ .py.*. liste des extensions).askopenfilename(filetypes = [("All". documents et images sans l'autorisation expresse de Developpez LLC. Aucune reproduction. "*"). Tout droits réservés Developpez LLC.("Fichiers Python".developpez. Généralement.Le gridder permet de positionner des objets directement dans une grille en spécifiant la colonne et la rangée où se situera l'objet. même partielle. le gridder et la placer: . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Tout droits réservés Developpez LLC.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Gestion de la géométrie Quel gestionnaire de mise en place choisir ? Auteurs : Guigui_ . . et vous pouvez les utiliser à votre convenance.Le packer permet de positionner des objets les uns par rapport aux autres en spécifiant simplement s'ils sont au-dessus. Tkinter offre 3 gestionnaires différents de mise en place des widgets à savoir le packer. pour ne pas avoir de surprise lors de la visualisation à l'écran.Le placer permet de positionner des objets dans leur conteneur en spécifiant directement leur position au pixel près. ce gestionnaire nécessite l'utilisation abondante de sous-conteneurs. Dès que l'interface graphique est assez compliqué. L'avantage des 2 premiers gestionnaires est que ceux-ci gèrent directement le redimensionnement des objets lorsque la fenêtre conteneur est elle-même redimensionnée par l'utilisateur ou bien modifiée par l'ajout d'un nouvel objet.92 Les sources présentées sur cette pages sont libres de droits. Copyright © 2005-2009 Developpez LLC. le packer et le gridder sont les 2 gestionnaires que l'on conserve et que l'on retrouve simultanément dans une même interface graphique. Il est par contre tout à fait possible pour une même interface graphique d'utiliser plusieurs gestionnaires de mise en place. . Ce gestionnaire est donc utile quand l'interface graphique propose une grille de widgets avec volonté d'avoir des alignements respectés. ne peut être faite de ce site et de l'ensemble de son contenu : textes. . Aucune reproduction. http://python. documents et images sans l'autorisation expresse de Developpez LLC.com/faq/ . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.developpez. Il est fortement conseillé d'utiliser le même gestionnaire de mise en place dans un même conteneur. en-dessous à gauche ou à droite dans leur conteneur (Frame ou Toplevel) respectif ou par rapport à un autre objet placé précédemment. bind('<Button-2>'.bind_all('<Key>'.bind('<Button-3>'. callable) où le string event_name représente l'évènement et callable la fonction à appeler ## Exemple: Affichage dans un label du numéro du bouton de la souris sur le clic sur button def updatelabel(evt): label. Copyright © 2005-2009 Developpez LLC.Entry(root) e1. ## Exemple simple: on affiche la touche entrée au clavier quelquesoit le widget qui a le focus import Tkinter as Tk root = Tk. affiche) ou root.93 Les sources présentées sur cette pages sont libres de droits. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. updatelabel) button. Tout droits réservés Developpez LLC.pack() def affiche(evt): print evt. et vous pouvez les utiliser à votre convenance.mainloop() .FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Evènements Comment associer un évènement clavier/souris à un widget ? Auteurs : Guigui_ . http://python.pack() e2.configure(text=evt. affiche) ## ou e2. updatelabel) Comment associer un évènement à toute l'application ? Auteurs : Guigui_ .bind_all('<Key>'. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.bind(event_name. affiche) root.Tk() e1 = Tk. Il suffit d'appeler la fonction w.com/faq/ . updatelabel) button.num) button. même partielle.bind_all('<Key>'.bind('<Button-1>'.Entry(root) e2 = Tk. ne peut être faite de ce site et de l'ensemble de son contenu : textes. il suffit d'appliquer la méthode bind_all à n'importe quel widget de l'application. documents et images sans l'autorisation expresse de Developpez LLC.developpez.char e1. Pour associer un évènement à toute l'application (évènement qui se réalisera donc quelquesoit le widget qui aura le focus). Aucune reproduction. Touches du curseur: Left. toucheevent) . ne peut être faite de ce site et de l'ensemble de son contenu : textes.Touches de verrouillage des majuscules."Alt/Shift/Ctrl + autre touche": Alt-. Next . Shift-.Touches de fonction: F1. touche) ## on lie l'appuie du caractère "x" avec la fonction toucheevent w. w. "Fin". Print.' ## Exemples: def toucheevent(evt): . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.. Copyright © 2005-2009 Developpez LLC.. http://python.Barre "Espace". L'utilisateur a pressé une touche quelconque: Key L'utilisateur a pressé une touche spéciale: . "Entrée": Escape.Touches "Pages vers le haut/bas": Prior.Touches "Esc" ou "Echap".bind('<Alt-Up>'. . documents et images sans l'autorisation expresse de Developpez LLC. End. . 1. Right.bind('x'. Shift_L L'utilisateur a pressé une touche normale: .. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. "Ctrl" et "Shift": Alt_L. CtrlRemarque: .Touches libellés comme sur le clavier: End. "Inser": Delete.developpez. Return . Down .. less L'utilisateur a pressé une combinaison de touches: .Touches "Suppr". .Tous les évènements de plus de 2 caractères sont à mettre entre <. F12 . du clavier numérique et du défilement: Caps_Lock. même partielle. caractère "<": space.bind('<Key>'.. Insert . Scroll_Lock . Num_Lock. F2.le nom de l'évènement a le même nom que le nom de la touche: a.94 Les sources présentées sur cette pages sont libres de droits... Up.> .bind('<Left>' toucheevent) w. Tout droits réservés Developpez LLC.Tous les évènements sont ensuite à mettre entre '. Aucune reproduction. toucheevent) w.com/faq/ . +.Touches "Alt".FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Evènements > Evènements Clavier Quels sont les noms des évènements associés au clavier ? Auteurs : Guigui_ .. et vous pouvez les utiliser à votre convenance. Control_L... Tab .. Home. Insert. bind('<ButtonRelease-2>'.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Evènements > Evènements Souris Quels sont les noms des évènements associés à la souris ? Auteurs : Guigui_ . documents et images sans l'autorisation expresse de Developpez LLC. L'utilisateur a pressé un bouton: Button-1. Tout droits réservés Developpez LLC.developpez. ButtonRelease-2. airod . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. même partielle. B3-Motion L'utilisateur a double-cliqué sur un bouton: Double-Button-1.95 Les sources présentées sur cette pages sont libres de droits. et vous pouvez les utiliser à votre convenance. ScrollEvent) root.mainloop() . B2-Motion..Tous les évènements sont à mettre entre '<.bind('<MouseWheel>'. sourisevent) ## on lie l'appuie du Bouton gauche de la souris avec la fonction sourisevent w. sourisevent) ## on lie le doubleclic du Bouton droit de la souris avec la fonction sourisevent Comment utiliser l'évènement de la roulette de la souris (MouseWheel) ? Auteurs : airod .bind('<Button-1>'. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. ButtonRelease-3 L'utilisateur a utilisé la roulette de la souris: MouseWheel L'utilisateur a déplacé la souris et elle est entrée dans un widget: Enter L'utilisateur a déplacé la souris et elle est sorite d'un widget: Leave Remarque: .com/faq/ . Double-Button-3 L'utilisateur a relâché un bouton: ButtonRelease-1. sourisevent) ## on lie le relachement du Bouton du milieu de la souris avec la fonction sourisevent w. Aucune reproduction.bind('<Double-Button-3>'. import Tkinter as Tk root = Tk. Double-Button-2.Tk() def ScrollEvent(event): print event. Copyright © 2005-2009 Developpez LLC. ne peut être faite de ce site et de l'ensemble de son contenu : textes.. L'évènement généré par l'utilisation de la roulette de la souris aura un attribut delta dont le signe permet de savoir dans quel sens la roulette a été déplacée. Button-3 L'utilisateur a déplacé la souris en maintenant un bouton: B1-Motion.>' ## Exemples: def sourisevent(evt): print dir(evt) w. http://python.delta root. Button-2. get() Pourquoi j'obtiens le message RuntimeError: Too early to create image ? Auteurs : Guigui_ . Copyright © 2005-2009 Developpez LLC.) ou place(. "credits" or "license()" for more information.get() AttributeError: 'NoneType' object has no attribute 'get' >>> >>> >>> >>> >>> '' import Tkinter as Tk root = Tk() variable = Tk. 15:38:57) [MSC v. Aucune reproduction.Tk() >>> img = tkinter.. Python 3. ? Auteurs : Guigui_ .pack() >>> print variable.1b1 (r31b1:72424. line 1. May 7 2009.. in __init__ Image.1500 32 bit (Intel)] on win32 Type "copyright".. **kw) File "C:\Python31\lib\tkinter\__init__.pack() print variable. Ce message d'erreur apparaît classiquement lorsque vous créez un objet PhotoImage alors qu'aucune instance Tk n'existe. Les fonctions pack(). in <module> img = tkinter.Entry(root) variable. même partielle. et vous pouvez les utiliser à votre convenance.Entry(root). Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. in __init__ raise RuntimeError('Too early to create image') RuntimeError: Too early to create image >>> root = tkinter.) ont None comme valeur de retour. cnf. Pensez toujours écrire ces actions en 2 lignes >>> import Tkinter as Tk >>> root = Tk() >>> variable = Tk.. Ce message est souvent obtenu lorsque vous positionnez votre widget en même temps que vous le créez. >>> import tkinter >>> img = tkinter.PhotoImage() >>> . grid(. http://python.PhotoImage() Traceback (most recent call last): File "<pyshell#1>". 'photo'. line 3210.py". Ainsi en manipulant en même temps la construction et l'affichage du widget vous récupérer la valeur None au lieu de l'identifiant du widget. Tout droits réservés Developpez LLC. master. Comme pour la plupart des toolkit graphique. name. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.. il est nécessaire en général avant de pouvoir créer des objets Tkinter de créer une instance Tk en premier lieu. documents et images sans l'autorisation expresse de Developpez LLC.__init__(self.com/faq/ .96 Les sources présentées sur cette pages sont libres de droits. line 3269.developpez.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tkinter > Divers Pourquoi j'obtiens le message AttributeError: 'NoneType' object has no attribute . ne peut être faite de ce site et de l'ensemble de son contenu : textes..py".PhotoImage() File "C:\Python31\lib\tkinter\__init__. documents et images sans l'autorisation expresse de Developpez LLC. et vous pouvez les utiliser à votre convenance.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tix . http://python. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.developpez. ne peut être faite de ce site et de l'ensemble de son contenu : textes. même partielle. Copyright © 2005-2009 Developpez LLC. Aucune reproduction.97 Les sources présentées sur cette pages sont libres de droits.com/faq/ . Tout droits réservés Developpez LLC. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. http://python. Pour avoir cette liste. il existe parfois des méthodes spécifiques à cet objet ou bien vous pouvez accéder directement aux objets qui le composent. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Pour cela. même partielle. . Les objets Tix sont souvent composés de différents objets Tkinter. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Aucune reproduction. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tix > Widget Comment manipuler les sous-widgets d'un widget Tix ? Auteurs : Guigui_ . il vous d'utiliser le dictionnaire w. Copyright © 2005-2009 Developpez LLC. et vous pouvez les utiliser à votre convenance. documents et images sans l'autorisation expresse de Developpez LLC.subwidget_list. Pour manipuler un objet Tix.developpez.com/faq/ .subwidget_list qui regroupe tous les sous-objets (de premier niveau) de l'objet w.keys(). il vous suffit d'exécuter l'instruction print w. Tout droits réservés Developpez LLC.98 Les sources présentées sur cette pages sont libres de droits. insert(0.entry. Ainsi grâce au dictionnaire c. 'Linux') combo.'elem3') combo.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tix > Tix. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.subwidget_list['slistbox'].pack() def clear(): combo.Combobox Comment créer un Combobox ? Auteurs : Guigui_ .com/faq/ . command: fonction appelée lorsqu'une valeur est sélectionnée dans la Listbox Si vous voulez avoir une Combobox dont on puisse uniquement sélectionnée une valeur dans une liste. même partielle. Pour vider la liste de choix d'un ComboBox. Le Combobox se compose d'un widget Entry et d'un widget Menu qui contient les éléments sélectionnables.get() ## On affiche a l'ecran la valeur selectionnee root = Tix. Tout droits réservés Developpez LLC.subwidget_list['slistbox']. 'NT') combo.99 Les sources présentées sur cette pages sont libres de droits.Tk() combo = Tix.developpez. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.subwidget_list['listbox'].insert(0.Tk() varcombo = Tix.subwidget_list['listbox']. Il vous suffit ensuite d'appliquer la méthode usuelle sur un objet de type ListBox pour vider celuici.insert(0. variable=varcombo. Tk.ScrolledListBox.delete(0. documents et images sans l'autorisation expresse de Developpez LLC. Cet objet est lui-même un sous-objet de l'objet slistbox de la classe Tix.pack() root.StringVar() combo = Tix. Aucune reproduction.ComboBox(root) combo. il vous faut tout d'abord accéder à l'objet listbox du ComboBox.subwidget_list.END) permet de vider la liste de choix du ComboBox c import Tix import Tkinter as Tk root = Tix.END) btn = Tix. text='vider la liste'. vous pouvez tout d'abord accéder à l'objet slistbox puis avec le dictionnaire c. ne peut être faite de ce site et de l'ensemble de son contenu : textes.Button(root.config(state='readonly') ## met la zone de texte en lecture seule combo.subwidget_list['slistbox']. http://python.insert(1. Copyright © 2005-2009 Developpez LLC.'elem1') combo.mainloop() Comment vider la liste de choix d'un ComboBox ? Auteurs : Guigui_ . On peut donc utiliser la bibliothèque Tix (qui est à priori installée avec Python) ou Pmw pour récupérer ce widget. Ainsi. command=clear) .'elem2') combo. l'instruction c. editable=1.ComboBox(root.delete(0. Tkinter ne propose pas le widget Combobox. command = Affiche) combo. Les paramètres importants sont: • • • • editable: indique si la valeur du champ Entry est visible ou non dropdown: indique si le menu se présente sous forme d'une Listbox ou d'un bouton qui permet d'afficher cette Listbox variable: variable référençant la valeur sélectionnée dans la Listbox. dropdown=1.insert(0.subwidget_list à l'objet listbox. Tk. et vous pouvez les utiliser à votre convenance. il faut modifier la propriété de l'état de l'Entry à readonly import Tix def Affiche(evt): print varcombo. 100 Les sources présentées sur cette pages sont libres de droits.pack() root. Aucune reproduction. ne peut être faite de ce site et de l'ensemble de son contenu : textes. même partielle. et vous pouvez les utiliser à votre convenance. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.com/faq/ . Copyright © 2005-2009 Developpez LLC.mainloop() lien : Comment supprimer un élément dans une Listbox ? . http://python. documents et images sans l'autorisation expresse de Developpez LLC. Tout droits réservés Developpez LLC.FAQ Python btn.developpez. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. command=changepage1) nb.mainloop() .subwidget_list["page2"] b1 = Tk. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.101 Les sources présentées sur cette pages sont libres de droits. et vous pouvez les utiliser à votre convenance.raise_page(pagename) où pagename représente le nom d'une des page créé dans le notebook import Tix import Tkinter as Tk def changepage2(): nb. documents et images sans l'autorisation expresse de Developpez LLC. text='Passe a la page 2'.Notebook Comment changer la page visualisée à l'écran d'un Notebook ? Auteurs : Guigui_ . label="page2") p1 = nb.com/faq/ .pack() b2.raise_page("page1") root = Tix.Button(p2. Pour cela.pack() b1.developpez.subwidget_list["page1"] p2 = nb. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. text='Passe a la page 1'.raise_page("page2") def changepage1(): nb. http://python. ne peut être faite de ce site et de l'ensemble de son contenu : textes.pack() root. Tout droits réservés Developpez LLC.NoteBook(root) nb.Tk() nb = Tix. il suffit d'utiliser la méthode notebook.add("page1". Copyright © 2005-2009 Developpez LLC.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tix > Tix. command=changepage2) b2 = Tk. même partielle.Button(p1. label="page1") nb. Aucune reproduction.add("page2". 102 Les sources présentées sur cette pages sont libres de droits. Ne pas oublier de forcer un raffraîchissement d'écran (meter.Meter Comment créer un Meter ? Auteurs : Guigui_ .update() btn = Tix. ne peut être faite de ce site et de l'ensemble de son contenu : textes. http://python.config(value = newvalue). Aucune reproduction. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Meter(root.pack() root. Tout droits réservés Developpez LLC.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tix > Tix.update()) si on veut que l'affichage à l'écran prenne immédiatement la modification en cours. Copyright © 2005-2009 Developpez LLC.) meter. et vous pouvez les utiliser à votre convenance. vous pouvez changer cette valeur. text = 'Go'. documents et images sans l'autorisation expresse de Developpez LLC. command = go) btn. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. value=0. import Tix root = Tix.Button(root.pack() def go(): for i in range(10000): meter.mainloop() . Son utilisation est très simple.config(value=float(i)/10000) meter.Tk() meter = Tix. Avec la méthode meter.com/faq/ . Son attribut value doit être compris entre 0 (barre vide) et 1 (barre pleine). Le widget Meter proposé par la bibliothèque Tix permet de créer un widget appelé plus communément progressbar.developpez. même partielle. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005-2009 Developpez LLC.com/faq/ .bind_widget(w. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. documents et images sans l'autorisation expresse de Developpez LLC. msg=strmsg) ## On associe l'object bal au widget w avec le message strmsg . et vous pouvez les utiliser à votre convenance.Balloon Comment afficher une infobulle quand on passe au dessus d'un widget ? Auteurs : Guigui_ . bal = Tix. même partielle. Aucune reproduction. http://python. Tout droits réservés Developpez LLC.FAQ Python Sommaire > GUI > Tkinter / Tix / Pmw > Tix > Tix.developpez.Balloon() ## Création d'un Balloon bal.103 Les sources présentées sur cette pages sont libres de droits. ne peut être faite de ce site et de l'ensemble de son contenu : textes. wx.Frame(None. même partielle. Pour changer l'icône d'une fenêtre. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.SetIcon(frameicon) frame.Icon(". ressources indispensables pour apprendre efficacement à développer avec wxPython Où trouver de l'aide pour wxPython ? Auteurs : Guigui_ .com/faq/ . Pour cela. il vous faut appeler la fonction wx. import wx app = wx.developpez.Icon précédemment créé.BITMAP_TYPE_XPM. Les types permis sont wx.FAQ Python Sommaire > GUI > wxPython Où télécharger wxPython ? Auteurs : Guigui_ . Vous pourrez également télécharger les démos et exemples (environ 200). et vous pouvez les utiliser à votre convenance.BITMAP_TYPE_ICO_RESOURCE. -1) frame.BITMAP_TYPE_ICO.BITMAP_TYPE_XBM. Vous assignez ensuite l'icône à la fenêtre en appliquant la méthode MaFrame. En revanche vous pourrez facilement en récupérer en anglais. Mac). Linux. wx. Les ressources en français sur wxPython sont relativement peu abondantes. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts./appicon. Vous trouverez tous les liens pour télécharger wxPython sur la page http://wxpython.BITMAP_TYPE_ICO) frame = wx. Voici les ressources principales qui vous seront utiles pour apprendre wxPython: Tutoriels • Programmer des interfaces graphiques avec le framework open source wxPython Documentation officielle • wxDocs • wxPyDocs Livres • wxPython in Action Comment changer l'icône d'une fenêtre ? Auteurs : Guigui_ .SetIcon(MonIcone) où MonIcone est l'objet wx.Icon(name. wx. wx. Tout droits réservés Developpez LLC. Aucune reproduction.Show() . Vous pourrez récupérer les sources ou les binaires précompilés pour un bon nombre de distributions (Windows. http://python. type) où name correspond au nom de l'icône à charger et type le type de l'image.PySimpleApp() frameicon = wx. Copyright © 2005-2009 Developpez LLC.ico".Icon. vous devez tout d'abord créer un objet de type wx.org/download. ne peut être faite de ce site et de l'ensemble de son contenu : textes.php. documents et images sans l'autorisation expresse de Developpez LLC. wx.BITMAP_TYPE_GIF.104 Les sources présentées sur cette pages sont libres de droits. 200). -1) tc = wx. pos = (0.MainLoop() Comment changer le curseur d'une fenêtre ? Auteurs : Guigui_ .TE_PASSWORD. -1.BITMAP_TYPE_CUR (fichier curseur . "Arrow".GetValue() btn.GetString() == "Hand": frm.CURSOR_ARROW) CURSOR_HAND = wx.com/faq/ . Tout droits réservés Developpez LLC.StockCursor(wx.Panel(frame.MainLoop() Comment utiliser un TextCtrl en tant que zone de saisie de mot de passe ? Auteurs : Guigui_ . il vous suffira de plus lui appliquer la méthode SetCursor avec comme paramètre le nouveau curseur.Cursor avec le nom du fichier ainsi que son type qui doit être d'un type reconnu.Show() app.TE_PASSWORD.ani (curseur animé) import wx app = wx.BITMAP_TYPE_CUR_RESOURCE.Cursor("arrowblue.CURSOR_HAND) frm = wx. http://python.EVT_BUTTON.TextCtrl(panel. ne peut être faite de ce site et de l'ensemble de son contenu : textes.Frame(None) lb = wx. 30)) def GetPassword(event): print tc. Si votre curseur se trouve sous la forme d'un fichier. -1. import wx app = wx.SetCursor(CURSOR_ANIWAIT) elif event.FAQ Python app. style = wx.GetString() == "Arrow": frm.SetCursor(CURSOR_ARROW) elif event. GetPassword) frame.PySimpleApp() frame = wx. Aucune reproduction. i (fichier icône .ani). il vous suffit alors d'appeler le constructeur de la classe wx. Pour changer le curseur d'une fenêtre.StockCursor(id) où id correspondra à la constante définissant un curseur de wxPython.ListBox(frm. même partielle. "Get".SetCursor(CURSOR_HAND) .Cursor("wait. "Hand"]. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.developpez.LB_SINGLE) choices = ["WaitAni". def ChangeCursor(event): if event. Vous pouvez tout d'abord récupérer les curseurs de wxPython en invoquant la fonction wx.BITMAP_TYPE_CUR) CURSOR_ARROWBLUE = wx. il vous faudra au préalable créer un fichier arrowblue. Copyright © 2005-2009 Developpez LLC. et vous pouvez les utiliser à votre convenance.ani".GetString() == "ArrowBlue": frm.cur et un wait.cur ou .Button(panel. -1.0)) btn = wx. Sous Windows. "ArrowBlue". pos = (200.cur".Frame(None.105 Les sources présentées sur cette pages sont libres de droits. documents et images sans l'autorisation expresse de Developpez LLC. pos = (0.PySimpleApp() CURSOR_ANIWAIT = wx.StockCursor(wx.TextCtrl de définir le paramètre style = wx.GetString() == "WaitAni": frm. wx. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. wx.ico) Dans l'exemple suivant.SetCursor(CURSOR_ARROWBLUE) elif event. wxPython possède ses propres curseurs. wx. style = wx.Bind(wx. -1) panel = wx. ce peut être wx. Il vous suffit lorsque vous créer le wx.BITMAP_TYPE_CUR) CURSOR_ARROW = wx. -1.StaticText(frm. "Kristen ITC") myfont3 = wx.FONTWEIGHT_BOLD underline: Booléen indiquant si la fonte contient un soulignement face: string indiquant la police ("Arial" par exemple) encoding: encodage de la fonte.FONTSTYLE_ITALIC.SetFont(myfont2) lbl3.StaticText(frm.FONTSTYLE_SLANT.FONTFAMILY_SCRIPT. ChangeCursor) frm. wx.EVT_LISTBOX. on utilise en général la fonction disponible SetFont(font) de la classe wx. Aucune reproduction. pos = (50.Window (tous les objets visibles à l'écran héritant de cette classe) où font représente un objet de type wx. Tout droits réservés Developpez LLC.FONTWEIGHT_LIGHT et wx. 30)) lbl2 = wx.Frame(None.FONTFAMILY_MODERN et wx.PySimpleApp() frm = wx. ne peut être faite de ce site et de l'ensemble de son contenu : textes. wx.SetFont(myfont1) lbl2.com/faq/ .FONTWEIGHT_BOLD.FONTFAMILY_DECORATIVE. wx. import wx app = wx. http://python. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.FONTWEIGHT_LIGHT. même partielle. wx.SetFont(myfont3) frm. "Verdana") lbl1.FONTFAMILY_TELETYPE style à choisir parmi wx.Font(11.Show(True) app.MainLoop() Comment changer la fonte d'un widget ? Auteurs : Guigui_ . wx.Font(8.MainLoop() . wx. "test de fonte". False. Copyright © 2005-2009 Developpez LLC. Pour modifier la fonte des widgets (lorsque celle-ci est modifiable).FONTWEIGHT_NORMAL.FONTFAMILY_SWISS. pos = (50.developpez. et vous pouvez les utiliser à votre convenance. wx. wx. 60)) lbl3 = wx. wx. -1. wx.Font.FONTFAMILY_DEFAULT. 90)) myfont1 = wx.Font se construit facilement en fournissant au constructeur les paramètres suivants: pointSize: entier donnant taille de la fonte en points family à choisir parmi wx.Bind(wx.FONTFAMILY_DECORATIVE. False. -1) lbl1 = wx.FONTFAMILY_SWISS.Show(True) app.Font(20. -1. wx. "Arial") myfont2 = wx. "test de fonte". Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. wx. wx. documents et images sans l'autorisation expresse de Developpez LLC. wx.FONTFAMILY_ROMAN.FONTWEIGHT_NORMAL.FONTSTYLE_ITALIC weight à choisir parmi wx.FONTSTYLE_NORMAL.106 Les sources présentées sur cette pages sont libres de droits.FONTSTYLE_SLANT et wx. True. wx. wx.FAQ Python lb. "test de fonte".FONTSTYLE_NORMAL. Un objet de type wx.StaticText(frm. pos = (50.FONTFAMILY_ROMAN. data=None): for i in range(100000): self. ne peut être faite de ce site et de l'ensemble de son contenu : textes. il arrive que l'application se fige.connect("clicked". False.window. 0.set_border_width(0) vbox = gtk.0') import gtk.0 Forum • Forum PyGTK Comment forcer le raffraîchissement d'une application ? Auteurs : Guigui_ . 0) . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.window. Néanmoins. False.set_border_width(10) self.Alignment(0.lbl) self.developpez.Label('') align.main_iteration().main_iteration() def __init__(self): self.com/faq/ .lbl = label = gtk. False. Lorsque vous appelez une fonction qui prend énormément de temps et qui se passe dans le thread principal. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.FAQ Python Sommaire > GUI > pyGTK Où trouver de l'aide pour PyGTK ? Auteurs : Guigui_ . documents et images sans l'autorisation expresse de Developpez LLC.pack_start(align. Tout droits réservés Developpez LLC. même partielle. widget.5.add(self. Copyright © 2005-2009 Developpez LLC.window. vous pouvez forcer le raffraîchissement de l'application en rajoutant à des endroits stratégiques l'instruction gtk.lbl.set_title("Test Raffraîchissement") self. Documentation officielle • Tutoriel PyGTK 2.show() align = gtk.window.add(vbox) vbox.require('2.show() button = gtk. # -*.VBox(False. gobject class TestUpdate: def affiche(self.set_text(str(i)) ## Raffraîchissement de la fenêtre pour voir l'apparition de tous les nombres gtk.Window(gtk. 5) align. Les ressources en français sur PyGTK sont relativement peu abondantes.show() self. 0) vbox.pack_start(button. 5) vbox.0 (traduction) • PyGTK Tutorial 2.window = gtk. Aucune reproduction. self.5. Vous avez cependant à votre disposition un tutoriel et sa traduction qui vous apportetons énormément d'informations.WINDOW_TOPLEVEL) self. http://python.Button("Affiche") button.affiche) vbox.coding: cp1252 -*import pygtk pygtk. False. et vous pouvez les utiliser à votre convenance.set_resizable(True) self.107 Les sources présentées sur cette pages sont libres de droits.lbl. 0. show() def main(): gtk.main() return 0 if __name__ == "__main__": TestUpdate() main() . même partielle.show() self. Tout droits réservés Developpez LLC. http://python.108 Les sources présentées sur cette pages sont libres de droits.com/faq/ . ne peut être faite de ce site et de l'ensemble de son contenu : textes.FAQ Python button.grab_default () button.set_flags(gtk. Aucune reproduction. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.developpez. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. et vous pouvez les utiliser à votre convenance. Copyright © 2005-2009 Developpez LLC.CAN_DEFAULT) button. documents et images sans l'autorisation expresse de Developpez LLC.window. . http://python.FAQ Python Sommaire > Optimisation Comment accélérer du code Python par une compilation en C ? Auteurs : Guigui_ .clock suffira amplement. Aucune reproduction.l.l = range(100000)") print(test1. le paramètre setup contient simplement l'importation de la fonction étudiée. ne peut être faite de ce site et de l'ensemble de son contenu : textes. setup représente (toujours sous forme d'une chaîne de caractères). même partielle. number=1000000]]).repeat(5.repeat([repeat=3[. La première fonction retourne le temps total des instructions exécutées number fois. C'est pourquoi il peut être aussi bien de travailler directement sur l'appel d'une fonction qui initialisera elle-même les paramètres à chaque exécution. Tout droits réservés Developpez LLC. Ce module propose principalement la création d'un objet timeit. et vous pouvez les utiliser à votre convenance. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. il suffit simplement d'utiliser la fonction time.clock() qui renvoie le temps CPU en secondes. Le temps à considérer sera alors le minimum des temps obtenus import timeit import random test1 = timeit.timeit(10)) print(test1.Timer([stmt='pass'[.shuffle(l). La bibliothèque Psyco permet une compilation dynamique en C de vos programmes sans modification de vos sources. setup='pass'[.sort()". Copyright © 2005-2009 Developpez LLC. les conditions d'initialisation.109 Les sources présentées sur cette pages sont libres de droits. Cet objet possède 2 méthodes Timer.sort() tps2 = time. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.full() except: pass Il peut cependant y avoir des interférences avec des modules de déboggage (le profiler par exemple) Comment mesurer le temps d'exécution d'une portion de code ? Auteurs : Guigui_ .tps1) Si vous n'avez pas besoin d'une précision très importante. l'usage de time.clock() random. psyco. Sinon optez pour le module timeit. "import random. Dans ce cas-là. La deuxième reproduit l'expérience de la première repeat fois.timeit([number=1000000]) et Timer.com/faq/ .clock() print(tps2 . Pour mesurer le temps d'exécution d'une portion de code. documents et images sans l'autorisation expresse de Developpez LLC. import time l = range(100000) tps1 = time.Timer("random.developpez. La différence entre 2 de ces différents temps donnera le temps d'éxécution de la portion de code encadrée.shuffle(l) l. timer=<timer function>]]]) où stmt est la portion de code sous forme d'une chaîne de caractères qui va être évaluée. 10)) Il faut bien faire attention à la validation des données en sachant que la condition setup n'est exécutée qu'une seule fois au tout début. Ces 2 paramètres peuvent également être des objets qui sont appelable sans arguments. Il suffira d'ajouter les lignes suivantes au début de chacun de vos fichiers sources: try: import psyco. developpez.com/faq/ . Copyright © 2005-2009 Developpez LLC.timeit(10)) print(test2. 10)) test3 = timeit.sort() test2 = timeit. il suffit de prendre comme paramètre stmt directement la fonction étudiée sous forme d'objet. et vous pouvez les utiliser à votre convenance. même partielle. http://python. ne peut être faite de ce site et de l'ensemble de son contenu : textes.Timer("sort()".repeat(3. 10)) lien : Python Library Reference: timeit # Measure execution time of small code snippets . Tout droits réservés Developpez LLC.FAQ Python Autrement. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.timeit(10)) print(test3.repeat(3. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Aucune reproduction. documents et images sans l'autorisation expresse de Developpez LLC.shuffle(l) l. def sort(): l = range(100000) random.110 Les sources présentées sur cette pages sont libres de droits. "from __main__ import sort") print(test2.Timer(sort) print(test3. ce qui se réalise très facilement. Vous pouvez aussi passer par des logiciels spécialisés pour l'installation d'application (par exemple InnoSetup sous Windows). et vous pouvez les utiliser à votre convenance. Si celui-ci possède Python. Vous pouvez dans ce cas utiliser le module disutils ( Distributing Python Modules ) spécialisé dans le déploiement.FAQ Python Sommaire > Déploiement Comment déployer ses applications ? Auteurs : Guigui_ . autres fichiers) pour le bon fonctionnement de votre application. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.developpez.pyo) tout en n'oubliant pas d'installer les bibliothèques requises pour le bon fonctionnement de l'application. Une question qui revient relativement souvent surtout sous Windows est "Comment déployer mon application sur un autre ordinateur". Vous pouvez encore développer vous-même un bout de code en Python pour installer tout le nécessaire (python.py) ou les sources pré-compilées (. Copyright © 2005-2009 Developpez LLC. modules. Si l'ordinateur ne possède pas Python et que vous ne voulez ou ne pouvez pas l'installer. Aucune reproduction. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. cx_Freeze (Windows et Linux) ou encore PyInstaller (Windows et Linux). ne peut être faite de ce site et de l'ensemble de son contenu : textes. Tout droits réservés Developpez LLC. il vous suffira donc simplement de transmettre les sources (.pyc ou . http://python. même partielle. documents et images sans l'autorisation expresse de Developpez LLC. Vous pourrez trouver les liens de ces modules sur la page Outils Python .111 Les sources présentées sur cette pages sont libres de droits. Cette distribution sera en général accompagnée d'une dll contenant le moteur python ainsi que de fichiers compressés contenant toutes les sources pré-compilées des bibliothèques ou modules que vous avez utilisé ainsi que les dlls nécessaires.com/faq/ . vous aurez une autre possibilté en passant par une distribution grâce à des modules comme py2exe (Windows). Ces modules vont vous permettre de transformer vos applications en programmes standalone qui vous éviteront ainsi d'installer Python. Dans notre cas.py exécuté en mode console..py py2exe 2 répertoires sont créés: dist et build .developpez. et vous pouvez les utiliser à votre convenance. il suffit d'écrire un petit setup. Tout droits réservés Developpez LLC. Pour créer un fichier .ce dernier ne sert que lors de la construction de la distribution et peut donc être effacé Dans le répertoire dist.py ? Auteurs : Guigui_ . il y aura au minimum une dll Python et un zip contenant les modules compilés que vous devrez fournir avec votre programme.pyd python25. même partielle. En plus. il faudra remplacer le terme console par windows setup. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.py.exe unicodedata.py from distutils. dans une fenêtre DOS (et non une console Python).dll library. http://python. Copyright © 2005-2009 Developpez LLC. .exe unicodedata.exe setup. Aucune reproduction. la commande suivante qui crééra une distribution. vous récupérerez les fichiers: fichiers générés w9xpopen.exe à partir du fichier .FAQ Python Sommaire > Déploiement > Py2exe Qu'est-ce que Py2exe ? Auteurs : Guigui_ . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.pyd remarque nécessaire pour une exécution sous win 9x moteur Python ce zip contient les modules compilés exécutable de l'application .112 Les sources présentées sur cette pages sont libres de droits.exe à partir d'un fichier . ne peut être faite de ce site et de l'ensemble de son contenu : textes.py que l'on appelera ensuite avec l'argument py2exe exemple: Voici un code en mode console minimaliste testpy2exe.core import setup import py2exe setup(console=["testpy2exe. La bibliothèque py2exe permet de générer sous Windows des éxécutables à partir d'un source Python. documents et images sans l'autorisation expresse de Developpez LLC. nous avons un unique fichier . c:/python25/python.pyd test2pyexe. Si notre fichier a une interface graphique (développé sous Tkinter. Il vous permettra également de créer toute une distribution où vous pourrez empaqueter tous les fichiers nécessaires pour que votre programme fonctionne correctement Comment créer un fichier . il faudra toujours faire les 2 importations et appeler la fonction setup avec des arguments qui varieront en fonction du programme à "compiler".dll MSVCR71. wxPython.py..py raw_input("test minimal de py2exe") Dans le fichier setup.py"]) Il suffit ensuite d'exécuter.).com/faq/ .zip bz2. py import Tkinter as Tk import sys root = Tk. command = sys.py de compilation. Aucune reproduction.FAQ Python Tous ces fichiers ne sont pas forcément utiles.113 Les sources présentées sur cette pages sont libres de droits.python.com/faq/ .Tk() btn = Tk.pack() root.mainloop() setup. Tout droits réservés Developpez LLC. wxPython. Voici un exemple sur une application Tkinter.. test. même partielle.core import setup import py2exe setup( zipfile = None.zip dans l'exécutable ? Auteurs : Guigui_ . et vous pouvez les utiliser à votre convenance. visitez le lien suivant si vous rencontrez des difficultés: starship. Il vous suffit alors d'utiliser l'option windows à la place de l'option console dans le fichier setup. Si vous utilisez une application graphique (développée par exemple avec Tkinter. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. il suffit de rajouter dans le setup l'option zipfile = None testpy2exe.zip et test2pyexe. text = 'Quitter'. library.py. Pour intégrer le fichier library.core import setup import py2exe setup(windows=["test.py"]) Comment intégrer le fichier library. ne peut être faite de ce site et de l'ensemble de son contenu : textes. ..exit) btn.Button(root.py Dans notre cas.cgi/Py2Exe http:// Comment masquer la fenêtre DOS si on a créé une application graphique ? Auteurs : Guigui_ .exe nous sont utiles.). documents et images sans l'autorisation expresse de Developpez LLC.zip directement dans l'exécutable. Si vous utilisez d'autres bibliothèques.net/crew/theller/moin. seuls Python25. Copyright © 2005-2009 Developpez LLC.dll.py from distutils.py raw_input("test minimal de py2exe") setup. vous n'aurez donc sûrement pas besoin de visualiser que ce soit sur la fenêtre DOS qui s'ouvre d'habitude automatiquement lors de l'exécution d'un fichier . Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Cela dépendra du contenu de votre fichier .developpez. http://python. .py from distutils. isfile.py"]) Comment déployer une application Tix avec Py2exe ? Auteurs : Guigui_ .5.prefix+'/tcl/tix8.prefix+'/tcl/tix8.mainloop() Dans le fichier setup. setup.FAQ Python setup. il est parfois nécessaire d'ajouter manuellement les fichiers nécessaires au bon fonctionnement de la bilbiothèque en question.glob(path + os.path.py import Tix root = Tix. Tout droits réservés Developpez LLC. data_files = data_files.Tk() root.4. http://python.4 ainsi que la dll tix84.sep + '*')) data_files=[ ('Dlls'. liste des fichiers à copier dans ce répertoire).py console=["testpy2exe. ('tcl/tix8. C'est le cas pour Tix où il est nécessaire d'inclure le répertoire <Path Python>/tcl/Tix8.2.py import import import import sys os glob os. glob.0. ('tcl/tix8.4/bitmaps'. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.core import setup import py2exe def listdirectory(path): return filter(os.8 et Tix 8.114 Les sources présentées sur cette pages sont libres de droits. Py2exe 0. et vous pouvez les utiliser à votre convenance. documents et images sans l'autorisation expresse de Developpez LLC. listdirectory(sys. Copyright © 2005-2009 Developpez LLC. on liste l'ensemble des fichiers requis pour le bon fonctionnement de Tix que l'on insère dans le setup de py2exe par le paramètre data_files contenant une liste de tuples (répertoire de destination relatif au répertoire d'exécution du programme. ] setup( script_args = ['py2exe']. Pour le déploiement d'applications contenant certains modules (notamment les modules externes). Voici un exemple minimaliste d'un programme Python utlisant Tix test. ne peut être faite de ce site et de l'ensemble de son contenu : textes. il sera peut-être nécessaire de faire des ajustements dans les fichiers à insérer. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. c'est exemple a été testé avec Python 2. Attention.4/pref'.prefix+'/tcl/tix8. ('tcl/tix8.prefix+'/DLLs/tix84.com/faq/ .4'. listdirectory(sys.glob(sys. même partielle. listdirectory(sys.dll')).dll du répertoire <Path Python>/Dlls.4/bitmaps')).developpez. glob.4/pref')).6.py.path from distutils. Si vous utilisez d'autres versions. . Aucune reproduction.4')). py". nous exécutons ce fichier qui créera un fichier Pmw.write(a) ft.115 Les sources présentées sur cette pages sont libres de droits. même partielle. Il vous faudra aussi rajouter les 2 fichier PmwColor.py dans le répertoire courant subprocess. sys. documents et images sans l'autorisation expresse de Developpez LLC. il existe cependant un fichier bundlepmw.py import Pmw root = Pmw. c'est exemple a été testé avec Python 2.py") setup(windows = ['test.sep + "Lib/site-packages/Pmw/Pmw_1_3/lib/PmwBlt.prefix + os.replace("regsub".py Voici un exemple minimaliste d'une application Pmw: test.py from distutils.prefix + os.py']) Comment déployer une application Pmw avec Py2exe ? Auteurs : Guigui_ .py dans le répertoire courant shutil.core import setup import py2exe import os import sys import subprocess import shutil ## si le fichier bundlepmw. Copyright © 2005-2009 Developpez LLC. Attention. sys. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Le fichier setup correspondant: setup.py.FAQ Python setup.sep + "Lib/site-packages/Pmw/Pmw_1_3/bin/bundlepmw.5 de Python (donc si vous travaillez avec une version plus ancienne. Si vous utilisez d'autres versions. "PmwColor.replace("gsub".close() ## Création du fichier Pmw.py".sep + "Lib/site-packages/Pmw/Pmw_1_3/bin/bundlepmw.prefix + os. Nous copions enfin les fichiers PmwBlt.py contenant tous les fichiers internes à Pmw. "re"). Aucune reproduction. Ensuite. L'exécution de ce fichier permet de concaténer l'ensemble des fichiers de Pmw dans un unique fichier Pmw.py.3.prefix + os.py contient l'importation regsub (qui n'existe plus depuis la version 2. vous n'avez pas à faire cette manipulation).sep + "Lib/site-packages/Pmw/Pmw_1_3/lib"]) ## On copie les 2 fichiers PmwBlt.mainloop() Dans le fichier setup. "w") ft.py windows = ['test.6. et vous pouvez les utiliser à votre convenance.py") a = fp. "sub") fp. Dans le répertoire d'installation de Pmw. Py2exe 0.2. Le déploiement d'une application dépendante de Pmw nécessite une intervention du programmeur.prefix + os.prefix + os.close() ft = open(sys.py qui importe le module regsub qui n'existe plus à partir de la version 2.sep + "Lib/site-packages/Pmw/Pmw_1_3/lib/PmwColor. "PmwBlt.py et PmwColor. http://python.5. il sera peut-être nécessaire de faire des ajustements dans les fichiers à insérer.read(). nous allons tout d'abord modifier le fichier bundlepmw. ne peut être faite de ce site et de l'ensemble de son contenu : textes.py") shutil.py.py qui va nous faciliter cette tâche.developpez.5 de Python) ## Vous pouvez sinon le faire à la main en remplaçant "regsub" par "re" et "gsub" par "sub" fp = open(sys. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.copyfile(sys.py".com/faq/ .call([sys.8 et Pmw 1.py et PmwBlt.2.py".copyfile(sys.py']) . Tout droits réservés Developpez LLC.sep + "Lib/site-packages/Pmw/Pmw_1_3/bin/bundlepmw.executable.py et PmwColor.initialise() root. com/faq/ . ne peut être faite de ce site et de l'ensemble de son contenu : textes. même partielle. et vous pouvez les utiliser à votre convenance. Copyright © 2005-2009 Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Aucune reproduction. documents et images sans l'autorisation expresse de Developpez LLC.developpez.FAQ Python Sommaire > Autres bibliothèques . Tout droits réservés Developpez LLC. http://python.116 Les sources présentées sur cette pages sont libres de droits. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.com/faq/ .open(path) permet d'ouvrir une image de tout format (compatible avec la bibliothèque Pil) la fonction im. Copyright © 2005-2009 Developpez LLC.New(mode.jpg") data = list(im. Cependant il n'est lisible que par Pil. http://python. import Image im = Image.putdata(data) Comment décomposer une image couleur en ses 3 composantes RGB ? Auteurs : Guigui_ . On récupère alors une liste de tuples à 3 compoantes si l'image est couleur.getdata() retourne un objet-séquence contenant les valeurs des pixels de l'image.getdata()) Comment créer une image à partir d'une liste de valeurs de pixels ? Auteurs : Guigui_ .FAQ Python Sommaire > Autres bibliothèques > Pil . NbLignes). Aucune reproduction. Vous pouvez consulter la documentation officielle de Pil qui est relativement complète (version html et pdf en anglais d'un tutoriel avec présentation et exemples de la majorité des fonctions) Comment récupérer dans une liste les valeurs des pixels d'une image ? Auteurs : Guigui_ .putdata(data) remplit l'image avec la séquence de valeurs data ## Récupération des valeurs de l'image import Image im = Image.jpg") data = list(im. et vous pouvez les utiliser à votre convenance.split() renvoit une séquence des 3 composantes RGB de l'image . La bibliothèque Pil (Python Imaging Library) ajoute des possibilités de manipulation d'images de tout format avec la présence de quelques fonctions de traitement d'images Où trouver de l'aide pour Pil ? Auteurs : Guigui_ . Tout droits réservés Developpez LLC.Python Image Library Qu'est-ce que Pil ? Auteurs : Guigui_ . La fonction im. La fonction list permet ensuite de récupérer cette séquence sous un format lisible par l'utilisateur.new(im.mode . la fonction Image.size) imNew. ne peut être faite de ce site et de l'ensemble de son contenu : textes.im. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.getdata()) ## Reconstruction de l'image imNew=Image. size) permet de créer une nouvelle image où mode ("L" ou "RGB") définit si l'image sera couleur ou en niveau de gris et size est un tuple (NbColonnes.117 Les sources présentées sur cette pages sont libres de droits. documents et images sans l'autorisation expresse de Developpez LLC. la fonction im.developpez.open("Python.open("Python. une liste simple sinon. La fonction Image. même partielle. .developpez.jpg") ## Sauvegarde de l'image décomposée puis recomposée Pourquoi j'obtiens l'erreur "AttributeError: class Image has no attribute . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.b = img.merge(mode..save("PythonNew.com/faq/ ..save('b. On accède ensuite aux fonctions de ce module par la forme Image. en fonction de la position des imports). Tout droits réservés Developpez LLC. Aucune reproduction.jpg comp = img. Copyright © 2005-2009 Developpez LLC.jpg") ## Ouverture de l'image Python." ? Auteurs : Guigui_ .jpg r.. C'est une des raisons qui font qu'il est déconseillé d'utilisez ce schéma pour l'importation.merge('RGB'. import *. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. vous avez un de votre propre module qui se nomme également Image. le module Tkinter contient un module Image et de ce fait l'instruction from Tkinter import * écrasera le module Image de Pil que vous auriez pu importer auparavant. vous importez finalement votre propre module qui ne contient pas les fonctions du module Image de Pil... http://python.split() ## Décomposition de l'image imgnew = Image. Classiquement.split() ## Récupération des différentes composantes de l'image r. Par exemple. La cause peut être multiple: • Tout d'abord. Comment importer des modules/fonctions/fichiers ? • lien : .. il se peut donc que vous importiez un module Image qui écrasera celui du module Pil (ou inversement. C'est pour cela qu'il est préférable pour Tkinter d'importer de la manière import Tkinter as Tk.save('r. D'autres bibliothèques que vous utilisez peuvent également contenir un module Image. La fonction Image.UneFonction.save('g. documents et images sans l'autorisation expresse de Developpez LLC.g. Il arrive parfois que survienne alors l'erreur AttributeError: class Image has no attribute .jpg") ## Ouverture de l'image Python.jpg') b.jpg') ## Sauvegarde des différents images composantes g. La bibliothèque Pil fournit plusieurs modules dont le module standart qui se nomme Image.open("Python.comp) ## Recomposition de l'image imgnew.FAQ Python import Image img = Image. bands) crée une image à partir des images bands selon le mode mode import Image img = Image.open("Python. on l'importe par la commande Import Image. et vous pouvez les utiliser à votre convenance. Ainsi. Si vous les importez de la manière from . au lieu d'importer le module de Pil. ne peut être faite de ce site et de l'ensemble de son contenu : textes. même partielle.jpg') Comment recomposer une image couleur à partir de ses 3 composantes RGB ? Auteurs : Guigui_ .118 Les sources présentées sur cette pages sont libres de droits. Editez le fichier matplotlibrc se trouvant dans le répertoire (Python Directory)\Lib\site-packages\matplotlib\mpl-data\. même partielle. Il est toutefois conseillé d'utiliser dorénavant la bibliothèque numpy exemple: numerix : numpy # numpy.com/faq/ .developpez. Par contre la page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.. Recherchez le champ numerix et sélectionnez la bibliothèque souhaitée. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. des histogrammes. La bibliothèque Matplotlib est une bibliothèque de tracés de graphe 2D. .FAQ Python Sommaire > Autres bibliothèques > Matplotlib Qu'est-ce que Matplotlib ? Auteurs : Guigui_ . Elle permet de tracer des courbes de fonctions.. Tout droits réservés Developpez LLC. Numeric or numarray . documents et images sans l'autorisation expresse de Developpez LLC. Vous trouverez directement sur le site de Matplotlib un guide d'utilisation (version pdf en anglais) et tout un panel d'exemples présentant les possibilités de cette bibliothèque. Copyright © 2005-2009 Developpez LLC. Aucune reproduction. ne peut être faite de ce site et de l'ensemble de son contenu : textes. et vous pouvez les utiliser à votre convenance. des diagrammes circulaires. http://python. des diagrammes en bâton.119 Les sources présentées sur cette pages sont libres de droits. Comment sélectionner la bibliothèque de calculs (numpy/numarray/Numeric) utilisée par Matplotlib ? Auteurs : Guigui_ . Où trouver de l'aide pour Matplotlib ? Auteurs : Guigui_ .