Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Afficher les images Pygal dans un canvas tkinter.

+2 votes

Je voudrai afficher un graph dans un canvas d'une application tkinter, avec des données passées par Pygal.

Cette lib à l' air vraiment pratique:
http://pygal.org/chart_types/

Les images ainsi produites sont au format svg et ça nécessite des manip intermédiaires pour l' insérer dans mon canvas.

Auriez vous une astuce pour aller droit aux but.

demandé 1-Jul-2015 par buffalo974 (2,608 points)
edité 2-Jul-2015 par buffalo974

Je n'ai pas très bien compris la question, tu veux, en gros, afficher une image dans un canvas tkinter ?? Sachant que cette photo est en svg?

oui c'est ça

2 Réponses

+2 votes
 
Meilleure réponse

Option Jeszra :

Je suis tombé sur cette lib à partir d'une disscussion sur le net.
As-tu jeté un coup d'oeil à Jeszra ?

Jeszra generates Scalable Vector Graphics from Tcl/Tk. The generated
Scalable Vector Graphics includes all functionality of canvas, TkPath
and the general parts from TkZinc 3.3.4. Through Jeszra an entire Tk
Graphical User Interface can be converted into Scalable Vector
Graphics. All the templates from the Gestalt Items and Runtime Library
are convertible into Scalable Vector Graphics without reverting to the
section called “Bitmaps” . Basic Tk controls such as: listbox, button
(X Window System), menubutton, checkbutton, radiobutton, message,
label, menu, text are either direct converted or utilize the Gstripes
template, from the Gestalt Items, for conversion. Gstripes vectorizes
a Graphical User Interface before Scalable Vector Graphics gets
created.

Scalable Vector Graphics is than convertible into PDF, bitmapped
images, or can be printed through FOP with the printer˚s resolution.

AUTRES LIBS

Tu peux aussi essayer :

There are multiple methods to convert a scalable vector graphic into a
bitmap. In addition to cairo, librsvg and rsvg imageMagick contains a
vector graphic format similar to svg--gradients and transparency are
problematic for this approach

Sinon tu peux aller du côté de la méthode convert() : (voir doc de PIL) pour convertir ton image SVG vers PNG ou GIF par ex, ensuite l'afficher comme tu afficherais une simple image tkinter

The convert() method invokes the ImageMagick "convert" command to
convert an image file to a different format.

Dernière option : copier/coller d'une fonction toute faite trouvée sur google code:

def photoimage_from_svg(file_path_name):
    "Return a Tkinter.PhotoImage with the content set to the rendered SVG." 
    svg = rsvg.Handle(file=file_path_name)
    width, height = svg.get_dimension_data()[:2]
    surface = cairo.ImageSurface(cairo.FORMAT_RGB24, int(width), int(height))
    context = cairo.Context(surface)
    svg.render_cairo(context)
    image = Tkinter.PhotoImage(width=width, height=height)
    data = convert(surface.get_data(), width, height)
    image.put(data)
    return(image)

ensuite tu l'utilises comme si de rien n'était(par ex ici on veut afficher une image à la place de l'affichage normal du bouton) :

PATH = tempfile.mkstemp()[1]
    OPEN = open(PATH, 'w')
    OPEN.writelines(SVG)
    OPEN.close()
    ROOT = Tkinter.Tk()
    # 
    IMAGE = photoimage_from_svg(PATH) 
    #
    os.remove(PATH)
    BUTTON = Tkinter.Button(ROOT, image=IMAGE)
    BUTTON._photoimage = IMAGE
    BUTTON.grid()
    Tkinter.mainloop()
répondu 2-Jul-2015 par boblinux (3,092 points)
sélectionné 3-Jul-2015 par buffalo974

il y aurait le module wand , http://stackoverflow.com/questions/6589358/convert-svg-to-png-in-python

avec ImageMagick...
pip install wand fonctionne, un installeur de ImageMagick ici
http://docs.wand-py.org/en/latest/guide/install.html#install-imagemagick-on-windows

mais je ne peux faire les imports:

from wand.api import library
import wand.color
import wand.image

" You probably had not installed ImageMagick library", alors qu'il est sur mon bureau.

Connaissez vous une alternative à Pygal ?

  • Pour l'alternative à Pygal

Tu peux jeter un coup d'oeil vers

  • You probably had not installed ImageMagick library

Vérifie bien que que le logiciel est bien conforme à ton pc, genre s'il est en 64 bits alors que ton pc serait en 32 bits ça risque de foirer.

Sinon essaye une recherche google car j'crois que le problème a été présent avec bon nombre d'utilisateurs.

Genre par , ici, ou encore vers

Ps : Tu peux tutoyer sur IE hein ;)

matplotlib est très bien, à découvrir ++

+3 votes

Si tu sais importer un PNG dans tkinter, tu peux exporter au format PNG au lieu de SVG.

chart = pygal.Pie()
chart.title = 'pygal test'
chart.add('toto', 4)
chart.add('tutu', 7)
chart.add('titi', 2)
chart.render_to_png('image.png')
répondu 16-Oct-2015 par yaap (224 points)
...