Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F101298355
gmov
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Feb 7, 14:18
Size
30 KB
Mime Type
text/x-python
Expires
Sun, Feb 9, 14:18 (2 d)
Engine
blob
Format
Raw Data
Handle
24132675
Attached To
rPNBODY pNbody
gmov
View Options
#!/home/revaz/local/bin/python
# version 5.2
import
getopt
import
string
from
numpy
import
*
from
Tkinter
import
*
from
tkMessageBox
import
askokcancel
from
tkFileDialog
import
asksaveasfilename
import
os
import
glob
import
time
import
pNbody
from
pNbody.palette
import
*
from
pNbody
import
Movie
try
:
from
optik
import
OptionParser
except
ImportError
:
from
optparse
import
OptionParser
####################################################################################
def
parse_options
():
####################################################################################
usage
=
"usage: %prog [options] file"
parser
=
OptionParser
(
usage
=
usage
)
parser
.
add_option
(
"-f"
,
"--fullscreen"
,
action
=
"store_true"
,
dest
=
"fullscreen"
,
default
=
0
,
help
=
"fullscreen mode"
)
parser
.
add_option
(
"-a"
,
"--auto"
,
action
=
"store_true"
,
dest
=
"auto"
,
default
=
0
,
help
=
"automatically run the movie"
)
parser
.
add_option
(
"--nopalette"
,
action
=
"store_true"
,
dest
=
"nopalette"
,
default
=
0
,
help
=
"do not display the palette"
)
parser
.
add_option
(
"--nocontroll"
,
action
=
"store_true"
,
dest
=
"nocontroll"
,
default
=
0
,
help
=
"do not display the controll pannel"
)
parser
.
add_option
(
"--notime"
,
action
=
"store_true"
,
dest
=
"notime"
,
default
=
0
,
help
=
"do not display the time"
)
parser
.
add_option
(
"-p"
,
action
=
"store"
,
dest
=
"palette"
,
type
=
"string"
,
default
=
None
,
help
=
"palette name"
,
metavar
=
" PALETTE NAME"
)
parser
.
add_option
(
"-z"
,
action
=
"store"
,
dest
=
"zoom"
,
type
=
"string"
,
default
=
1
,
help
=
"zoom factor"
,
metavar
=
" INT"
)
parser
.
add_option
(
"-s"
,
action
=
"store"
,
dest
=
"speed"
,
type
=
"int"
,
default
=
1
,
help
=
"speed"
,
metavar
=
" INT"
)
parser
.
add_option
(
"-i"
,
action
=
"store_true"
,
dest
=
"info"
,
default
=
0
,
help
=
"read the whole film before displaying it (get info)"
)
parser
.
add_option
(
"--stepsize"
,
action
=
"store"
,
dest
=
"stepsize"
,
type
=
"int"
,
default
=
1
,
help
=
"size of step"
,
metavar
=
" INT"
)
parser
.
add_option
(
"--delay"
,
action
=
"store"
,
dest
=
"delay"
,
type
=
"float"
,
default
=
0.
,
help
=
"delay before starting in auto mode"
,
metavar
=
" FLOAT"
)
parser
.
add_option
(
"--presentation"
,
action
=
"store_true"
,
dest
=
"presentation"
,
default
=
0
,
help
=
"choose parameters for presentation"
)
parser
.
add_option
(
"--loop"
,
action
=
"store_true"
,
dest
=
"loop"
,
default
=
0
,
help
=
"loop on"
)
parser
.
add_option
(
"--rgb"
,
action
=
"store_true"
,
dest
=
"rgb"
,
default
=
0
,
help
=
"rgb mode"
)
parser
.
add_option
(
"-b"
,
"--background"
,
action
=
"store"
,
dest
=
"background"
,
type
=
"string"
,
default
=
'black'
,
help
=
"palette name"
,
metavar
=
" COLOR"
)
(
options
,
args
)
=
parser
.
parse_args
()
palette
=
options
.
palette
zoom
=
options
.
zoom
speed
=
options
.
speed
stepsize
=
options
.
stepsize
info
=
options
.
info
fullscreen
=
options
.
fullscreen
auto
=
options
.
auto
nopalette
=
options
.
nopalette
nocontroll
=
options
.
nocontroll
notime
=
options
.
notime
delay
=
options
.
delay
background
=
options
.
background
loop
=
options
.
loop
rgb
=
options
.
rgb
if
options
.
presentation
:
fullscreen
=
1
nopalette
=
1
nocontroll
=
1
notime
=
1
if
len
(
args
)
==
0
:
print
"you must specify a filename"
sys
.
exit
(
0
)
return
args
[
0
],
palette
,
zoom
,
speed
,
info
,
fullscreen
,
auto
,
nopalette
,
nocontroll
,
notime
,
delay
,
background
,
loop
,
rgb
,
stepsize
####################################################################################
#
# Main Class
#
####################################################################################
from
Tkinter
import
*
import
os
from
tkFileDialog
import
askopenfilename
class
App
:
def
__init__
(
self
,
master
,
fname_init
,
palette_init
,
zoom_init
,
speed_init
,
info_init
,
fullscreen
,
auto
,
nopalette
,
nocontroll
,
notime
,
delay
,
background
,
loop
,
rgb
,
stepsize
):
# global variables
self
.
master
=
master
self
.
npic
=
0
self
.
stopfl
=
0
self
.
fnopen
=
0
self
.
stepfl
=
0
self
.
strtime
=
StringVar
()
self
.
current_fname
=
fname_init
self
.
subfname
=
os
.
path
.
basename
(
self
.
current_fname
)
# look at the availables colormap tables
self
.
tables
=
glob
.
glob
(
os
.
path
.
join
(
PALETTEDIR
,
'*'
))
self
.
tables
.
sort
()
# create a pallette object
self
.
palette
=
Palette
()
# parameters
self
.
speed
=
speed_init
self
.
zoom
=
float
(
zoom_init
)
self
.
info
=
info_init
self
.
fullscreen
=
fullscreen
self
.
auto
=
auto
self
.
nopalette
=
nopalette
self
.
nocontroll
=
nocontroll
self
.
notime
=
notime
self
.
delay
=
delay
self
.
background
=
background
self
.
loop
=
loop
self
.
stepsize
=
stepsize
if
rgb
:
self
.
mode
=
'image_rgb'
else
:
self
.
mode
=
'image'
# init sequence
if
self
.
current_fname
!=
""
:
self
.
film_init
()
else
:
self
.
default_init
()
###############
# control panel
###############
# frame
frame
=
Frame
(
master
)
frame
.
grid
(
column
=
0
,
row
=
0
,
sticky
=
N
+
S
+
E
+
W
)
self
.
frame
=
frame
if
fullscreen
and
auto
:
self
.
draw_win_control
(
0
)
else
:
self
.
draw_win_control
(
1
)
if
palette_init
!=
None
:
if
os
.
path
.
isfile
(
palette_init
):
palette_name
=
palette_init
else
:
palette_name
=
os
.
path
.
join
(
PALETTEDIR
,
palette_init
)
self
.
palette
.
change
(
palette_name
)
self
.
stopfl
=
0
# if needed, open the film window and
# display the first image
if
self
.
current_fname
!=
""
:
self
.
displayfilm
()
if
self
.
auto
:
self
.
run
()
###########################
def
draw_win_control
(
self
,
mode
):
###########################
self
.
frame_controll
=
Frame
(
self
.
frame
)
if
not
self
.
nocontroll
:
self
.
frame_controll
.
grid
(
column
=
0
,
row
=
0
,
sticky
=
E
+
N
+
S
+
W
)
# run button
self
.
runBut
=
Button
(
self
.
frame_controll
,
text
=
"RUN"
,
fg
=
"black"
,
command
=
self
.
run
)
self
.
runBut
.
grid
(
column
=
0
,
row
=
1
,
sticky
=
E
+
N
+
S
+
W
)
# stop button
self
.
stopBut
=
Button
(
self
.
frame_controll
,
text
=
"STOP"
,
fg
=
"black"
,
command
=
self
.
stop
)
self
.
stopBut
.
grid
(
column
=
0
,
row
=
2
,
sticky
=
E
+
N
+
S
+
W
)
# step button
self
.
stepBut
=
Button
(
self
.
frame_controll
,
text
=
"STEP"
,
fg
=
"black"
,
command
=
self
.
step
)
self
.
stepBut
.
grid
(
column
=
1
,
row
=
1
,
sticky
=
E
+
N
+
S
+
W
)
# reset button
self
.
resetBut
=
Button
(
self
.
frame_controll
,
text
=
"RESET"
,
fg
=
"black"
,
command
=
self
.
reset
)
self
.
resetBut
.
grid
(
column
=
2
,
row
=
1
,
sticky
=
E
+
N
+
S
+
W
)
# back button
self
.
backBut
=
Button
(
self
.
frame_controll
,
text
=
"BACK"
,
fg
=
"black"
,
command
=
self
.
back
)
self
.
backBut
.
grid
(
column
=
1
,
row
=
2
,
sticky
=
E
+
N
+
S
+
W
)
# quit button
self
.
quitBut
=
Button
(
self
.
frame_controll
,
text
=
"QUIT"
,
fg
=
"black"
,
command
=
self
.
quit
)
self
.
quitBut
.
grid
(
column
=
2
,
row
=
2
,
sticky
=
E
+
N
+
S
+
W
)
# zoom button
self
.
resetBut
=
Button
(
self
.
frame_controll
,
text
=
"ZOOM"
,
fg
=
"black"
,
command
=
lambda
zoom
=
self
.
makezoom
:
zoom
(
1.25
))
self
.
resetBut
.
grid
(
column
=
0
,
row
=
3
,
sticky
=
E
+
N
+
S
+
W
)
# unzoom button
self
.
resetBut
=
Button
(
self
.
frame_controll
,
text
=
"UNZOOM"
,
fg
=
"black"
,
command
=
lambda
zoom
=
self
.
makezoom
:
zoom
(
0.8
))
self
.
resetBut
.
grid
(
column
=
1
,
row
=
3
,
sticky
=
E
+
N
+
S
+
W
)
# reset zoom button
self
.
resetzoomBut
=
Button
(
self
.
frame_controll
,
text
=
"RESET ZOOM"
,
fg
=
"black"
,
command
=
self
.
reset_zoom
)
self
.
resetzoomBut
.
grid
(
column
=
2
,
row
=
3
,
sticky
=
E
+
N
+
S
+
W
)
# label for the file entry
self
.
filenameLab
=
Label
(
self
.
frame_controll
,
text
=
"filename :"
)
self
.
filenameLab
.
grid
(
column
=
0
,
row
=
0
,
sticky
=
E
+
N
+
S
+
W
)
if
self
.
info
:
# labels for the starting time
self
.
starttimeLab
=
Label
(
self
.
frame_controll
,
text
=
"start. time :"
)
self
.
starttimeLab
.
grid
(
column
=
5
,
row
=
1
,
sticky
=
E
+
N
+
S
+
W
)
# entry for the starting time
self
.
starttimeEnt
=
Entry
(
self
.
frame_controll
,
width
=
5
)
self
.
starttimeEnt
.
grid
(
column
=
6
,
row
=
1
,
sticky
=
E
+
N
+
S
+
W
)
self
.
starttimeEnt
.
insert
(
INSERT
,
self
.
starttime
)
self
.
starttimeEnt
.
bind
(
"<Return>"
,
self
.
changestarttime
)
# labels for the stoping time
self
.
stoptimeLab
=
Label
(
self
.
frame_controll
,
text
=
"stop. time :"
)
self
.
stoptimeLab
.
grid
(
column
=
5
,
row
=
2
,
sticky
=
E
+
N
+
S
+
W
)
# entry for the stopping time
self
.
stoptimeEnt
=
Entry
(
self
.
frame_controll
,
width
=
5
)
self
.
stoptimeEnt
.
grid
(
column
=
6
,
row
=
2
,
sticky
=
E
+
N
+
S
+
W
)
self
.
stoptimeEnt
.
insert
(
INSERT
,
self
.
stoptime
)
self
.
stoptimeEnt
.
bind
(
"<Return>"
,
self
.
changestoptime
)
# labels for the starting pic
self
.
startpicLab
=
Label
(
self
.
frame_controll
,
text
=
"start. pic :"
)
self
.
startpicLab
.
grid
(
column
=
7
,
row
=
1
,
sticky
=
E
+
N
+
S
+
W
)
# entry for the starting pic
self
.
startpicEnt
=
Entry
(
self
.
frame_controll
,
width
=
5
)
self
.
startpicEnt
.
grid
(
column
=
8
,
row
=
1
,
sticky
=
E
+
N
+
S
+
W
)
self
.
startpicEnt
.
insert
(
INSERT
,
`self.startpic`
)
self
.
startpicEnt
.
bind
(
"<Return>"
,
self
.
changestartpic
)
# labels for the stoping pic
self
.
stoppicLab
=
Label
(
self
.
frame_controll
,
text
=
"stop. pic :"
)
self
.
stoppicLab
.
grid
(
column
=
7
,
row
=
2
,
sticky
=
E
+
N
+
S
+
W
)
# entry for the stopping pic
self
.
stoppicEnt
=
Entry
(
self
.
frame_controll
,
width
=
5
)
self
.
stoppicEnt
.
grid
(
column
=
8
,
row
=
2
,
sticky
=
E
+
N
+
S
+
W
)
self
.
stoppicEnt
.
insert
(
INSERT
,
self
.
stoppic
)
self
.
stoppicEnt
.
bind
(
"<Return>"
,
self
.
changestoppic
)
# labels for the step size
self
.
stepsizeLab
=
Label
(
self
.
frame_controll
,
text
=
"step size :"
)
self
.
stepsizeLab
.
grid
(
column
=
7
,
row
=
3
,
sticky
=
E
+
N
+
S
+
W
)
# entry for the step size
self
.
stepsizeEnt
=
Entry
(
self
.
frame_controll
,
width
=
3
)
self
.
stepsizeEnt
.
grid
(
column
=
8
,
row
=
3
,
sticky
=
E
+
N
+
S
+
W
)
self
.
stepsizeEnt
.
insert
(
INSERT
,
self
.
stepsize
)
# entry for the filename
self
.
fname
=
Entry
(
self
.
frame_controll
)
self
.
fname
.
grid
(
column
=
1
,
row
=
0
,
columnspan
=
10
,
sticky
=
E
+
N
+
S
+
W
)
self
.
fname
.
insert
(
INSERT
,
self
.
current_fname
)
self
.
fname
.
bind
(
"<Return>"
,
self
.
fnameentry
)
# frame for the palette
if
not
self
.
nocontroll
and
not
self
.
nopalette
:
self
.
paletteFrame
=
Frame
(
self
.
frame_controll
,
height
=
48
,
width
=
512
)
self
.
paletteFrame
.
grid
(
column
=
0
,
row
=
5
,
columnspan
=
10
)
self
.
palette
.
addFrame
(
self
.
paletteFrame
)
self
.
paletteFrame
.
bind
(
'<ButtonRelease>'
,
self
.
redisplay
)
# menus
self
.
menubar
=
Menu
(
self
.
master
)
self
.
filemenu
=
Menu
(
self
.
menubar
,
tearoff
=
0
)
self
.
filemenu
.
add_command
(
label
=
"open"
,
command
=
self
.
open
)
self
.
filemenu
.
add_command
(
label
=
"reload"
,
command
=
self
.
reload
)
self
.
filemenu
.
add_command
(
label
=
"save image"
,
command
=
self
.
save
)
self
.
filemenu
.
add_separator
()
self
.
filemenu
.
add_command
(
label
=
"quit"
,
command
=
self
.
quit
)
self
.
colormapmenu
=
Menu
(
self
.
menubar
,
tearoff
=
0
)
for
table
in
self
.
tables
:
self
.
colormapmenu
.
add_command
(
label
=
os
.
path
.
basename
(
table
),
command
=
lambda
table
=
table
,
colormap
=
self
.
colormap
:
colormap
(
table
))
self
.
speedmenu
=
Menu
(
self
.
menubar
,
tearoff
=
0
)
self
.
speedmenu
.
add_command
(
label
=
"speed 1"
,
command
=
lambda
speed
=
self
.
set_speed
:
speed
(
1
))
self
.
speedmenu
.
add_command
(
label
=
"speed 50"
,
command
=
lambda
speed
=
self
.
set_speed
:
speed
(
50
))
self
.
speedmenu
.
add_command
(
label
=
"speed 100"
,
command
=
lambda
speed
=
self
.
set_speed
:
speed
(
100
))
self
.
zoommenu
=
Menu
(
self
.
menubar
,
tearoff
=
0
)
self
.
zoommenu
.
add_command
(
label
=
"x 1.25"
,
command
=
lambda
zoom
=
self
.
makezoom
:
zoom
(
1.25
))
self
.
zoommenu
.
add_command
(
label
=
"x 2.00"
,
command
=
lambda
zoom
=
self
.
makezoom
:
zoom
(
2.
))
self
.
zoommenu
.
add_command
(
label
=
"x 0.80"
,
command
=
lambda
zoom
=
self
.
makezoom
:
zoom
(
0.8
))
self
.
zoommenu
.
add_command
(
label
=
"x 0.50"
,
command
=
lambda
zoom
=
self
.
makezoom
:
zoom
(
0.5
))
self
.
menubar
.
add_cascade
(
label
=
"File"
,
menu
=
self
.
filemenu
)
self
.
menubar
.
add_cascade
(
label
=
"Colormap"
,
menu
=
self
.
colormapmenu
)
self
.
menubar
.
add_cascade
(
label
=
"Speed"
,
menu
=
self
.
speedmenu
)
self
.
menubar
.
add_cascade
(
label
=
"Zoom"
,
menu
=
self
.
zoommenu
)
if
not
self
.
fullscreen
and
not
self
.
nocontroll
:
self
.
master
.
config
(
menu
=
self
.
menubar
)
# bind key
self
.
master
.
bind
(
'<KeyPress>'
,
self
.
onKeyPress
)
if
self
.
nocontroll
:
self
.
master
.
bind
(
'<Button-1>'
,
lambda
event
:
self
.
step
())
self
.
master
.
bind
(
'<Button-2>'
,
lambda
event
:
self
.
reset
())
self
.
master
.
bind
(
'<Button-3>'
,
lambda
event
:
self
.
back
())
self
.
master
.
bind
(
'<Double-Button-1>'
,
lambda
event
:
self
.
run
())
self
.
master
.
bind
(
'<Double-Button-2>'
,
lambda
event
:
self
.
quit
())
self
.
master
.
bind
(
'<Double-Button-3>'
,
lambda
event
:
self
.
stop
())
##########################
def
onKeyPress
(
self
,
event
):
##########################
if
event
.
char
==
'r'
:
# run
self
.
run
()
if
event
.
char
==
's'
:
# stop
self
.
stop
()
if
event
.
char
==
'n'
:
# step
self
.
step
()
if
event
.
char
==
'b'
:
# back
self
.
back
()
if
event
.
char
==
u'
\u000D
'
:
# reset (enter)
self
.
reset
()
if
event
.
char
==
'q'
:
# quit
self
.
quit
()
if
event
.
char
==
u'
\u001B
'
:
# quit (escape)
self
.
quit
()
# if event.char == 'f': # fullscreen
# self.master.overrideredirect(1)
###########################
def
colormap_slider
(
self
,
event
):
###########################
self
.
colormap
(
self
.
paletteSc
.
get
())
###########################
def
default_init
(
self
):
###########################
self
.
starttime
=
'0.'
self
.
stoptime
=
'0.'
self
.
startpic
=
0
self
.
stoppic
=
0
###########################
def
film_init
(
self
):
###########################
# parameters
npic
=
0
self
.
openfilm
()
if
self
.
fnopen
==
1
:
# first, read the header and find numByte
self
.
header
=
self
.
film
.
read
(
256
)
if
len
(
self
.
header
)
==
256
:
self
.
film
.
seek
(
240
)
str1
=
self
.
film
.
read
(
8
)
str2
=
self
.
film
.
read
(
8
)
if
(
str1
!=
" "
and
str2
!=
" "
):
self
.
naxis1_init
=
string
.
atoi
(
str1
)
self
.
naxis2_init
=
string
.
atoi
(
str2
)
else
:
self
.
naxis1_init
=
256
self
.
naxis2_init
=
192
self
.
numByte
=
self
.
naxis1_init
self
.
numLine
=
self
.
naxis2_init
self
.
naxis1
=
self
.
naxis1_init
*
self
.
zoom
self
.
naxis2
=
self
.
naxis2_init
*
self
.
zoom
self
.
shape
=
(
self
.
naxis1_init
,
self
.
naxis2_init
)
self
.
zshape
=
(
self
.
naxis1
,
self
.
naxis2
)
if
self
.
numByte
<
256
:
self
.
headerlength
=
256
else
:
self
.
headerlength
=
self
.
numByte
# !!!!!!!! go to the top of the file !!!!!!!! #
self
.
film
.
seek
(
0
)
self
.
film
.
close
()
self
.
film
=
Movie
.
Movie
(
self
.
current_fname
)
self
.
film
.
open
()
#self.time,self.image = self.film.read_one_with_time(mode='image')
#self.starttime = self.time[:8]
#npic = npic + 1
'''
# reading next label
self.time = self.film.read(self.headerlength)
self.starttime = self.time[:8]
if len(self.time) == self.headerlength:
# reading next data
self.data = self.film.read(self.numByte*self.numLine)
if len(self.data) == self.numByte*self.numLine:
# converting time
self.time = self.time[:8]
npic = npic + 1
# converting data
self.image = Image.fromstring("P",self.shape,self.data)
ok = 1
if self.info:
while ok:
ok = 0
# reading next label
ctime = self.film.read(self.headerlength)
if len(ctime) == self.headerlength:
# reading next data
self.data = self.film.read(self.numByte*self.numLine)
if len(self.data) == self.numByte*self.numLine:
ok = 1
npic = npic + 1
self.stoptime = ctime[:8]
'''
# go to the top of the file and miss the header
#self.film.seek(0)
# read the first image
self
.
readpic
()
# parameters
if
self
.
info
:
npcitot
=
npic
self
.
npic
=
1
self
.
startpic
=
1
self
.
stoppic
=
npic
self
.
ntotime
=
(
string
.
atof
(
self
.
stoptime
)
-
string
.
atof
(
self
.
starttime
))
/
(
npic
-
1
)
if
self
.
ntotime
==
0
:
self
.
timeton
=
1.0
else
:
self
.
timeton
=
1.
/
self
.
ntotime
self
.
firsttime
=
string
.
atof
(
self
.
starttime
)
self
.
npicmax
=
self
.
stoppic
self
.
npicmin
=
self
.
startpic
###########################
def
open
(
self
):
###########################
name
=
askopenfilename
()
if
name
!=
""
:
self
.
current_fname
=
name
self
.
fname
.
delete
(
0
,
len
(
self
.
fname
.
get
())
+
1
)
self
.
fname
.
insert
(
INSERT
,
self
.
current_fname
)
self
.
reload
()
###########################
def
reload
(
self
):
###########################
self
.
film_init
()
if
self
.
info
:
# erasing old values
self
.
starttimeEnt
.
delete
(
0
,
len
(
self
.
starttimeEnt
.
get
())
+
1
)
self
.
stoptimeEnt
.
delete
(
0
,
len
(
self
.
stoptimeEnt
.
get
())
+
1
)
self
.
startpicEnt
.
delete
(
0
,
len
(
self
.
startpicEnt
.
get
())
+
1
)
self
.
stoppicEnt
.
delete
(
0
,
len
(
self
.
stoppicEnt
.
get
())
+
1
)
# inserting new values
self
.
startpicEnt
.
insert
(
INSERT
,
`self.startpic`
)
self
.
stoppicEnt
.
insert
(
INSERT
,
`self.stoppic`
)
self
.
starttimeEnt
.
insert
(
INSERT
,
self
.
starttime
)
self
.
stoptimeEnt
.
insert
(
INSERT
,
self
.
stoptime
)
# displaying first image
self
.
subfname
=
os
.
path
.
basename
(
self
.
current_fname
)
self
.
set_size
()
self
.
film_window
.
title
(
self
.
subfname
)
###########################
def
readpic
(
self
):
###########################
self
.
time
,
self
.
image
=
self
.
film
.
read_one_with_time
(
mode
=
self
.
mode
)
if
self
.
time
==
None
:
return
0
self
.
time
=
self
.
time
[:
8
]
self
.
npic
=
self
.
npic
+
1
return
1
'''
# reading next label
self.time = self.film.read(self.headerlength)
if len(self.time) == self.headerlength:
# reading next data
self.data = self.film.read(self.numByte*self.numLine)
if len(self.data) == self.numByte*self.numLine:
# converting time
self.time = self.time[:8]
self.npic = self.npic + 1
# converting data
self.image = Image.fromstring("P",self.shape,self.data)
return(1)
else:
return(0)
'''
###########################
def
draw_win_film
(
self
):
###########################
try
:
self
.
film_window
except
AttributeError
:
if
not
self
.
fullscreen
and
not
self
.
nocontroll
:
self
.
film_window
=
Toplevel
()
self
.
film_window
.
title
(
self
.
subfname
)
else
:
self
.
film_window
=
Frame
(
self
.
frame
,
height
=
48
,
width
=
512
)
self
.
film_window
.
grid
(
column
=
0
,
row
=
6
,
columnspan
=
10
,
sticky
=
W
+
E
+
N
+
S
)
self
.
film_window
.
bind
(
'<ButtonRelease>'
,
self
.
redisplay
)
# frame
self
.
frame_film
=
Frame
(
self
.
film_window
)
self
.
frame_film
.
grid
(
column
=
0
,
row
=
0
,
sticky
=
W
+
E
+
N
+
S
)
# label for the time
if
not
self
.
notime
:
self
.
timeLab
=
Label
(
self
.
frame_film
,
textvariable
=
self
.
strtime
)
self
.
timeLab
.
grid
(
column
=
0
,
row
=
0
,
sticky
=
W
+
E
+
N
+
S
)
# canvas for the film
self
.
canvas
=
Canvas
(
self
.
frame_film
,
height
=
self
.
naxis2
,
width
=
self
.
naxis1
,
background
=
self
.
background
)
self
.
canvas
.
grid
(
column
=
0
,
row
=
1
,
sticky
=
W
+
E
+
N
+
S
)
# frame for the palette
if
self
.
nocontroll
and
not
self
.
nopalette
:
self
.
paletteFilmFrame
=
Frame
(
self
.
frame_film
,
height
=
48
,
width
=
512
)
self
.
paletteFilmFrame
.
grid
(
column
=
0
,
row
=
2
)
self
.
palette
.
addFrame
(
self
.
paletteFilmFrame
)
self
.
paletteFilmFrame
.
bind
(
'<ButtonRelease>'
,
self
.
redisplay
)
# bind events
self
.
film_window
.
bind
(
"<Destroy>"
,
self
.
destroy_film
)
# bind key
self
.
film_window
.
bind
(
'<KeyPress>'
,
self
.
onKeyPress
)
###########################
def
destroy_film
(
self
,
event
):
###########################
try
:
del
self
.
film_window
except
AttributeError
:
return
###########################
def
reset_zoom
(
self
):
###########################
try
:
self
.
film_window
.
destroy
self
.
zoom
=
1.
self
.
naxis1
=
self
.
naxis1_init
self
.
naxis2
=
self
.
naxis2_init
self
.
zshape
=
(
self
.
naxis1
,
self
.
naxis2
)
self
.
canvas
.
config
(
height
=
self
.
naxis2
,
width
=
self
.
naxis1
)
except
AttributeError
:
pass
self
.
displayfilm
()
###########################
def
set_size
(
self
):
###########################
try
:
self
.
film_window
.
destroy
self
.
naxis1
=
self
.
naxis1_init
*
self
.
zoom
self
.
naxis2
=
self
.
naxis2_init
*
self
.
zoom
self
.
zshape
=
(
self
.
naxis1
,
self
.
naxis2
)
self
.
canvas
.
config
(
height
=
self
.
naxis2
,
width
=
self
.
naxis1
)
except
AttributeError
:
pass
self
.
displayfilm
()
###########################
def
makezoom
(
self
,
z
):
###########################
self
.
film_window
.
destroy
self
.
zoom
=
self
.
zoom
*
z
self
.
naxis1
=
int
(
self
.
naxis1
*
z
)
self
.
naxis2
=
int
(
self
.
naxis2
*
z
)
self
.
zshape
=
(
self
.
naxis1
,
self
.
naxis2
)
self
.
canvas
.
config
(
height
=
self
.
naxis2
,
width
=
self
.
naxis1
)
self
.
displayfilm
()
###########################
def
colormap
(
self
,
name
):
###########################
self
.
palette
.
change
(
name
)
if
self
.
stopfl
==
0
:
self
.
palette
.
draw
()
self
.
displayfilm
()
###########################
def
set_speed
(
self
,
sp
):
###########################
self
.
speed
=
sp
###########################
def
errorbox
(
self
,
txterror
):
###########################
self
.
error
=
Toplevel
()
frame
=
Frame
(
self
.
error
)
frame
.
pack
()
text0
=
Label
(
frame
,
text
=
"ERROR !"
,
fg
=
"red"
)
text0
.
pack
()
text
=
Label
(
frame
,
text
=
txterror
,
fg
=
"red"
)
text
.
pack
()
ok
=
Button
(
frame
,
text
=
"OK"
,
fg
=
"black"
,
command
=
self
.
error
.
destroy
)
ok
.
pack
()
self
.
error
.
mainloop
()
###########################
def
fnameentry
(
self
,
event
):
###########################
self
.
current_fname
=
self
.
fname
.
get
()
self
.
reload
()
###########################
def
openfilm
(
self
):
###########################
# check if the file is already open
self
.
fnopen
=
0
# check if it exists
if
os
.
path
.
exists
(
self
.
current_fname
):
try
:
self
.
film
.
close
()
except
:
None
self
.
film
=
open
(
self
.
current_fname
,
'r'
)
self
.
fnopen
=
1
else
:
self
.
film
=
None
self
.
errorbox
(
"'"
+
self
.
current_fname
+
"'"
+
" does not exist"
)
###########################
def
changestartpic
(
self
,
event
):
###########################
self
.
startpic
=
string
.
atoi
(
self
.
startpicEnt
.
get
())
if
self
.
startpic
>
self
.
npicmax
:
self
.
startpic
=
self
.
npicmax
self
.
startpicEnt
.
delete
(
0
,
len
(
self
.
startpicEnt
.
get
())
+
1
)
self
.
startpicEnt
.
insert
(
INSERT
,
`self.startpic`
)
elif
self
.
startpic
<
self
.
npicmin
:
self
.
startpic
=
self
.
npicmin
self
.
startpicEnt
.
delete
(
0
,
len
(
self
.
startpicEnt
.
get
())
+
1
)
self
.
startpicEnt
.
insert
(
INSERT
,
`self.startpic`
)
self
.
starttimeEnt
.
delete
(
0
,
len
(
self
.
starttimeEnt
.
get
())
+
1
)
self
.
starttimeEnt
.
insert
(
INSERT
,
self
.
firsttime
+
self
.
ntotime
*
(
self
.
startpic
-
1
))
###########################
def
changestoppic
(
self
,
event
):
###########################
self
.
stoppic
=
string
.
atoi
(
self
.
stoppicEnt
.
get
())
if
self
.
stoppic
>
self
.
npicmax
:
self
.
stoppic
=
self
.
npicmax
self
.
stoppicEnt
.
delete
(
0
,
len
(
self
.
stoppicEnt
.
get
())
+
1
)
self
.
stoppicEnt
.
insert
(
INSERT
,
`self.stoppic`
)
elif
self
.
stoppic
<
self
.
npicmin
:
self
.
stoppic
=
self
.
npicmin
self
.
stoppicEnt
.
delete
(
0
,
len
(
self
.
stoppicEnt
.
get
())
+
1
)
self
.
stoppicEnt
.
insert
(
INSERT
,
`self.stoppic`
)
self
.
stoptimeEnt
.
delete
(
0
,
len
(
self
.
stoptimeEnt
.
get
())
+
1
)
self
.
stoptimeEnt
.
insert
(
INSERT
,
self
.
firsttime
+
self
.
ntotime
*
(
self
.
stoppic
-
1
))
###########################
def
changestarttime
(
self
,
event
):
###########################
starttime
=
string
.
atof
(
self
.
starttimeEnt
.
get
())
self
.
startpic
=
int
(
self
.
timeton
*
(
starttime
-
self
.
firsttime
))
+
1
self
.
startpicEnt
.
delete
(
0
,
len
(
self
.
startpicEnt
.
get
())
+
1
)
self
.
startpicEnt
.
insert
(
INSERT
,
`self.startpic`
)
self
.
changestartpic
(
None
)
###########################
def
changestoptime
(
self
,
event
):
###########################
stoptime
=
string
.
atof
(
self
.
stoptimeEnt
.
get
())
self
.
stoppic
=
int
(
self
.
timeton
*
(
stoptime
-
self
.
firsttime
))
+
1
self
.
stoppicEnt
.
delete
(
0
,
len
(
self
.
stoppicEnt
.
get
())
+
1
)
self
.
stoppicEnt
.
insert
(
INSERT
,
`self.stoppic`
)
self
.
changestoppic
(
None
)
###########################
def
run
(
self
):
###########################
# parameters
if
self
.
info
:
self
.
stepsize
=
string
.
atoi
(
self
.
stepsizeEnt
.
get
())
self
.
startpic
=
string
.
atoi
(
self
.
startpicEnt
.
get
())
self
.
stoppic
=
string
.
atoi
(
self
.
stoppicEnt
.
get
())
else
:
#self.stepsize = 1
self
.
startpic
=
1
self
.
stoppic
=
1e20
# if the film is correctely open
if
self
.
fnopen
==
1
:
# if the stop button has not been pressed
if
self
.
stopfl
==
0
:
# if self.npic < self.stoppic:
if
self
.
stepsize
>
1
:
self
.
film
.
read
((
self
.
stepsize
-
1
)
*
(
self
.
numByte
*
(
self
.
numLine
)
+
self
.
headerlength
))
self
.
npic
=
self
.
npic
+
self
.
stepsize
-
1
if
self
.
readpic
():
# displaying data
self
.
displayfilm
()
# wait before begining
if
self
.
delay
!=
0
:
if
self
.
auto
:
self
.
master
.
update
()
time
.
sleep
(
self
.
delay
)
self
.
delay
=
0.
if
self
.
stepfl
==
0
:
self
.
master
.
after
(
self
.
speed
,
self
.
run
)
else
:
self
.
stepfl
=
0
else
:
# go through only if -i is enabled
if
self
.
loop
:
self
.
reset
()
self
.
run
()
# if the stop button has been pressed
else
:
self
.
stopfl
=
0
###########################
def
step
(
self
):
###########################
self
.
stepfl
=
1
self
.
run
()
###########################
def
back
(
self
):
###########################
if
self
.
mode
==
'image_rgb'
:
fac
=
3
else
:
fac
=
1
self
.
stepfl
=
1
if
self
.
fnopen
==
1
:
current_byte
=
self
.
film
.
film
.
tell
()
new_byte
=
current_byte
-
self
.
stepsize
*
2
*
(
self
.
numByte
*
(
self
.
numLine
)
+
self
.
headerlength
)
*
fac
if
new_byte
<
0
:
self
.
film
.
film
.
seek
(
0
)
self
.
npic
=
0
else
:
self
.
film
.
film
.
seek
(
new_byte
)
self
.
npic
=
self
.
npic
-
2
*
self
.
stepsize
self
.
stepfl
=
1
self
.
run
()
###########################
def
displayfilm
(
self
):
###########################
# parameters
import
os
# open the win film if not already done
self
.
draw_win_film
()
# zoom
if
self
.
zoom
!=
1
:
zimage
=
self
.
image
.
transform
(
self
.
zshape
,
Image
.
AFFINE
,(
1.
/
self
.
zoom
,
0.
,
0.
,
0.
,
1.
/
self
.
zoom
,
0.
),
Image
.
BICUBIC
)
# no change if NEAREST is used
else
:
zimage
=
self
.
image
# include the palette
if
self
.
mode
!=
'image_rgb'
:
zimage
.
putpalette
(
self
.
palette
.
palette
)
# making the photo
self
.
photo
=
ImageTk
.
PhotoImage
(
zimage
)
# displaying the photo
self
.
canvas
.
create_image
(
0.
,
0.
,
anchor
=
NW
,
image
=
self
.
photo
)
# new value for the label
if
not
self
.
notime
:
self
.
strtime
.
set
(
self
.
time
[:
8
]
+
' ('
+
`self.npic`
+
' )'
)
###########################
def
redisplay
(
self
,
event
):
###########################
self
.
displayfilm
()
###########################
def
stop
(
self
):
###########################
self
.
film_window
.
destroy
self
.
stopfl
=
1
###########################
def
reset
(
self
):
###########################
if
self
.
fnopen
==
1
:
self
.
film
.
film
.
seek
(
0
)
self
.
npic
=
0
while
self
.
npic
!=
self
.
startpic
:
self
.
readpic
()
# displaying data
self
.
displayfilm
()
###########################
def
quit
(
self
):
###########################
#ans = askokcancel('Verify exit', "Really quit?")
#if ans: sys.exit()
sys
.
exit
()
###########################
def
save
(
self
):
###########################
savename
=
asksaveasfilename
()
if
savename
!=
""
:
#if savename[len(savename)-5:] == ".fits":
# shape = [self.naxis2,self.naxis1]
# data = fromstring(self.data,'b')
# data.shape = shape
# WriteFits(data,savename, None)
#else:
self
.
image
.
save
(
savename
)
####################################################################################
#
# MAIN
#
####################################################################################
from
PIL
import
Image
from
PIL
import
ImageDraw
from
PIL
import
ImageFont
from
PIL
import
ImagePalette
from
PIL
import
ImageTk
# parse options
fname_init
,
palette_init
,
zoom_init
,
speed_init
,
info_init
,
fullscreen
,
auto
,
nopalette
,
nocontroll
,
notime
,
delay
,
background
,
loop
,
rgb
,
stepsize
=
parse_options
()
if
not
(
os
.
path
.
exists
(
fname_init
)):
if
fname_init
!=
""
:
print
fname_init
+
" does not exist."
sys
.
exit
(
0
)
######################
# create main window
######################
root
=
Tk
()
root
.
title
(
"gmov"
)
root
.
configure
(
bg
=
background
)
if
fullscreen
:
root
.
overrideredirect
(
1
)
root
.
geometry
(
str
(
root
.
winfo_screenwidth
())
+
"x"
+
str
(
root
.
winfo_screenheight
()))
# root.focus_set()
# root.focus_force()
# root.focus_displayof()
# root.focusmodel()
# root.grab_set_global()
app
=
App
(
root
,
fname_init
,
palette_init
,
zoom_init
,
speed_init
,
info_init
,
fullscreen
,
auto
,
nopalette
,
nocontroll
,
notime
,
delay
,
background
,
loop
,
rgb
,
stepsize
)
root
.
mainloop
()
Event Timeline
Log In to Comment