def rec2gtk(r, formatd=None, rownum=0, autowin=True): """ save record array r to excel pyExcelerator worksheet ws starting at rownum. if ws is string like, assume it is a filename and save to it formatd is a dictionary mapping dtype name -> mlab.Format instances This function creates a SortedStringsScrolledWindow (derived from gtk.ScrolledWindow) and returns it. if autowin is True, a gtk.Window is created, attached to the SortedStringsScrolledWindow instance, shown and returned. If autowin=False, the caller is responsible for adding the SortedStringsScrolledWindow instance to a gtk widget and showing it. """ if formatd is None: formatd = dict() formats = [] for i, name in enumerate(r.dtype.names): dt = r.dtype[name] format = formatd.get(name) if format is None: format = mlab.defaultformatd.get(dt.type, mlab.FormatObj()) #print 'gtk fmt factory', i, name, format, type(format) format = gtkformat_factory(format, i) formatd[name] = format colheaders = r.dtype.names scroll = SortedStringsScrolledWindow(colheaders, formatd) ind = npy.arange(len(r.dtype.names)) for row in r: scroll.add_row(row) if autowin: win = gtk.Window() win.set_default_size(800,600) #win.set_geometry_hints(scroll) win.add(scroll) win.show_all() scroll.win = win return scroll
def rec2gtk(r, formatd=None, rownum=0, autowin=True): """ formatd is a dictionary mapping dtype name -> mlab.Format instances This function creates a SortedStringsScrolledWindow (derived from gtk.ScrolledWindow) and returns it. if autowin is True, a gtk.Window is created, attached to the SortedStringsScrolledWindow instance, shown and returned. If autowin=False, the caller is responsible for adding the SortedStringsScrolledWindow instance to a gtk widget and showing it. """ if formatd is None: formatd = dict() formats = [] for i, name in enumerate(r.dtype.names): dt = r.dtype[name] format = formatd.get(name) if format is None: format = mlab.defaultformatd.get(dt.type, mlab.FormatObj()) format = gtkformat_factory(format, i) formatd[name] = format colheaders = r.dtype.names scroll = SortedStringsScrolledWindow(colheaders, formatd) for row in r: scroll.add_row(row) if autowin: win = gtk.Window() win.set_default_size(800,600) #win.set_geometry_hints(scroll) win.add(scroll) win.show_all() scroll.win = win return scroll
def rec2excel(r, ws, formatd=None, rownum=0, colnum=0, nanstr='NaN', infstr='Inf'): """ save record array r to excel xlwt worksheet ws starting at rownum. if ws is string like, assume it is a filename and save to it start writing at rownum, colnum formatd is a dictionary mapping dtype name -> mlab.Format instances nanstr is the string that mpl will put into excel for np.nan value The next rownum after writing is returned """ autosave = False if isinstance(ws, six.string_types): filename = ws wb = excel.Workbook() ws = wb.add_sheet('worksheet') autosave = True if formatd is None: formatd = dict() formats = [] font = excel.Font() font.bold = True stylehdr = excel.XFStyle() stylehdr.font = font for i, name in enumerate(r.dtype.names): dt = r.dtype[name] format = formatd.get(name) if format is None: format = mlab.defaultformatd.get(dt.type, mlab.FormatObj()) format = xlformat_factory(format) ws.write(rownum, colnum + i, name, stylehdr) formats.append(format) rownum += 1 ind = np.arange(len(r.dtype.names)) for row in r: for i in ind: val = row[i] format = formats[i] val = format.toval(val) if mlab.safe_isnan(val): ws.write(rownum, colnum + i, nanstr) elif mlab.safe_isinf(val): sgn = np.sign(val) if sgn > 0: s = infstr else: s = '-%s' % infstr ws.write(rownum, colnum + i, s) elif format.xlstyle is None: ws.write(rownum, colnum + i, val) else: ws.write(rownum, colnum + i, val, format.xlstyle) rownum += 1 if autosave: wb.save(filename) return rownum
def __init__(self, r, formatd=None, stringd=None): """ r is a numpy record array formatd is a dict mapping dtype name to mlab.FormatObj instances stringd, if not None, is a dict mapping dtype names to a list of valid strings for a combo drop down editor """ if stringd is None: stringd = dict() if formatd is None: formatd = mlab.get_formatd(r) self.stringd = stringd self.callbacks = cbook.CallbackRegistry(['cell_changed']) self.r = r self.headers = r.dtype.names self.formats = [ gtkformat_factory(formatd.get(name, mlab.FormatObj()), i) for i, name in enumerate(self.headers) ] # use the gtk attached versions self.formatd = formatd = dict(zip(self.headers, self.formats)) types = [] for format in self.formats: if isinstance(format, mlab.FormatBool): types.append(gobject.TYPE_BOOLEAN) else: types.append(gobject.TYPE_STRING) self.combod = dict() if len(stringd): types.extend([gobject.TYPE_INT] * len(stringd)) keys = stringd.keys() keys.sort() valid = set(r.dtype.names) for ikey, key in enumerate(keys): assert (key in valid) combostore = gtk.ListStore(gobject.TYPE_STRING) for s in stringd[key]: combostore.append([s]) self.combod[key] = combostore, len(self.headers) + ikey gtk.ListStore.__init__(self, *types) for row in r: vals = [] for formatter, val in zip(self.formats, row): if isinstance(formatter, mlab.FormatBool): vals.append(val) else: vals.append(formatter.tostr(val)) if len(stringd): # todo, get correct index here? vals.extend([0] * len(stringd)) self.append(vals)
def rec2excel(r, ws, formatd=None, rownum=0, colnum=0): """ save record array r to excel pyExcelerator worksheet ws starting at rownum. if ws is string like, assume it is a filename and save to it start writing at rownum, colnum formatd is a dictionary mapping dtype name -> mlab.Format instances The next rownum after writing is returned """ autosave = False if cbook.is_string_like(ws): filename = ws wb = excel.Workbook() ws = wb.add_sheet('worksheet') autosave = True if formatd is None: formatd = dict() formats = [] font = excel.Font() font.bold = True stylehdr = excel.XFStyle() stylehdr.font = font for i, name in enumerate(r.dtype.names): dt = r.dtype[name] format = formatd.get(name) if format is None: format = mlab.defaultformatd.get(dt.type, mlab.FormatObj()) format = xlformat_factory(format) ws.write(rownum, colnum+i, name, stylehdr) formats.append(format) rownum+=1 ind = npy.arange(len(r.dtype.names)) for row in r: for i in ind: val = row[i] format = formats[i] val = format.toval(val) if format.xlstyle is None: ws.write(rownum, colnum+i, val) else: if mlab.safe_isnan(val): ws.write(rownum, colnum+i, 'NaN') elif mlab.safe_isinf(val): if val<0: sign='-' else: sign='+' ws.write(rownum, colnum+i, '%sInf'%sign) else: ws.write(rownum, colnum+i, val, format.xlstyle) rownum += 1 if autosave: wb.save(filename) return rownum