[email protected] 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 _______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor
