
Thank you very much for your advice, I'll use the following tips as a cheat sheet and try to get the same results for myself :-) Oh, and maybe you could add a small note to http://www.ekips.org/comp/inkscape/ that most things there are included already and/or not the current state of the art? Your page is google's #1 for "inkscape python".
On Wednesday 30 July 2008, Aaron Spike wrote:
You are 100% correct. This tutorial was written before we began using lxml. It teaches the pyxml api not an older lxml api. Off the top of my head (without checking the api docs to be sure):
svg = self.document.getElementsByTagName('svg')[0] width = inkex.unittouu(svg.getAttribute('width')) svg.setAttribute('width', width * 2) text = self.document.createElement('text') value = self.document.createTextNode('Hello %s!' % (what)) text.appendChild(value) svg.appendChild(text)
becomes:
svg = self.document.xpath('//svg:svg',namespaces=inkex.NSS)[0] width = inkex.unittouu(svg.get('width'))
Either that or svg.attrib['width'] it's probably just a matter of taste
svg.set('width', width * 2) text = inkex.etree.Element('text') text.text = 'Hello %s!' % (what) svg.append(text)
Rather: layer.append(text)
if you just want the root node you can replace the xpath with:
svg = self.document.getroot()
yes, simpler in this case, they should be mentioned both in the tutorial.
Additionally, something like:
text = inkex.etree.Element('text') text.setAttribute('x', '200') svg.append(text)
can be simplified with:
inkex.etree.SubElement(svg, 'text', {'x':'200'})
So the attributes come as a dictionary? Great!
and actually 'text' probably needs to be inkex.addNS('text','svg') so that it occurs in the proper namespace.
Ok, I found out about the necessity of namespaces the hard way, because lxml complained about the colons in 'inkscape:label', luckily http://sourceforge.net/mailarchive/message.php?msg_name=1204520414.7055.4.ca... pointed to the correct line in dimension.py.
I'll try to find the time to update the wiki page a bit in a week or so, I probably won't have time the next days.
Is there something I can read up about changes to the python scripting interface (inkex.py and a few other modules, afaict at the moment) that might be planned or will it stay more or less as it is for the near future?
Thank you very much again for your help!
Daniel, who doubled his knowledge about xml APIs during the last week