|
From: David S. <da...@vi...> - 2002-12-04 13:58:16
|
I think you are looking for
scene.exit = 0
while scene.visible:
# do something
print "Scene was closed by user"
Closing the program is the default behavior for the "close" button, but
it can easily be overridden with this method. Setting scene.visible = 0
is the preferred way of closing a display programmatically.
Also, in writing functions such as histo, where you want the option to
use a specific existing display, I would recommend the following method
for dealing with displays:
def histo(stacked, data, scene=None):
if scene is None:
scene = display()
# Do plotting with scene
# Do user interface loop
histo() will use its own display unless the user specifically provides
one.
Dave
> -----Original Message-----
> From: vis...@li...
> [mailto:vis...@li...] On
> Behalf Of Patrick Keogh
> Sent: Wednesday, December 04, 2002 12:05 AM
> To: vis...@li...
> Subject: [Visualpython-users] Starting and stopping Vpython
> programs from Pythonwin
>
>
> As you probably know, if you just close a Vpython display
> which was started from a program running under Pythonwin, it
> causes Pythonwin to die, even after the program terminates.
>
> So I had to "invent" a method of gracefully terminating a
> Vpython program. Not too difficult I know, but having done
> so, I thought I might as well share it. So here is a function
> (a histogram plotter), with this capability.
>
> #!/usr/bin/python
> #
> # Histo - plot a histogram of stacked cylinders using Vpython
> #
> # Author Patrick Keogh
> #
> from visual import *
>
> def histo(stacked, data):
> """ The second parameter which is passed is assumed to be
> a sequence,
> which has:
> - The first element is a sequence of category labels
> - The second element is a sequence of data series labels.
> - The third element is a sequence of sequences of the
> data values
> """
> #
> # This try/except figures out if there is already a scene. If
> not, it creates it. #
> try:
> type(scene)
> except:
> scene = display()
> scene.show()
> max_entries = len(data[0])
> col = (color.red,color.blue,color.green,color.yellow)
> data_array = []
> for i in data[2]:
> max_entries = max((max_entries, len(i)))
> arrow(axis=(max_entries+1,0,0), shaftwidth=0.1, fixedwidth=1)
> max_height = 0.0
> for i in range(max_entries):
> data_array.append([])
> for j in range(len(data[2])):
> data_array[i].append(data[2][j][i])
> max_height=max((max_height,sum(data_array[i])))
> arrow(axis=(0,10,0), shaftwidth=0.1, fixedwidth=1)
> for j in range(len(data_array[0])):
>
> label(pos=(-5,j*2,j*2),text=data[1][j],color=col[j],opacity=0,
> box=0,border=0
> )
> for i in range(len(data_array)):
> base = 0
> for j in range(len(data_array[i])):
> cyl_height = data_array[i][j]*10.0/max_height
> if stacked:
> pos = (i+1,base,0)
> base = base + cyl_height
> else:
> pos = (i+1,0,j*2)
> axis = (0,cyl_height,0)
> c = cylinder(pos=pos,axis=axis,radius=0.3,color=col[j])
> c.label = "(" + data[0][i] + "," +
> repr(data_array[i][j]) + ")"
> scene.center = (len(data_array)/2,5,0)
> again = 1
> prev = None
> #
> # Apart from the standard zoom and rotate capabilities, we will add #
> # Left click = Set a new center
> # Ctrl-C = Exit
> # Move over a bar = Display the (x,y) label for the histogram bar
> # Note the "hack" of inserting
> the label as an attribute of the
> cylinder
> #
> while again:
> while scene.mouse.events:
> if scene.mouse.clicked:
> scene.center = scene.mouse.getclick().pos
> if scene.kb.keys:
> if scene.kb.getkey() == 'ctrl+c':
> again = 0
> if scene.mouse.pick <> None:
> if prev <> scene.mouse.pick:
> try:
> l.visible = 0
> except:
> pass
> prev = scene.mouse.pick
> if prev.__class__ == cylinder:
> l = label(pos=scene.mouse.pos,
> text=prev.label, box=0) # # If a control-c was entered, then
> the while loop exits, and we close down the display and exit #
> scene.hide()
> del(scene)
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Microsoft Visual Studio.NET
> comprehensive development tool, built to increase your
> productivity. Try a free online hosted session at:
http://ads.sourceforge.net/cgi-bin/redirect.pl?micr0003en
_______________________________________________
Visualpython-users mailing list Vis...@li...
https://lists.sourceforge.net/lists/listinfo/visualpython-users
|