[reportlab-users] get methods for properties
Randall Smith
reportlab-users@reportlab.com
Fri, 11 Jun 2004 13:19:28 -0500
Robin Becker wrote:
> Randall Smith wrote:
>
>> I'm new to reportlab. I've been playing with it and looking at the
>> source. I like the design, especially the templates. Thank you for
>> opening it to the public; I hope you get useful feedback.
>>
>> My comment is about getting properties. Maybe I missed it, but I
>> don't see a clean way to grab some useful properties. For example,
>> line width. I wrote a flowable to draw a horizontal line. I want to
>> set the line width and return it back to what it was before the
>> flowable was created. Because _lineWidth starts with a _, I'm
>> guessing this is a semi-private variable and subject to change (not
>> part of the API). So shouldn't canvas have an API attribute or call
>> like canvas.lineWidth or canvas.getLineWidth()?
>>
>> Here is code below:
>>
>> class HR(Flowable):
>> def __init__(self, height):
>> Flowable.__init__(self)
>> self.height = height
>>
>>
>> def __repr__(self):
>> return "HR(t=%s)" % (self.height,)
>>
>>
>> def draw(self):
>> orig_linewidth = self.canv._lineWidth # my problem is here
>> self.canv.setLineWidth(height)
>> self.canv.line(0, 0, 100, 0)
>> self.canv.setLineWidth(orig_linewidth)
>>
>> Randall
>
> .....
>
> I don't thinks there's anything wrong with reading _lineWidth and
> friends, but the _ indicates it shouldn't be set. In modern Python we
> could use a property to allow reading and writing with the appropriate
> methods called on the underlying _ value.
>
> On the other hand the platypus/flowables framework allows you to make
> any changes you like in your draw method. Each call to a draw method is
> surrounded by a save & restore so you can feel free to do what you like
> to the canvas inside. That means you don't need to save the linewitdh
> yourself.
>
>
Thanks. I looked myself and found in the class Flowables, the drawOn
method calls saveState and restoreState around draw.
I have a few more newbie questions, but I'll start a new post since its
a new topic.
Randall