2013-10-18 187 views
3

正如我在PyQt的容易做這樣的:繪製SVG圖像在python

img = '''<?xml version="1.0" encoding="UTF-8"?> 
<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg"> 
<!-- Created with SVG-edit - http://svg-edit.googlecode.com/ --> 
<g> 
    <title>Layer 1</title> 
    <circle stroke-width="3" stroke="#1a1a1a" fill="#dfdbd2" r="16" cy="25" cx="25"/> 
    <path stroke-width="0" fill="#1a1a1a" d="m25,9a16,16 0 0 0 0,32l0,-1.5a18,18 0 0 0 0,-29l0,-1.5z"/> 
</g> 
</svg>''' 
image = QtCore.QByteArray(img) 
self.svgwidget.load(image) 

我怎樣才能GTK中做到這一點?有任何想法嗎? :) 提前致謝!

+0

對不起,因爲糟糕的英語:( –

+0

谷歌五秒鐘:http://faq.pygtk.org/index.py?req=show&file=faq08.010.htp –

+0

謝謝!,但這個鏈接是關於gtk2,它根本不涉及這個問題。 –

回答

9
stream = Gio.MemoryInputStream.new_from_bytes(GLib.Bytes.new(img)) 
pixbuf = GdkPixbuf.Pixbuf.new_from_stream(stream, None) 
self.svgwidget = Gtk.Image.new_from_pixbuf(pixbuf) 

或者使用RSVG庫,如果你不介意額外的依賴,並希望做的SVG花哨的東西,一旦你已經裝好了:

svg = Rsvg.Handle.new_from_data(img) 
pixbuf = svg.get_pixbuf() 
svgwidget = Gtk.Image.new_from_pixbuf(pixbuf) 
+0

非常感謝!這正是我一直在尋找的:) –

8

的人誰願意來加載並使用GTK 3和Python縮放SVG圖像(同時保留SVG圖像質量!):

from gi.repository import Gtk, GdkPixbuf 

path = "/path/to/image.svg" 
width = -1 
height = 128 
preserve_aspect_ratio = True 

pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(path, width, height, preserve_aspect_ratio) 
image = Gtk.Image() 
image.set_from_pixbuf(pixbuf) 

參見https://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf-File-Loading.html#gdk-pixbuf-new-from-file-at-scale