Elargir l’utilisation de PYTHON

Preview:

DESCRIPTION

Elargir l’utilisation de PYTHON. Outils et Interface Graphique. Olivier Hargoaa Informatique et Réseaux, année 3. Comment mieux utiliser PYTHON ?. Plan : Objectifs . Présentation du langage. Quelques librairies. Choix d’un IDE. Choix d’un générateur de documentation. - PowerPoint PPT Presentation

Citation preview

Elargir l’utilisation de PYTHON

Outils et Interface Graphique

Olivier HargoaaInformatique et Réseaux, année 3

Olivier Hargoaa

Comment mieux utiliser PYTHON ?Comment mieux utiliser PYTHON ?

Qui ? Développeurs JAVA.Comment ? Apprendre vite…

• Utilisation d’un IDE.• Génération de code documenté.• Interface graphique :

parallélisme avec JAVA.• Builder d’interface.

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Olivier Hargoaa

Introduction à PYTHONIntroduction à PYTHON

Plan :

Objectifs.

Présentation du langage.

Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.OS

CJAVA

Python Jython

C# .NET

Iron Python

Olivier Hargoaa

Introduction à PYTHONIntroduction à PYTHON

• Interprété.

• Syntaxe épurée.

• POO.

• Programmation fonctionnelle.

• Introspection.

• Tests unitaires.

• Bibliothèque standard riche.

Plan :

Objectifs.

Présentation du langage.

Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Olivier Hargoaa

SyntaxeSyntaxe

• Factorielle

JAVA

int factorielle(int n) {

if(n==0) {

return 1;

} else {

return n * factorielle(n-1);

}

}

Python

def factorielle(n):

if n==0:

return 1

else :

return n * factorielle(n-1)

Plan :

Objectifs.

Présentation du langage.

Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.def ternaire_factorielle (n): return n==0 and 1 or n * factorielle(n-1)

Olivier Hargoaa

SyntaxeSyntaxe

• Factorielle (bis)

Python

def gen_factorielle(n):

fact = 1

it = 1

while(it <= n):

yield fact

fact = fact*(it+1)

it = it+1

Plan :

Objectifs.

Présentation du langage.

Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Point d’arrêt.Pas avec Jython

liste=[n for n in gen_factorielle(4)]

print liste

>>>

[1, 2, 6, 24]

Olivier Hargoaa

LibrairiesLibrairies

• En standard.– Tk (Interface graphique)– TelnetLib (Telnet très simplement)– …

• Additionnelles– PIL (Gestion des images)– PyGTK (Interface graphique)– PyXML (XML et DTD)– 4Suite (XML, XPath, XSLT…)– …

• Web– Mod_python pour Apache– Serveur d’application (ZOPE)

Plan :

Objectifs.Présentation du

langage.

Quelques librairies.

Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Olivier Hargoaa

Choix d’un IDEChoix d’un IDE

• Eclipse + PyDev

Auto complétion.

Gestion de packages.

Refactoring.

Todo.

Plan :

Objectifs.Présentation du

langage.Quelques librairies.

Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Olivier Hargoaa

Choix d’un IDE (Eclipse & Pydev)Choix d’un IDE (Eclipse & Pydev)

Plan :

Objectifs.Présentation du

langage.Quelques librairies.

Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Olivier Hargoaa

DocumentationDocumentation

• Plusieurs sont concurrents.

• Mon choix : Epydoc.

• Syntaxe Javadoc.

• CSS Javadoc.

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.

Choix d’un générateur de documentation

Langage d’interface graphique.

Constructionassistée d’IG.

Références.

Documentationnative python(pydoc)

Olivier Hargoaa

Documentation (Epydoc)Documentation (Epydoc)

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.

Choix d’un générateur de documentation

Langage d’interface graphique.

Constructionassistée d’IG.

Références.

def translate(self, language):

""" Convert the string Hello in the desired language. @type language: string @param language: The desired language. @raise NotImplementedError: Not yet implemented. """ #TODO: Translate into other language raise NotImplementedError("translate")

Olivier Hargoaa

Interface Graphique (1)Interface Graphique (1)

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références. UNIX*

GLib XLib

WxWidget

Motif

PyGtk

Gnome Libs

GTK

GDK

WxPython

*Librairies portées sous Windows

Olivier Hargoaa

Interface Graphique (2)Interface Graphique (2)

• Choix GTK -> natif gnome

• PyGtk

• Bons tutoriels

• Architecture proche de JAVA Swing

• Beaucoup plus simple (rapide)

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Olivier Hargoaa

Interface Graphique (3)Interface Graphique (3)

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

JythonPython app

AWT calls

Swing calls

Olivier Hargoaa

Interface Graphique (4)Interface Graphique (4)

• IG avec Jython– Composants JAVA

• Swing• AWT

– Syntaxe Python• Simplicité

– Métier• Python• Compact• Développement rapide

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Olivier Hargoaa

Interface Graphique (5)Interface Graphique (5)

• Hello world PythonPlan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

import gtk, pygtkimport sys

class HelloWorldGUI: def __init__(self): self.__draw() def __draw(self): self.window=gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_title("Hello world") self.window.connect("destroy", self.__on_quit) self.button=gtk.Button(stock=gtk.STOCK_CONNECT) self.button.connect("clicked", lambda w: sys.stdout.write("Connect python\n")) self.window.add(self.button) self.window.resize(200, 100) def __on_quit(self, widget): gtk.main_quit() def start(self): self.window.show_all() gtk.main() if __name__ == '__main__': h=HelloWorldGUI() h.start()

Olivier Hargoaa

Interface Graphique (6)Interface Graphique (6)

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

• Hello world Jythonfrom java import awtfrom javax import swingimport sys

class HelloWorldGUIJPY: def __init__(self): self.__draw() def __draw(self): self.window=swing.JFrame("Hello world Jython") self.window.setDefaultCloseOperation(swing.JFrame.EXIT_ON_CLOSE) self.button=swing.JButton("Connect", actionPerformed = self.do_connect) self.window.setSize(200, 100) self.window.add(self.button) def do_connect(self, event=None): print "Connect Java Python" def start(self): self.window.setVisible(1) if __name__ == '__main__': h=HelloWorldGUIJPY() h.start()

Olivier Hargoaa

Builder d’interface (GLADE)Builder d’interface (GLADE)

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

GLADE Out.gladegénère

Simple-galde-codegen.py

SimpleGaldeApp.py

MonApp.py

génère

utilise

utilise

Olivier Hargoaa

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--><!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"><glade-interface>

<widget class="GtkWindow" id="window1"> <property name="title" translatable="yes">Hello world with glade</property> <property name="visible">True</property> <property name="default_width">200</property> <property name="default_height">100</property> <property name="resizable">True</property> <signal name="destroy" handler="gtk_main_quit"/>

<child> <widget class="GtkButton" id="button1"> <property name="visible">True</property> <property name="label">gtk-connect</property> <signal name="clicked" handler="on_buttonconnect_clicked"/> </widget> </child></widget>

</glade-interface>

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Builder d’interface (GLADE)Builder d’interface (GLADE)

XML généré avec GLADE

Olivier Hargoaa

import osimport gtkfrom SimpleGladeApp import SimpleGladeApp

glade_dir = ""

class Window1(SimpleGladeApp): def __init__(self, path="helloworld.glade", root="window1", domain=None, **kwargs): path = os.path.join(glade_dir, path) SimpleGladeApp.__init__(self, path, root, domain, **kwargs) def new(self): #context Window1.new { print "A new Window1 has been created" #context Window1.new } def on_buttonconnect_clicked(self, widget, *args): #context Window1.on_buttonconnect_clicked { print "Connect from glade hello world" #context Window1.on_buttonconnect_clicked }def main(): window1 = Window1() window1.run()if __name__ == "__main__": main()

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Builder d’interface (GLADE)Builder d’interface (GLADE)

Script python généré avec simple-galde-codegen.py

Olivier Hargoaa

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

BilanBilan

• Pourquoi Python :– 2-10X plus court que JAVA.– Facile à apprendre.– Eq. Java, PHP.– Librairies (PIL, 4Suite, PyGTK,

PyXML, Tk…).– Vrai langage objet.– Existe un serveur d’application

(ZOPE).From makina-corpus.org

Olivier Hargoaa

RéférencesRéférences

Plan :

Objectifs.Présentation du

langage.Quelques librairies.Choix d’un IDE.Choix d’un

générateur de documentation.

Langage d’interface graphique.

Construction assistée d’IG.

Références.

Jython :

•http://www.jython.org/Project/index.html

•http://www.oreilly.com/catalog/lpython/chapter/ch10_fel.html

•http://jython.sourceforge.net/docs/differences.html

Python :

•http://4suite.org/index.xhtml

•http://python.developpez.com/outils/PythonZope/

Linux :

•http://ref.web.cern.ch/ref/CERN/CNL/2000/001/kde-gnome2

JAVA :

•http://www.pcmag.com/encyclopedia_term/0,2542,t=AWT&i=38308,00.asp

IDE :

•http://pydev.sourceforge.net/

Documentation :

•http://epydoc.sourceforge.net/

GTK :

•http://www.pygtk.org/

•http://www.pygtk.org/tutorial.html

•http://wikipython.flibuste.net/moin.py/PyGTKhttp://wikipython.flibuste.net/moin.py/PyGTK

Recommended