214 votes

Python - Meilleure bibliothèque pour le dessin

Je suis donc à la recherche d'une bibliothèque assez basique en python où je peux créer une fenêtre, puis dessiner des lignes et des formes basiques dessus. Rien de trop complexe, juste de la simplicité. Je pense qu'il y a beaucoup de bibliothèques qui peuvent faire ça, mais je n'en connais aucune. Quelqu'un peut-il me donner quelques recommandations ?

EDIT : Notez qu'il y a plusieurs réponses décrivant différentes boîtes à outils GUI avec des extraits de code. Jetez un coup d'œil aux différentes réponses pour un bref aperçu des différentes boîtes à outils.

108voto

Claudiu Points 58398

Je recommande vivement pygame . Voici un code qui fait ce que vous voulez :

import sys
#import and init pygame
import pygame
pygame.init() 

#create the screen
window = pygame.display.set_mode((640, 480)) 

#draw a line - see http://www.pygame.org/docs/ref/draw.html for more 
pygame.draw.line(window, (255, 255, 255), (0, 0), (30, 50))

#draw it to the screen
pygame.display.flip() 

#input handling (somewhat boilerplate code):
while True: 
   for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
          sys.exit(0) 
      else: 
          print event

103voto

Essayez le Toile TK qui vient avec TkInter . TkInter est fourni en standard avec le système Python de base, vous n'avez donc pas besoin de chercher des bibliothèques tierces. Il est également très facile à apprendre et très portable puisqu'il fonctionne sur pratiquement toutes les plateformes supportées par Python.

En fouillant un peu sur le web, on trouve ceci exemple de code de Fredrick Lundh's site web.

from Tkinter import *

master = Tk()
w = Canvas(master, width=200, height=100)
w.pack()
w.create_line(0, 0, 200, 100)
w.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))
w.create_rectangle(50, 25, 150, 75, fill="blue")

mainloop()

44voto

Steve Johnson Points 1673

Pyglet fera ce que vous voulez et fonctionne sous OS X, Windows et Linux. Un exemple qui dessine une ligne rouge :

import pyglet

window = pyglet.window.Window(resizable=True)

@window.event
def on_draw():
    window.clear()
    pyglet.gl.glColor4f(1.0,0,0,1.0)
    pyglet.graphics.draw(2, pyglet.gl.GL_LINES,
        ('v2i', (10, 15, 30, 35))
    )

pyglet.app.run()

Voir d'autres exemples et la documentation ici .

30voto

sastanin Points 16061

Par souci d'exhaustivité, je contribue également à un PyCairo exemple.

import cairo as C
from math import pi

width, height = 400, 250
output = "circle.png"

surf = C.ImageSurface(C.FORMAT_RGB24,width,height)
ctx = C.Context(surf)

# fill everyting with white
ctx.new_path()
ctx.set_source_rgb(0.9,0.9,0.9)
ctx.rectangle(0,0,width,height)
ctx.fill()  # fill current path

# display text in the center
ctx.set_source_rgb(0,0,0)  # black
txt = "Hello, Stack Overflow!"
ctx.select_font_face("Ubuntu", C.FONT_SLANT_NORMAL, C.FONT_WEIGHT_NORMAL)
ctx.set_font_size(18)
x_off, y_off, tw, th = ctx.text_extents(txt)[:4]
ctx.move_to(width/2-x_off-tw/2,height/2-y_off-th/2)
ctx.show_text(txt)

# draw a circle in the center
ctx.new_path()
ctx.set_source_rgb(0,0.2,0.8)  # blue
ctx.arc(width/2,height/2,tw*0.6,0,2*pi)
ctx.stroke()  # stroke current path

# save to PNG
surf.write_to_png(output)

Et le résultat :

circle.png

Cairo peut produire des graphiques de haute qualité, mais, comme vous le voyez, le style de programmation est extrêmement étatique et impératif, et vous devez vous référer à Référence du Caire C tout le temps, et devinez comment son API a été traduite en Python. Les docstrings dans PyCairo manquent, donc il n'est pas très amusant d'explorer la bibliothèque interactivement à partir de ipython .

Il existe également Le CaireCFFI qui est en grande partie compatible avec PyCairo, mais qui est mieux documenté (il y a des docstrings).

Voir aussi Tutoriel PyCairo pour d'autres exemples.

22voto

nakedfanatic Points 1110

Le module "turtle" de la bibliothèque standard de python fournit des graphiques en forme de tortue similaires à ceux de LOGO (mais avec la syntaxe python bien sûr) dans une fenêtre TK générée automatiquement.

Je ne dirais certainement pas qu'il s'agit de la "meilleure" façon de dessiner des graphiques avec python (trop de limitations inhérentes), mais il est extrêmement facile de démarrer avec, et peut être tout ce dont vous avez besoin si votre tâche est assez simple.

from turtle import *

setup (width=200, height=200, startx=0, starty=0)

speed ("fastest") # important! turtle is intolerably slow otherwise
tracer (False)    # This too: rendering the 'turtle' wastes time

for i in range(200):
    forward(i)
    right(90.5)

done()

EDIT :

Il existe également un nouveau module amélioré pour les grapiques de tortue appelé xturtle.py . Je ne l'ai pas encore essayé mais cela peut valoir le coup d'œil.


EDIT :

Le module étendu xturtle mentionné ci-dessus semble avoir été intégré à la bibliothèque standard (en tant que "turtle") à partir de la version 2.6 de Python.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X