[Tutor] name error
Dave Angel
davea at davea.name
Mon Jul 14 23:03:12 CEST 2014
ugajin at talktalk.net Wrote in message:
> I am running nodebox 1 on OSX v10.6.8, which is an open source OSX
> Python, 2D data visualiser, and although not legacy, the software it
> isn't well supported. (see http://nodebox.net/code/index.php/Home for
> further info). I believe nodebox 1, runs with Python 2.5
>
> This may be too specialised a question for the tutor forum, but . . .
> I have posted several e-mails to the nodebox author the first of which
> was almost 3 weeks ago, and although I received an initial positive
> response, saying he would provide a screen cast to help, the said
> screencast has not arrived. After, I sent a polite reminder, I received
> a curt if incomplete reply telling me he was now on holiday.
>
> Sometimes it can help, to describe a problem to a 3rd person (real or
> imagined), so here goes (it may have helped a bit, but not enough).
>
> To draw a default rectangle using the nodebox 1, IDE you would simply
> write: rect(0, 0, 100, 100) to a .py file. When run in nodebox 1, IDE
> it does what you might expect. It renders a 100 x 100 (px) rectangle
> shape, with the top left vertex at the canvas x, y coordinate 0, 0
>
Not being familiar with nodebox, I'm mostly guessing. I presume
that nodebox comes with an Integrated Development Environment
(IDE) and that the environment is doing some import, perhaps the
dreaded 'from xxxxx import *x' where xxxxx is maybe 'nodebox.
Anyway, whatever they're doing for your interactive environment
is just confusing you for writing scripts and modules, where your
imports must be explicit.
> However, when I try to call the .py file as a module (using the nodebox
> IDE) which is what I am trying to acheive, I get a traceback error
> message e.g.
> # import_test_1.py
> rect(0, 0, 100, 100)
>
> #importer_test_1.py
> import_test_1
> Traceback (most recent call last):
> File "nodebox/gui/mac/__init__.pyo", line 358, in _execScript
> File "/Users/apple/Documents/nodeBox/07_10_2014/importer_2.py", line
> 2, in <module>
> File "/Users/apple/Documents/nodeBox/07_10_2014/import_test_2.py",
> line 22, in <module>
> NameError: name 'rect' is not defined
>
> This begins to look like a scope issue.
Sure you probably need
import nodebox
nodebox.rect (.....
>
> However, when I execute/run the following command, I get the following
> output
> # import_test_2.py
> print 'dir:', dir()
>
> dir: ['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']
>
> This seems to suggest (to me) that there is a class object named Rect
> in the default dir()
> I may not have the correct nomenclature here, is there as default IDE
> dir() module?
There are the builtins. Anything beyond that is put there by your
IDE. And I don't know how you get from the function rect to the
class Rect. Python is case sensitive. I'm not sure what you mea
n by class obmject. Are you perhaps meaning class instance?
>
> Also, when I execute or run the following command, I get:
> print 'dir(Rect):', dir(Rect)
> dir(Rect): ['__call__', '__class__', '__cmp__', '__delattr__',
> '__doc__', '__get__', '__getattribute__', '__hash__', '__init__',
> '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
> '__str__', 'im_class', 'im_func', 'im_self']
>
> Now, I am not sure if this helps, but if I put those two lines of code
> into a file and call the module with the import command, I now get the
> following output::
> # importer_test_2
> import_test_2
You should have gotten an error there, you presumably forgot the
import keyword. Or you pasted it wrong.
> print 'dir:', dir()
> print 'dir(Rect):', dir(Rect)
>
> dir: ['__builtins__', '__doc__', '__file__', '__name__', 'draw_rect',
> 'nodebox']
>
> dir(Rect):Traceback (most recent call last):
> File "nodebox/gui/mac/__init__.pyo", line 358, in _execScript
> File "/Users/apple/Documents/nodeBox/07_10_2014/importer_2.py", line
> 2, in <module>
> File "/Users/apple/Documents/nodeBox/07_10_2014/import_test_2.py",
> line 18, in <module>
> NameError: name 'Rect' is not defined
Well you can see that dir () doesn't show Rect, so dir Rect won't work.
>
> Perhaps someone wiser than me, can suggest an approach, or something
> that I might try?
>
> Thanks in anticipation.
>
> -u
>
> After some further tests, with Rect, and some Traceback messages
> telling me that Rect(), which was located in DrawingPrimitives, was
> deprecated, I found some changes noted posted on GitHub. Those at v
> 1.9.0 seem apposite (I am running v1.9.5):
> for nodebox 1, v 1.9.7:
> ellipse() is an alias for oval(). Path.ellipse() works as well.
> Support for Line cap and line join styles. Use joinstyle() with MITER,
> ROUND or BEVEL and capstyle() with BUTT, ROUND or SQUARE.
> Path.joinstyle = MITER and Path.capstyle = BUTT works as well.
> for v1.9.0:
> NodeBox is now packaged: DrawingPrimitives is obsoleted in favor of
> nodebox.graphics.This also means you can work directly with the context:
>
> After some further try it and see tests, I noted the following:
> #nodebx_graphics.py
> print 'dir(nodebox.graphics.BezierPath):',
> dir(nodebox.graphics.BezierPath)
Can't happen. Your IDE is messing you up big time.
>
> dir(nodebox.graphics.BezierPath): ['__class__', '__delattr__',
> '__dict__', '__doc__', '__getattribute__', '__getitem__', '__hash__',
> '__init__', '__iter__', '__len__', '__module__', '__new__',
> '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__',
> '__weakref__', '_draw', '_get_bounds', '_get_contours', '_get_fill',
> '_get_length', '_get_path', '_get_stroke', '_get_strokewidth',
> '_get_transform', '_get_transformmode', '_reset', '_set_fill',
> '_set_stroke', '_set_strokewidth', '_set_transform',
> '_set_transformmode', 'addpoint', 'append', 'bounds', 'checkKwargs',
> 'closepath', 'contains', 'contours', 'copy', 'curveto', 'difference',
> 'draw', 'extend', 'fill', 'fit', 'inheritFromContext', 'intersect',
> 'intersects', 'kwargs', 'length', 'line', 'lineto', 'moveto', 'oval',
> 'path', 'point', 'points', 'rect', 'reset', 'rotate', 'scale',
> 'segmentlengths', 'setlinewidth', 'skew', 'stateAttributes', 'stroke',
> 'strokewidth', 'transform', 'transformmode', 'translate', 'union',
> 'xor']
>
> Also, noted I can call the rect() function as follows:
> #nodebx_graphics.py
> import nodebox
> nodebox.graphics.BezierPath(rect(0, 0, 100, 100))
Now at least you're showing an import. But if that reference to
rect works, your library is doing some serious hacking. And only
if it's thoroughly documented would I continue using
it.
>
> However I still get a name error when I call it from another file,
> which is what I am trying to do:
> #importer_nb_graphics
> import nodebox_graphics
>
> Traceback (most recent call last):
> File "nodebox/gui/mac/__init__.pyo", line 358, in _execScript
> File "/Users/apple/Documents/nodeBox/07_10_2014/importer_nb_1.py",
> line 2, in <module>
> File "/Users/apple/Documents/nodeBox/07_10_2014/nodebox_graphics.py",
> line 31, in <module>
> NameError: name 'rect' is not defined
>
> I note that now the name error applies to 'rect' not 'Rect'
Of course, that's what you tried to use.
>
> As asked earlier, perhaps some Pythonistas here can suggest some
> further try it and see tests for me to try?
>
> PS. While I am here perhaps someone can also suggest a plain text
> e-mail client, as I really dislike composing on mine in plain text. I
> lose scroll bars, and text sometimes half fills the editor window when
> saved as a draft draft, and re-opened. Especially for you guys, I
> wrote this in HTML, saved it, changed my setting, re-opened it, before
> sending it.
>
>
>
If Window or Linux, use Thunderbird. I don't know if it runs on
osx, but I expect it does. Not on Android though and I'm still
hunting.
>
>
>
--
DaveA
More information about the Tutor
mailing list