📄 np_printplot.py
字号:
def canstr(s): # # escape newlines in labels before saving to file # return string.replace(s, '\n', '\\n') def strip_spaces(nm): tmp = '' for c in nm: if c == ' ': tmp += '-' else: tmp += c return tmp base = self.datafile_entry.get() dir = os.path.dirname(base) #pre = string.split(base, '*')[0] print 'base =', base #print 'pre =', pre print 'dir', dir try: post = string.split(base, '*')[1] + '.' except IndexError: post = '' print 'post =', post for s in self.plot.sets: # how many data fields to save nf = 0 for f in s.data[0]: if type(f) in \ [types.IntType, types.LongType, types.FloatType]: nf += 1 else: break print 's.path =', s.path fnm = os.path.join(dir, post + os.path.basename(s.path)) self.data_nm = strip_spaces(fnm) if self.data_nm[-1] == '/': self.data_nm = self.data_nm[:-1] doit = self.check_file(self, 'data_nm', self.datafile_entry) if doit: try: f = open(self.data_nm, 'w') except IOError, s: print 'Can\'t save:' print s return f.write('#plot-title=%s\n' % (canstr(self.plot.title))) f.write('#plot-xlab=%s\n' % (canstr(self.plot.xlab))) f.write('#plot-ylab=%s\n' % (canstr(self.plot.ylab))) for d in self.plot.decs: f.write('#plot-dec=%d:%s:%s:%s\n' \ % (d.type, repr(d.coords), d.col, d.label)) for d in s.data: #f.write('%f\t%f\n' % (d[0], d[1])) f.write('%f' % (d[0])) for v in d[1:nf]: f.write('\t%f' % (v)) f.write('\n') print 'writing data file %s' % (self.data_nm) f.close() ############################################################################## def cancel(self, event=None): self.master.focus_set() self.destroy() ############################################################################## def ok(self, event=None): dosave = 0 dohard = 0 dodata = 0 self.fnm = None p = self.params p.title = self.title_entry.get() p.xlabel = self.xlabel_entry.get() p.ylabel = self.ylabel_entry.get() i = 0 for e in self.set_ents: p.sets[i].path = e.get() i = i + 1 p.lpr = self.lpr_entry.get() p.file = self.file_entry.get() #print 'dosave = %d' % ( self.dosave.get()) if self.dosave.get(): #dosave = self.check_file() dosave = self.check_file(self.params, 'file', self.file_entry) if dosave: self.fnm = self.params.file print 'fn=%s' % (self.params.file) #print dosave #print 'dosave = %d' % (dosave) #print 'dohard = %d' % ( self.dohard.get()) tmpfile = 0 if self.dohard.get(): dohard = 1 if not self.fnm: self.fnm = tempfile.mktemp() tmpfile = 1 if dosave or dohard: self.set_plot_params() self.tmp_plot() if dohard: self.hardcopy() if tmpfile: os.remove(self.fnm) dodata = self.dodata.get() if dodata: self.save_data() if dosave or dohard or dodata: self.withdraw() self.update_idletasks() self.cancel() ############################################################################## def set_plot_params(self): p = self.params pl = self.plot pl.title = p.title pl.xlab = p.xlabel pl.ylab= p.ylabel## i = 0## #print 'p.sets = ',## #print self.params.sets## for set in pl.sets:## #print 'set ',## #print 'plot %s params %s' % (set[0], p.sets[i])## set.path = p.sets[i]## #print ' -> ',## #print set[0]## i = i+1 ############################################################################## def tmp_plot(self): # don't give tedious message about tempnam security risk filterwarnings('ignore', 'tempnam is a potential security risk to your program') psfilenm = self.fnm tmpfile = os.tempnam('/tmp') cm = [0.0, 0.0, 0.0, 'green'] c = self.canv # replot more suitably # - especially transpose black/white foreground/background scaledata = (c.xmax, c.xmin, c.ymax, c.ymin, c.xscalef, c.yscalef, c.xrange, c.yrange, c.xfloats, c.yfloats) p = np_plot.Plot_canv(self.plot, c.sets, mode=c.mode, style=c.style, fgcol='black', bgcol='white', scaledata=scaledata, plotlinewidth=1, axislinewidth=2) print 'Generating postscript file %s' % (psfilenm) # turn it into postscript p.canv.postscript(file=tmpfile, colormode='color', colormap=cm, width= self.plot.wi, height = self.plot.ht-np_plot.B_TB_HT, rotate=1, pageheight='175m') # fine up nasty coarse Tk postscript engine lines print 'converting linewidths' cmd = 'sed -e \'s/1 setlinewidth/0.4 setlinewidth/g\' -e \'s/2 setlinewidth/1 setlinewidth/g\' %s > %s' % (tmpfile, psfilenm) status, output = commands.getstatusoutput(cmd) print '... exit status %d %s' % (status, output) # tidy up os.unlink(tmpfile) del(p.canv) del(p) print ' ... done' ############################################################################## def hardcopy(self): cmd = '%s %s' % (self.params.lpr, self.fnm) print 'hardcopy: %s - ' % (cmd), status, output = commands.getstatusoutput(cmd) print 'exit status %d %s' % (status, output) ############################################################################## def check_file(self, obj, field, entry_obj): fnm = getattr(obj, field) try: f = open(fnm, 'r') except: # doesn't already exist - carry on return 1 else: # check results = [] d = OverPrint(self.master, title='Overprint', msg='file already exists - overwrite?', entries = [('FILE:', fnm)],results=results) if not len(results): #print 'no res' return 0 else: fnm = results[0] print 'res = %s' % (fnm) setattr(obj, field, fnm) entry_obj.delete(0, END) entry_obj.insert(INSERT, fnm) return 1 ############################################################################## def make_params(self): p = self.params = PrintParams() p.sets = [] pl = self.plot if len(pl.title): p.title = pl.title elif len(pl.sets) == 1: p.title = pl.sets[0].path else: p.title = '' p.xlabel = pl.xlab p.ylabel = pl.ylab for set in pl.sets: p.sets.append(set) p.lpr = LPR_MONO_DEF p.file = self.make_fnm() ############################################################################## def make_fnm(self): def suffstr_add(suffstr, str): if not len(suffstr): #print 'suffstr=%s' % (str) return str elif not len(str): return suffstr elif suffstr[-1] == '.': #print 'suffstr=%s' % (suffstr + str) return suffstr + str else: #print 'suffstr=%s' % (suffstr + '.' + str) return suffstr + '.' + str basepath, suffstr = os.path.split(self.plot.path) #print basepath #print suffstr tstr = os.path.split(self.params.title)[1] if tstr == suffstr: tstr = '' if len(suffstr): suffstr += '.' if len(basepath): suffstr = '/' + suffstr if len(tstr): suffstr = suffstr_add(suffstr, tstr) # Set 0 is the boss - but may not be included in zoom i = 0 for s in self.canv.sets: indx1, indx2 = s.curr_indices[-1] if indx1 != None: break i += 1 if indx1 != 0 or indx2 != self.canv.sets[0].len - 1: if i != 0: setstr = 'set%d.' % (i) else: setstr = '' suffstr = suffstr_add(suffstr, '%sindx%d-%d' % (setstr, indx1, indx2)) if self.plot.canv_curr != 0: suffstr = suffstr_add(suffstr, 'yval%.3f-%.3f' % (self.canv.ymin, self.canv.ymax)) if self.canv.mode == np_plot.MODE_TS: suffstr = suffstr_add(suffstr, 'ts') elif self.canv.mode == np_plot.MODE_PDF: suffstr = suffstr_add(suffstr, 'pdf') else: suffstr = suffstr_add(suffstr, 'cdf') suffstr = suffstr_add(suffstr, 'ps') ## path = self.plot.path[0][0] + connstr + indxstr + yvalstr + mstr + suffstr #path = os.path.join(basepath, suffstr) path = basepath + suffstr # remove any spaces ss = string.split(path) path = '' for e in ss: path = path + e return self.strip_dot(path) ############################################################################## def strip_dot(self, path): p1, p2 = os.path.split(path) if p2[0] == '.': p2 = p2[1:] return os.path.join(p1, p2) ############################################################################################################################################################ testroot = Nonedef callback(): global testroot p = PrintParams() p.title = 'Title' p.xlabel = 'Xlabel' p.ylabel = 'Ylabel' p.sets = ['Plot1', 'Plot2'] p.lpr = 'lpr -Ppalm' p.file = '/tmp/foo' d = PrintControl(testroot, params=p)def quit(): sys.exit(0)def handle_sigint(n, f): print 'SIGINT' #handle_sigint_def(n, f) sys.exit(0)def main(): global testroot testroot = Tk() handle_sigint_def = signal(SIGINT, handle_sigint) # create a toolbar toolbar = Frame(testroot) b = Button(toolbar, text="PrintControl", width=6, command=callback) b.pack(side=LEFT, padx=2, pady=2) b = Button(toolbar, text="quit", width=6, command=quit) b.pack(side=LEFT, padx=2, pady=2) toolbar.pack(side=TOP, fill=X) mainloop() ############################################################################### Call main when run as scriptif __name__ == '__main__': main()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -