def set_color_count(self, n): if n == self.n: return if n > len(self.colorwells): # Add more color buttons for c in range(len(self.colorwells), n): from CGLtk.color import ColorWell cw = ColorWell.ColorWell(self.frame) cw.grid(row=2 * (c / 5), column=c % 5) self.colorwells.append(cw) from CGLtk import Hybrid e = Hybrid.Entry(self.frame, '', 5, '') e.frame.grid(row=2 * (c / 5) + 1, column=c % 5) e.entry.bind('<KeyPress-Return>', self.colormap_changed_cb) self.entry_fields.append(e) # Map additional colorwells for c in range(self.n, n): self.colorwells[c].grid() self.entry_fields[c].frame.grid() # Unmap extra colorwells for c in range(n, self.n): self.colorwells[c].grid_remove() self.entry_fields[c].frame.grid_remove() self.n = n
def parse_color(fields, name): if len(fields) == 0: raise syn, 'Missing %s value' % name # Color from color dialog if fields[0] in ('colorpanel', 'fromeditor', 'editor'): from CGLtk.color import ColorWell if not ColorWell._colorPanel: from chimera import dialogs dialogs.display("color editor") raise syn, 'Choose color in panel first' return ColorWell.colorPanel().rgba # Chimera color defined with colordef from chimera import Color c = Color.lookup(fields[0]) if c: return c.rgba() try: # Tk color name. from chimera.tkgui import app color = [c / 65535.0 for c in app.winfo_rgb(fields[0])] except: # Comma separated list of rgb or rgba float values. color = parse_values(fields, 'color', float, (3, 4)) return color
def parse_color(fields, name): if len(fields) == 0: raise syn, 'Missing %s value' % name # Color from color dialog if fields[0] in ('colorpanel', 'fromeditor', 'editor'): from CGLtk.color import ColorWell if not ColorWell._colorPanel: from chimera import dialogs dialogs.display("color editor") raise syn, 'Choose color in panel first' return ColorWell.colorPanel().rgba # Chimera color defined with colordef from chimera import Color c = Color.lookup(fields[0]) if c: return c.rgba() try: # Tk color name. from chimera.tkgui import app color = [c/65535.0 for c in app.winfo_rgb(fields[0])] except: # Comma separated list of rgb or rgba float values. color = parse_values(fields, 'color', float, (3,4)) return color
def fillInUI(self, parent): self.default_color = (0, 0, 0.8, 1) t = parent.winfo_toplevel() self.toplevel_widget = t t.withdraw() parent.columnconfigure(0, weight=1) row = 0 import Tkinter from CGLtk import Hybrid mmf = Tkinter.Frame(parent) mmf.grid(row=row, column=0, sticky='w') row = row + 1 mb = Hybrid.Option_Menu(mmf, 'Use mouse ', 'button 1', 'button 2', 'button 3', 'ctrl button 1', 'ctrl button 2', 'ctrl button 3') mb.variable.set('ctrl button 3') mb.frame.grid(row=0, column=0, sticky='w') mb.add_callback(self.bind_mouse_button_cb) self.mouse_button = mb mbl = Tkinter.Label(mmf, text=' to choose blobs') mbl.grid(row=0, column=1, sticky='w') crf = Tkinter.Frame(parent) crf.grid(row=row, column=0, sticky='ew') crf.columnconfigure(1, weight=1) row = row + 1 cl = Tkinter.Label(crf, text='Color blob ') cl.grid(row=0, column=0, sticky='w') from CGLtk.color import ColorWell sc = ColorWell.ColorWell(crf, color=self.default_color) sc.grid(row=0, column=1, sticky='w') self.blob_color = sc msg = Tkinter.Label(parent, anchor='w', justify='left') msg.grid(row=row, column=0, sticky='ew') row = row + 1 self.message_label = msg callbacks = (self.mouse_down_cb, self.mouse_drag_cb, self.mouse_up_cb) icon = self.mouse_mode_icon('pickblob.gif') from chimera import mousemodes mousemodes.addFunction('pick blobs', callbacks, icon) self.bind_mouse_button_cb()
def fillInUI(self, parent): self.toplevel_widget = parent.winfo_toplevel() self.toplevel_widget.withdraw() row = 0 import Tkinter from CGLtk import Hybrid from surfcaps import capper c = capper() cp = Hybrid.Checkbutton(parent, 'Cap surfaces at clip planes', c.caps_shown()) cp.button.grid(row=row, column=0, sticky='w') row = row + 1 self.show_caps = cp.variable self.show_caps.add_callback(self.settings_changed_cb) ccf = Tkinter.Frame(parent) ccf.grid(row=row, column=0, sticky='w') row = row + 1 ucc = Hybrid.Checkbutton(ccf, 'Use cap color ', not c.cap_color is None) ucc.button.grid(row=0, column=0, sticky='w') self.use_cap_color = ucc.variable self.use_cap_color.add_callback(self.settings_changed_cb) from CGLtk.color import ColorWell cc = ColorWell.ColorWell(ccf, callback=self.settings_changed_cb) self.cap_color = cc rgba = c.cap_color if rgba is None: rgba = (1, 1, 1, 1) cc.showColor(rgba, doCallback=0) cc.grid(row=0, column=1, sticky='w') cs = Hybrid.Radiobutton_Row(parent, 'Cap style: ', ('solid', 'mesh'), self.settings_changed_cb) cs.frame.grid(row=row, column=0, sticky='w') if c.mesh_style: style = 'mesh' else: style = 'solid' cs.variable.set(style, invoke_callbacks=False) row = row + 1 self.cap_style = cs.variable sf = Hybrid.Entry(parent, 'Mesh subdivision factor', 4, '%g' % c.subdivision_factor) sf.frame.grid(row=row, column=0, sticky='w') row = row + 1 self.subdivision_factor = sf.variable sf.entry.bind('<KeyPress-Return>', self.settings_changed_cb) cd = Hybrid.Entry(parent, 'Cap to clip plane distance', 5, '%.3g' % c.cap_offset) cd.frame.grid(row=row, column=0, sticky='w') row = row + 1 self.cap_offset = cd.variable cd.entry.bind('<KeyPress-Return>', self.settings_changed_cb) import SimpleSession chimera.triggers.addHandler(SimpleSession.SAVE_SESSION, self.save_session_cb, None) chimera.replyobj.status("Capping surfaces might reduce responsiveness", color="orange red")
def fillInUI(self, parent): self.phantom_device = None self.cursor_model = None self.phantom_handler = None self.gradient_force = None self.phantom_button_down = 0 self.last_phantom_transform = None self.last_roll = None self.key_callback_registered = None self.mode = 'cursor' # 'cursor', 'move models', 'zoom', # 'contour level', 'move marker' self.command_list_shown = False import Tkinter from CGLtk import Hybrid row = 0 po = Hybrid.Checkbutton_Row(parent, 'Enable', ('cursor', 'forces', 'key commands')) po.frame.grid(row=row, column=0, sticky='w') row = row + 1 self.phantom_on, self.force_field, self.commands = \ [c.variable for c in po.checkbuttons] self.phantom_on.add_callback(self.settings_changed_cb) self.force_field.add_callback(self.settings_changed_cb) self.commands.add_callback(self.toggle_commands_cb) cf = Tkinter.Frame(parent) cf.grid(row=row, column=0, sticky='w') row = row + 1 cs = Hybrid.Option_Menu(cf, 'Cursor shape ', 'cross', 'jack', 'sphere', 'volume crosshair') cs.frame.grid(row=0, column=0, sticky='nw') row = row + 1 cs.variable.set('jack') cs.add_callback(self.settings_changed_cb) self.cursor_shape = cs.variable from VolumeViewer import active_volume v = active_volume() if v: csize = '%.3g' % (10 * max(v.data.step)) else: csize = '1' cs = Hybrid.Entry(cf, ' size ', 5, csize) cs.frame.grid(row=0, column=1, sticky='w') cs.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.cursor_size = cs.variable cl = Tkinter.Label(cf, text=' color ') cl.grid(row=0, column=2, sticky='w') from CGLtk.color import ColorWell cc = ColorWell.ColorWell(cf, callback=self.settings_changed_cb) self.cursor_color = cc cc.showColor((0, 0.5, 1), doCallback=0) cc.grid(row=0, column=3, sticky='w') sp = Hybrid.Popup_Panel(parent) spf = sp.frame spf.grid(row=row, column=0, sticky='news') spf.grid_remove() spf.columnconfigure(0, weight=1) self.settings_panel = sp.panel_shown_variable row += 1 srow = 0 cb = sp.make_close_button(spf) cb.grid(row=srow, column=1, sticky='e') pr = Hybrid.Entry(spf, 'Phantom physical range (mm) ', 5, '200') pr.frame.grid(row=srow, column=0, sticky='w') srow += 1 pr.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.phantom_range = pr.variable mf = Hybrid.Entry(spf, 'Maximum force (lbs) ', 5, '.4') mf.frame.grid(row=srow, column=0, sticky='w') srow += 1 mf.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.maximum_force = mf.variable af = Hybrid.Checkbutton(spf, 'Auto-adjust force constant', 1) af.button.grid(row=srow, column=0, sticky='w') srow += 1 self.auto_adjust_force_constant = af.variable self.force_field.add_callback(self.settings_changed_cb) fc = Hybrid.Logarithmic_Scale(spf, 'Force constant ', .0001, 100, 1, '%.2g') fc.frame.grid(row=srow, column=0, sticky='ew') srow += 1 fc.set_value(1) fc.callback(self.force_constant_changed_cb) fc.entry.bind('<KeyPress-Return>', self.force_constant_changed_cb) self.force_constant = fc vf = Tkinter.Frame(spf) vf.grid(row=srow, column=0, sticky='ew') srow += 1 self.label_row(vf, 0, ('', 'x', 'y', 'z')) pl = self.label_row(vf, 1, ('Phantom position', '', '', '')) self.phantom_position_labels = pl[1:] cpl = self.label_row(vf, 2, ('Chimera position', '', '', '')) self.chimera_position_labels = cpl[1:] vpl = self.label_row(vf, 3, ('Volume position', '', '', '')) self.volume_position_labels = vpl[1:] vil = self.label_row(vf, 4, ('Volume index', '', '', '')) self.volume_index_labels = vil[1:] gl = self.label_row(vf, 5, ('Gradient', '', '', '')) self.gradient_labels = gl[1:] fl = self.label_row(vf, 6, ('Force', '', '', '')) self.force_labels = fl[1:] dvl = self.label_row(vf, 7, ('Data value', '')) self.data_value_label = dvl[1]
def fillInUI(self, parent): self.default_radius = 1 self.default_color = (1,0.6,0.8,.5) # Pink eraser t = parent.winfo_toplevel() self.toplevel_widget = t t.withdraw() parent.columnconfigure(0, weight = 1) row = 0 import Tkinter from CGLtk import Hybrid sh = Hybrid.Checkbutton(parent, 'Show volume-erasing sphere ', True) sh.button.grid(row = row, column = 0, sticky = 'w') row = row + 1 self.show_sphere_var = sh.variable sh.callback(self.show_sphere_cb) crf = Tkinter.Frame(parent) crf.grid(row = row, column = 0, sticky = 'ew') crf.columnconfigure(2, weight = 1) row = row + 1 cl = Tkinter.Label(crf, text = 'Color') cl.grid(row = 0, column = 0, sticky = 'w') from CGLtk.color import ColorWell sc = ColorWell.ColorWell(crf, color = self.default_color, callback = self.change_sphere_color_cb) sc.grid(row = 0, column = 1, sticky = 'w') self.sphere_color = sc rs = Hybrid.Scale(crf, ' Radius ', 0, 30, .1, 2) rs.frame.grid(row = 0, column = 2, sticky = 'ew') row = row + 1 rs.callback(self.change_radius_cb) rs.entry.bind('<KeyPress-Return>', self.change_radius_cb) self.sphere_radius_scale = rs mmf = Tkinter.Frame(parent) mmf.grid(row = row, column = 0, sticky = 'w') row = row + 1 mb = Hybrid.Option_Menu(mmf, 'Use mouse ', 'button 1', 'button 2', 'button 3', 'ctrl button 1', 'ctrl button 2', 'ctrl button 3') mb.variable.set('button 2') mb.frame.grid(row = 0, column = 0, sticky = 'w') mb.add_callback(self.bind_mouse_button_cb) self.mouse_button = mb mbl = Tkinter.Label(mmf, text = ' to move sphere') mbl.grid(row = 0, column = 1, sticky = 'w') ka = Tkinter.Label(parent, text = 'Erase using keyboard accelerator "es".') ka.grid(row = row, column = 0, sticky = 'w') row = row + 1 from Accelerators import add_accelerator add_accelerator('es', 'Erase volume data inside sphere', self.Erase) add_accelerator('eo', 'Erase volume data outside sphere', self.erase_outside_sphere)
def fillInUI(self, parent): self.model = None self.position_handler = None self.screen_position = (-.6, -.6) self.last_xyz_position = None self.frozen_model_list = [] self.toplevel_widget = parent.winfo_toplevel() self.toplevel_widget.withdraw() row = 0 import Tkinter from CGLtk import Hybrid sb = Hybrid.Checkbutton(parent, 'Show scale bar', 0) sb.button.grid(row=row, column=0, sticky='w') row = row + 1 self.show_scalebar = sb.variable self.show_scalebar.add_callback(self.settings_changed_cb) bf = Tkinter.Frame(parent) bf.grid(row=row, column=0, sticky='w') row = row + 1 le = Hybrid.Entry(bf, 'Length ', 5, '10') le.frame.grid(row=0, column=0, sticky='w') le.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.bar_length = le.variable te = Hybrid.Entry(bf, ' Thickness', 3, '1') te.frame.grid(row=0, column=1, sticky='w') te.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.bar_thickness = te.variable cl = Tkinter.Label(bf, text=' Color ') cl.grid(row=0, column=2, sticky='w') from CGLtk.color import ColorWell bc = ColorWell.ColorWell(bf, callback=self.settings_changed_cb) self.bar_color = bc bc.showColor((1, 1, 1), doCallback=0) bc.grid(row=0, column=3, sticky='w') lf = Tkinter.Frame(parent) lf.grid(row=row, column=0, sticky='w') row = row + 1 # \u00C5 is the Angstrom symbol lb = Hybrid.Entry(lf, 'Label ', 5, u'# \u00C5') lb.frame.grid(row=0, column=0, sticky='w') lb.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.label_text = lb.variable xo = Hybrid.Entry(lf, ' Offset ', 3, '') xo.frame.grid(row=0, column=1, sticky='w') xo.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.label_x_offset = xo.variable yo = Hybrid.Entry(lf, '', 3, '') yo.frame.grid(row=0, column=2, sticky='w') yo.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.label_y_offset = yo.variable ct = Tkinter.Label(lf, text=' Color ') ct.grid(row=0, column=3, sticky='w') from CGLtk.color import ColorWell lc = ColorWell.ColorWell(lf, callback=self.settings_changed_cb) self.label_color = lc lc.showColor((1, 1, 1), doCallback=0) lc.grid(row=0, column=4, sticky='w') ore = Hybrid.Radiobutton_Row(parent, 'Orientation ', ('horizontal', 'vertical'), self.orientation_cb) ore.frame.grid(row=row, column=0, sticky='w') row = row + 1 self.orientation = ore.variable self.orientation.set('horizontal', invoke_callbacks=0) pf = Tkinter.Frame(parent) pf.grid(row=row, column=0, sticky='w') row = row + 1 pp = Hybrid.Checkbutton(pf, 'Preserve screen position', 1) pp.button.grid(row=0, column=0, sticky='w') self.preserve_position = pp.variable self.preserve_position.add_callback(self.settings_changed_cb) xp = Hybrid.Entry(pf, '', 5, '') xp.frame.grid(row=0, column=1, sticky='w') xp.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.screen_x_position = xp.variable yp = Hybrid.Entry(pf, '', 5, '') yp.frame.grid(row=0, column=2, sticky='w') yp.entry.bind('<KeyPress-Return>', self.settings_changed_cb) self.screen_y_position = yp.variable self.set_screen_position_entries() mb = Hybrid.Checkbutton(parent, 'Move scale bar with data models locked', 0) mb.button.grid(row=row, column=0, sticky='w') row = row + 1 self.move_scalebar = mb.variable self.move_scalebar.add_callback(self.move_scalebar_cb) import SimpleSession chimera.triggers.addHandler(SimpleSession.SAVE_SESSION, self.save_session_cb, None) chimera.triggers.addHandler(chimera.CLOSE_SESSION, self.close_session_cb, None)
def fillInUI(self, parent): self.default_radius = 100 self.surface_model = None self.surface_piece = None self.toplevel_widget = parent.winfo_toplevel() self.toplevel_widget.withdraw() parent.columnconfigure(0, weight=1) row = 0 import Tkinter from CGLtk import Hybrid # Radius rs = Hybrid.Scale(parent, 'Radius ', 1, 1000, 0.01, self.default_radius) rs.frame.grid(row=row, column=0, sticky='ew') row = row + 1 rs.callback(self.radius_changed_cb) rs.entry.bind('<KeyPress-Return>', self.radius_changed_cb) self.radius = rs # Interpolation factor between icosahedron and sphere sf = Hybrid.Scale(parent, 'Sphere factor ', 0, 1, .01, 0) sf.frame.grid(row=row, column=0, sticky='ew') row = row + 1 sf.callback(self.sphere_factor_changed_cb) sf.entry.bind('<KeyPress-Return>', self.sphere_factor_changed_cb) self.sphere_factor = sf # Orientation menu self.orient_222 = 'xyz 2-fold axes' self.orient_222r = 'xyz 2-fold axes, alt' self.orient_2n3 = 'x 2-fold, z 3-fold' self.orient_2n3r = 'x 2-fold, z 3-fold, alt' self.orient_2n5 = 'x 2-fold, z 5-fold' self.orient_2n5r = 'x 2-fold, z 5-fold, alt' self.orient_n25 = 'y 2-fold, z 5-fold' self.orient_n25r = 'y 2-fold, z 5-fold, alt' io = Hybrid.Option_Menu(parent, 'Orientation ', self.orient_222, self.orient_222r, self.orient_2n3, self.orient_2n3r, self.orient_2n5, self.orient_2n5r, self.orient_n25, self.orient_n25r) io.frame.grid(row=row, column=0, sticky='w') io.add_callback(self.show_cb) row = row + 1 self.orientation = io.variable # Subdivision factor sf = Tkinter.Frame(parent) sf.grid(row=row, column=0, sticky='w') row = row + 1 sb = Hybrid.Entry(sf, 'Subdivision factor ', 5, '1') sb.frame.grid(row=0, column=0, sticky='w') self.subdivision_factor = sb.variable sb.entry.bind('<KeyPress-Return>', self.show_cb) sp = Tkinter.Label(sf, text='') sp.grid(row=0, column=1, sticky='w') self.subdivision_spacing = sp # Surface style: filled, mesh st = Hybrid.Radiobutton_Row(parent, 'Surface style: ', ('solid', 'mesh'), self.style_changed_cb) st.frame.grid(row=row, column=0, sticky='w') st.variable.set('mesh', invoke_callbacks=False) row = row + 1 self.surface_style = st.variable # Color cf = Tkinter.Frame(parent) cf.grid(row=row, column=0, sticky='w') row = row + 1 cl = Tkinter.Label(cf, text='Color') cl.grid(row=0, column=0, sticky='w') initial_color = (.7, .7, .7, 1) from CGLtk.color import ColorWell cw = ColorWell.ColorWell(cf, callback=self.color_changed_cb) cw.showColor(initial_color) cw.grid(row=0, column=1, sticky='w') self.color = cw # # Specify a label width so dialog is not resized for long messages. # msg = Tkinter.Label(parent, width=40, anchor='w', justify='left') msg.grid(row=row, column=0, sticky='ew') row = row + 1 self.message_label = msg import SimpleSession chimera.triggers.addHandler(SimpleSession.SAVE_SESSION, self.save_session_cb, None)
def fillInUI(self, parent): self.toplevel_widget = parent.winfo_toplevel() self.toplevel_widget.withdraw() parent.columnconfigure(0, weight=1) row = 0 import Tkinter from CGLtk import Hybrid from chimera import widgets from SurfaceColor import colorable_surface_models sm = widgets.ModelOptionMenu(parent, labelpos='w', label_text='Color surface ', listFunc=colorable_surface_models, command=self.surface_menu_cb) sm.grid(row=row, column=0, sticky='w') self.surface_menu = sm row = row + 1 from SurfaceColor import coloring_methods methods = [cm.menu_name for cm in coloring_methods] csm = Hybrid.Option_Menu(parent, 'by ', *methods) csm.frame.grid(row=row, column=0, sticky='w') self.color_source_menu = csm.variable csm.add_callback(self.color_source_changed_cb) row = row + 1 from VolumeViewer import Volume_Menu vm = Volume_Menu(parent, 'file', open_button='browse...') vm.frame.grid(row=row, column=0, sticky='w') self.volume_menu = vm row += 1 oaf = Tkinter.Frame(parent) oaf.grid(row=row, column=0, sticky='w') row = row + 1 self.origin_axis_frame = oaf oe = Hybrid.Entry(oaf, 'origin ', 8, '0 0 0') oe.frame.grid(row=0, column=0, sticky='w') self.origin_variable = oe.variable oe.entry.bind('<KeyPress-Return>', self.settings_changed_cb) cb = Tkinter.Button(oaf, text='center', command=self.set_center_cb) cb.grid(row=0, column=1, sticky='w') ae = Hybrid.Entry(oaf, 'axis ', 8, '0 0 1') ae.frame.grid(row=0, column=2, sticky='w') self.axis_frame = ae.frame self.axis_variable = ae.variable ae.entry.bind('<KeyPress-Return>', self.settings_changed_cb) cg = Colorwell_GUI(parent, 5, self.settings_changed_cb) cg.set_color_palette('rainbow') self.colormap_gui = cg self.colormap_gui.frame.grid(row=row, column=0, sticky='w') row = row + 1 op = Hybrid.Popup_Panel(parent) opf = op.frame opf.grid(row=row, column=0, sticky='news') opf.grid_remove() opf.columnconfigure(0, weight=1) self.options_panel = op.panel_shown_variable row += 1 orow = 0 cb = op.make_close_button(opf) cb.grid(row=orow, column=1, sticky='ne') cf = Tkinter.Frame(opf) cf.grid(row=orow, column=0, sticky='w') orow += 1 color_counts = ('2', '3', '5', '10', '15', '20') cc = Hybrid.Option_Menu(cf, 'Colors ', *color_counts) cc.frame.grid(row=0, column=0, sticky='w') self.color_count = cc.variable self.color_count.set('5') cc.add_callback(self.change_color_count_cb) cpat = ('Rainbow', 'Gray', 'Red-Blue', 'Cyan-Maroon') cp = Hybrid.Option_Menu(cf, 'Palette', *cpat) cp.frame.grid(row=0, column=1, sticky='w') self.palette = cp.variable cp.add_callback(self.change_color_palette_cb) rc = Tkinter.Button(cf, text='Reverse', command=self.reverse_colors_cb) rc.grid(row=0, column=2, sticky='w') ckb = Tkinter.Button(opf, text="Create color key", command=self.colormap_gui.color_key_cb) ckb.grid(row=orow, column=0, sticky='w') orow += 1 dcf = Tkinter.Frame(opf) dcf.grid(row=orow, column=0, sticky='w') orow += 1 db = Tkinter.Button(dcf, text='Set', command=self.show_default_colormap_values) db.grid(row=0, column=0, sticky='w') dt = Tkinter.Label(dcf, text=' full range of surface values') dt.grid(row=0, column=1, sticky='w') so = Hybrid.Entry(opf, 'Surface offset ', 5, '1.4') so.frame.grid(row=orow, column=0, sticky='w') self.surface_offset = so.variable self.surface_offset_frame = so.frame orow += 1 so.entry.bind('<KeyPress-Return>', self.settings_changed_cb) ocf = Tkinter.Frame(opf) ocf.grid(row=orow, column=0, sticky='w') orow += 1 self.outside_color_frame = ocf ocl = Tkinter.Label(ocf, text='Color outside volume') ocl.grid(row=0, column=0, sticky='w') outside_color = (.5, .5, .5, 1) from CGLtk.color import ColorWell cw = ColorWell.ColorWell(ocf) cw.showColor(outside_color) cw.grid(row=0, column=1, sticky='w') self.outside_color = cw co = Hybrid.Checkbutton(opf, 'Only color sliced surface face', 0) co.button.grid(row=orow, column=0, sticky='w') orow += 1 self.color_caps_only = co.variable ppc = Hybrid.Checkbutton(opf, 'Per-pixel coloring', False) ppc.button.grid(row=orow, column=0, sticky='w') orow += 1 self.per_pixel_color = ppc.variable # # Specify a label width so dialog is not resized for long messages. # msg = Tkinter.Label(parent, width=40, anchor='w', justify='left') msg.grid(row=row, column=0, sticky='ew') row = row + 1 self.message_label = msg # Show current coloring if one already exists from session restore. self.surface_menu_cb() # Show axix, origin, volume widgets if appropriate. self.color_source_changed_cb()
def fillInUI(self, parent): t = parent.winfo_toplevel() self.toplevel_widget = t t.withdraw() parent.columnconfigure(0, weight=1) row = 0 import Tkinter from CGLtk import Hybrid rs = Hybrid.Scale(parent, ' Radius ', 0, 1000, .1, '') rs.frame.grid(row=row, column=0, sticky='ew') row = row + 1 # rs.callback(self.flatten_cb) rs.entry.bind('<KeyPress-Return>', self.flatten_cb) self.radius = rs.variable # Mesh mf = Tkinter.Frame(parent) mf.grid(row=row, column=0, sticky='w') row = row + 1 sm = Hybrid.Checkbutton(mf, 'Show triangle mesh,', True) sm.button.grid(row=0, column=0, sticky='w') self.show_mesh = sm.variable self.show_mesh.add_callback(self.show_mesh_cb) cl = Tkinter.Label(mf, text='color') cl.grid(row=0, column=1, sticky='w') initial_color = (.5, .5, .5, 1) from CGLtk.color import ColorWell mc = ColorWell.ColorWell(mf, callback=self.mesh_color_changed_cb) mc.grid(row=0, column=2, sticky='w') self.mesh_color = mc mc.showColor(initial_color) mo = Hybrid.Entry(mf, ' z offset ', 5, '0') mo.frame.grid(row=0, column=3, sticky='w') self.mesh_offset = mo.variable mo.entry.bind('<KeyPress-Return>', self.mesh_offset_changed_cb) # Orthographic camera mode. import chimera c = chimera.viewer.camera oc = Hybrid.Checkbutton(parent, 'Use orthographic camera mode.', c.ortho) oc.button.grid(row=row, column=0, sticky='w') row = row + 1 self.orthographic = oc.variable self.orthographic.add_callback(self.orthographic_cb) # # Specify a label width so dialog is not resized for long messages. # msg = Tkinter.Label(parent, width=40, anchor='w', justify='left') msg.grid(row=row, column=0, sticky='ew') row = row + 1 self.message_label = msg