[Tutor] name error

ugajin at talktalk.net ugajin at talktalk.net
Tue Jul 15 14:46:13 CEST 2014


Thanks all, for your time and trouble spent on this issue. 
 
There are other 2D packages around including; Shoebot, which runs 
Python 2.7 and is a rewrite of nodebox 1, and is said to be inspired by 
DrawBot and Shoes. However, its installation is not well documented (or 
straightforward).  nodebox 1 is declared as a fork of DrawBot, and 
Shoes is written in Ruby.  The precursor of all these seem to be a 
language/environment named DBN (design by numbers), which appears also 
to have spawned Processing, a better known (and better supported) Java 
based IDE. I migrated from Processing to nodebox because of a small 
anomaly in how Processing out-processes bitmaps (no pun intended).  One 
really great thing (for me) is the discovery that DrawBot will out-put 
fully compliant native SVG. I do not think Matplotlib is quite the same 
type of thing.

shoebot seems to be the way forward, but as said, its installation on 
OSX is not straightforward. The GitHub repository suggests using 
MacPorts and Python 2.5 with, py25-numpy - atlas, pango + quartz, 
librsvg, py25-pil, py25-cairo, py25-gtk
But it goes on to say 'MacPorts does not have the python-rsvg package, 
so svg output won't work (see above). Perhaps they mean Python 2.5 does 
not have the Python-rsvg package. Not sure.
It goes on to state as a TODO: 'probably installing py27 packages and 
gnome-python-desktop would fix the missing python-rsvg problem.
It is unclear what py27 packages are. How do I check to see what 
packages I have, and e.g. if I have gnome-python-desktop?
I have OSX installed Python 2.5, as well as Python 2.7 via MacPorts

Apologies for any earlier confusion caused. The nodebox IDE is indeed 
messing me up, big time. 
 The function rect(x, y, w, h) is called as it is shown in the nodebox 
IDE (lowercase - see below).
# file named rect_1
rect(0, 0, 100, 100)
To clarify, this produces the expected output, but if I try importing 
this file with a simple import statement I get the name error:
# file named import_rect_1
import rect_1
Outputs:
Traceback (most recent call last):
  File "nodebox/gui/mac/__init__.pyo", line 358, in _execScript
  File "/Users/apple/Documents/nodeBox/06_15_2014/import_rect_1.py", 
line 1, in <module>
  File "/Users/apple/Documents/nodeBox/06_15_2014/rect_1.py", line 1, 
in <module>
NameError: name 'rect' is not defined

I can use the exec statement, but this rather defeats my purpose.
f = open('rect_1.py')
code = f.read()
exec code

If I put the following statement in an otherwise empty document
print dir()
I get the following information displayed in the IDE console window:
['BOOLEAN', 'BUTTON', 'BezierPath', 'CENTER', 'CLOSE', 'CMYK', 
'CORNER', 'CURVETO', 'Canvas', 'ClippingPath', 'Color', 'Context', 
'DEFAULT_HEIGHT', 'DEFAULT_WIDTH', 'FORTYFIVE', 'FRAME', 'Grob', 
'HEIGHT', 'HSB', 'Image', 'JUSTIFY', 'KEY_BACKSPACE', 'KEY_DOWN', 
'KEY_LEFT', 'KEY_RIGHT', 'KEY_UP', 'LEFT', 'LINETO', 'MOUSEX', 
'MOUSEY', 'MOVETO', 'NORMAL', 'NUMBER', 'NodeBoxError', 'Oval', 
'PAGENUM', 'PathElement', 'Point', 'RGB', 'RIGHT', 'Rect', 'TEXT', 
'Text', 'Transform', 'Variable', 'WIDTH', '__builtins__', '__class__', 
'__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', 
'__init__', '__magic_var__', '__module__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', 
'_align', '_arrow', '_arrow45', '_autoclosepath', '_colormode', 
'_colorrange', '_copy_attr', '_copy_attrs', '_ctx', '_fillcolor', 
'_fontname', '_fontsize', '_get_height', '_get_width', '_imagecache', 
'_lineheight', '_makeInstance', '_noImagesHint', '_ns', '_oldvars', 
'_outputmode', '_path', '_resetContext', '_strokecolor', 
'_strokewidth', '_transform', '_transformmode', '_transformstack', 
'_vars', 'addvar', 'align', 'arrow', 'autoclosepath', 'autotext', 
'background', 'beginclip', 'beginpath', 'canvas', 'choice', 
'closepath', 'cm', 'color', 'colormode', 'colorrange', 'curveto', 
'drawpath', 'endclip', 'endpath', 'files', 'fill', 'findpath', 
'findvar', 'font', 'fontsize', 'grid', 'image', 'imagesize', 'inch', 
'key', 'keycode', 'keydown', 'line', 'lineheight', 'lineto', 'mm', 
'mousedown', 'moveto', 'nofill', 'nostroke', 'outputmode', 'oval', 
'pop', 'push', 'random', 'rect', 'reset', 'rotate', 'save', 'scale', 
'scrollwheel', 'size', 'skew', 'speed', 'star', 'stroke', 
'strokewidth', 'text', 'textheight', 'textmetrics', 'textpath', 
'textwidth', 'transform', 'translate', 'var', 'wheeldelta', 'ximport']

As you see, there is something named 'Rect' (capitalised).

As Steven has suggested it would be more interesting, I have tried the 
same:
print Rect
#prints: <bound method Context.Rect of <nodebox.graphics.Context 
object at 0x1d33b670>>
print Rect.__name__
# prints: Rect

I am still considering this.
Running the following code;
print dir(Context)

produces:
['BezierPath', 'ClippingPath', 'Color', 'HEIGHT', 'Image', 
'KEY_BACKSPACE', 'KEY_DOWN', 'KEY_LEFT', 'KEY_RIGHT', 'KEY_UP', 'Oval', 
'Rect', 'Text', 'WIDTH', '__class__', '__delattr__', '__dict__', 
'__doc__', '__getattribute__', '__hash__', '__init__', '__module__', 
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', 
'__str__', '__weakref__', '_arrow', '_arrow45', '_get_height', 
'_get_width', '_makeInstance', '_resetContext', 'addvar', 'align', 
'arrow', 'autoclosepath', 'background', 'beginclip', 'beginpath', 
'closepath', 'color', 'colormode', 'colorrange', 'curveto', 'drawpath', 
'endclip', 'endpath', 'fill', 'findpath', 'findvar', 'font', 
'fontsize', 'image', 'imagesize', 'line', 'lineheight', 'lineto', 
'moveto', 'nofill', 'nostroke', 'outputmode', 'oval', 'pop', 'push', 
'rect', 'reset', 'rotate', 'save', 'scale', 'size', 'skew', 'speed', 
'star', 'stroke', 'strokewidth', 'text', 'textheight', 'textmetrics', 
'textpath', 'textwidth', 'transform', 'translate', 'var', 'ximport']

I note here that 'rect' is now all in lowercase.

Further, to confirm, the following code does execute correctly:
import nodebox
nodebox.graphics.BezierPath(rect(0, 0, 100, 100))

The suggestions, which I thank you for, of running:
import nodebox
nodebox.graphics.BezierPath.rect(0, 0, 100, 100)
produces the following outputs:
Traceback (most recent call last):
  File "nodebox/gui/mac/__init__.pyo", line 358, in _execScript
  File "<untitled>", line 5, in <module>
TypeError: unbound method rect() must be called with BezierPath 
instance as first argument (got int instance instead)
and:
import nodebox
nodebox.graphics.Rect(0, 0, 100, 100)
Traceback (most recent call last):
  File "nodebox/gui/mac/__init__.pyo", line 358, in _execScript
  File "<untitled>", line 8, in <module>
TypeError: __init__() takes exactly 6 arguments (5 given)

However, I now find the following code also executes correctly:
import nodebox
nodebox.graphics.Context(BezierPath(rect(0, 0, 100, 100)))

Interesting as it is, I am no closer to finding a solution.
If, I try calling the the above as a module I get:
# file named rect_2
import nodebox
nodebox.graphics.Context(BezierPath(rect(0, 0, 100, 100)))
# file named import_rect_2
import rect_2

I now get:
Traceback (most recent call last):
  File "nodebox/gui/mac/__init__.pyo", line 358, in _execScript
  File "/Users/apple/Documents/nodeBox/07_15_2014/import_rect_2.py", 
line 1, in <module>
  File "/Users/apple/Documents/nodeBox/07_15_2014/rect_2.py", line 3, 
in <module>
NameError: name 'BezierPath' is not defined

I hope this helps clear up any confusion.

Kind regards

-u

PS - I use a web-based mail client, which is I think based on AOL's 
client and its takeover by talktalk.

PPS - The comment for v.1.9.7  is not relevant to the issues here, but 
it is something I wanted to note, for future reference. 
I apologise for its inclusion, I was too tired to think where else to 
put it.

PPPS - Re:
> dir: ['__builtins__', '__doc__', '__file__', '__name__', 
'draw_rect', > 'nodebox']

I have tried to repeat this outcome, and I am surprised that it was not 
so easy to do.
I still have the original files, and they produced the same output as 
shown previously.
After some investigation, it seems that 'draw_rect' results from an 
earlier test that had been comment out.
What I had done, was to place the rect(x, y, w, h) function in a def 
wrapper.
I had then abandoned this line of enquiry, and had commented out the 
code.
nodebox 1 does not have a kernel restart command.

I hope this makes sense.







  


More information about the Tutor mailing list