def __init__(self, parent, title, app, **kw): kw = self.initKw(kw) MfxDialog.__init__(self, parent, title, kw.resizable, kw.default) top_frame, bottom_frame = self.createFrames(kw) # self.createBitmaps(top_frame, kw) frame = tkinter.Frame(top_frame) frame.pack(expand=True, fill='both', padx=5, pady=10) frame.columnconfigure(0, weight=1) self.demo_sleep_var = tkinter.DoubleVar() self.demo_sleep_var.set(app.opt.timeouts['demo']) self.hint_sleep_var = tkinter.DoubleVar() self.hint_sleep_var.set(app.opt.timeouts['hint']) self.raise_card_sleep_var = tkinter.DoubleVar() self.raise_card_sleep_var.set(app.opt.timeouts['raise_card']) self.highlight_piles_sleep_var = tkinter.DoubleVar() self.highlight_piles_sleep_var.set(app.opt.timeouts['highlight_piles']) self.highlight_cards_sleep_var = tkinter.DoubleVar() self.highlight_cards_sleep_var.set(app.opt.timeouts['highlight_cards']) self.highlight_samerank_sleep_var = tkinter.DoubleVar() self.highlight_samerank_sleep_var.set( app.opt.timeouts['highlight_samerank']) # # tkinter.Label(frame, text='Set delays in seconds').grid( # row=0, column=0, columnspan=2) row = 0 for title, var in ( (_('Demo:'), self.demo_sleep_var), (_('Hint:'), self.hint_sleep_var), (_('Raise card:'), self.raise_card_sleep_var), (_('Highlight piles:'), self.highlight_piles_sleep_var), (_('Highlight cards:'), self.highlight_cards_sleep_var), (_('Highlight same rank:'), self.highlight_samerank_sleep_var), ): tkinter.Label(frame, text=title, anchor='w').grid(row=row, column=0, sticky='we') widget = tkinter.Scale(frame, from_=0.2, to=9.9, resolution=0.1, orient='horizontal', length="3i", variable=var, takefocus=0) widget.grid(row=row, column=1) row += 1 # focus = self.createButtons(bottom_frame, kw) self.mainloop(focus, kw.timeout) # self.demo_timeout = self.demo_sleep_var.get() self.hint_timeout = self.hint_sleep_var.get() self.raise_card_timeout = self.raise_card_sleep_var.get() self.highlight_piles_timeout = self.highlight_piles_sleep_var.get() self.highlight_cards_timeout = self.highlight_cards_sleep_var.get() self.highlight_samerank_timeout = \ self.highlight_samerank_sleep_var.get()
def __init__(self, minval, maxval, label_command=None, side=Tk.TOP, anchor='w', master=None, **kwargs): self.label_command = label_command self.frame = Tk.Frame(master=master) self.frame.pack(side=side, anchor=anchor) self.value = Tk.DoubleVar() self.value.set((minval + maxval) / 2.0) self.scale = Tk.Scale(self.frame, from_=minval, to=maxval, variable=self.value, orient=Tk.HORIZONTAL, command=self.value_changed, showvalue=False, **kwargs) self.scale.pack(side=Tk.LEFT, anchor='w') if label_command is not None: self.label_var = Tk.StringVar() self.label = Tk.Label(self.frame, textvariable=self.label_var) self.label.pack(side=Tk.LEFT)
def __init__(self, parent, title, init_font, **kw): # print init_font kw = self.initKw(kw) MfxDialog.__init__(self, parent, title, kw.resizable, kw.default) top_frame, bottom_frame = self.createFrames(kw) self.createBitmaps(top_frame, kw) self.font_family = 'Helvetica' self.font_size = 12 self.font_weight = 'normal' self.font_slant = 'roman' if init_font is not None: assert 2 <= len(init_font) <= 4 assert isinstance(init_font[1], int) self.font_family, self.font_size = init_font[:2] if len(init_font) > 2: if init_font[2] in ['bold', 'normal']: self.font_weight = init_font[2] elif init_font[2] in ['italic', 'roman']: self.font_slant = init_font[2] else: raise ValueError('invalid font style: ' + init_font[2]) if len(init_font) > 3: if init_font[3] in ['bold', 'normal']: self.font_weight = init_font[3] elif init_font[2] in ['italic', 'roman']: self.font_slant = init_font[3] else: raise ValueError('invalid font style: ' + init_font[3]) # self.family_var = tkinter.StringVar() self.weight_var = tkinter.BooleanVar() self.slant_var = tkinter.BooleanVar() self.size_var = tkinter.IntVar() frame = tkinter.Frame(top_frame) frame.pack(expand=True, fill='both', padx=5, pady=10) frame.columnconfigure(0, weight=1) # frame.rowconfigure(1, weight=1) self.entry = tkinter.Entry(frame, bg='white') self.entry.grid(row=0, column=0, columnspan=2, sticky='news') self.entry.insert('end', _('abcdefghABCDEFGH')) self.list_box = tkinter.Listbox(frame, width=36, exportselection=False) sb = tkinter.Scrollbar(frame) self.list_box.configure(yscrollcommand=sb.set) sb.configure(command=self.list_box.yview) self.list_box.grid(row=1, column=0, sticky='news') # rowspan=4 sb.grid(row=1, column=1, sticky='ns') bind(self.list_box, '<<ListboxSelect>>', self.fontupdate) # self.list_box.focus() cb1 = tkinter.Checkbutton(frame, anchor='w', text=_('Bold'), command=self.fontupdate, variable=self.weight_var) cb1.grid(row=2, column=0, columnspan=2, sticky='we') cb2 = tkinter.Checkbutton(frame, anchor='w', text=_('Italic'), command=self.fontupdate, variable=self.slant_var) cb2.grid(row=3, column=0, columnspan=2, sticky='we') sc = tkinter.Scale( frame, from_=6, to=40, resolution=1, # label='Size', orient='horizontal', command=self.fontupdate, variable=self.size_var) sc.grid(row=4, column=0, columnspan=2, sticky='news') # self.size_var.set(self.font_size) self.weight_var.set(self.font_weight == 'bold') self.slant_var.set(self.font_slant == 'italic') font_families = list(tkinter_font.families()) font_families.sort() selected = -1 n = 0 self.list_box.insert('end', *font_families) for font in font_families: if font.lower() == self.font_family.lower(): selected = n break n += 1 if selected >= 0: self.list_box.select_set(selected) self.list_box.see(selected) # focus = self.createButtons(bottom_frame, kw) self.mainloop(focus, kw.timeout) self.font = (self.font_family, self.font_size, self.font_slant, self.font_weight)
def __init__(self, parent, title, app, **kw): self.app = app kw = self.initKw(kw) MfxDialog.__init__(self, parent, title, kw.resizable, kw.default) top_frame, bottom_frame = self.createFrames(kw) self.createBitmaps(top_frame, kw) # self.saved_opt = app.opt.copy() self.sound = tkinter.BooleanVar() self.sound.set(app.opt.sound != 0) self.sound_mode = tkinter.BooleanVar() self.sound_mode.set(app.opt.sound_mode != 0) self.sample_volume = tkinter.IntVar() self.sample_volume.set(app.opt.sound_sample_volume) self.music_volume = tkinter.IntVar() self.music_volume.set(app.opt.sound_music_volume) self.samples = [ ('areyousure', _('Are You Sure'), tkinter.BooleanVar()), ('deal', _('Deal'), tkinter.BooleanVar()), ('dealwaste', _('Deal waste'), tkinter.BooleanVar()), ('turnwaste', _('Turn waste'), tkinter.BooleanVar()), ('startdrag', _('Start drag'), tkinter.BooleanVar()), ('drop', _('Drop'), tkinter.BooleanVar()), ('droppair', _('Drop pair'), tkinter.BooleanVar()), ('autodrop', _('Auto drop'), tkinter.BooleanVar()), ('flip', _('Flip'), tkinter.BooleanVar()), ('autoflip', _('Auto flip'), tkinter.BooleanVar()), ('move', _('Move'), tkinter.BooleanVar()), ('nomove', _('No move'), tkinter.BooleanVar()), ('undo', _('Undo'), tkinter.BooleanVar()), ('redo', _('Redo'), tkinter.BooleanVar()), ('autopilotlost', _('Autopilot lost'), tkinter.BooleanVar()), ('autopilotwon', _('Autopilot won'), tkinter.BooleanVar()), ('gamefinished', _('Game finished'), tkinter.BooleanVar()), ('gamelost', _('Game lost'), tkinter.BooleanVar()), ('gamewon', _('Game won'), tkinter.BooleanVar()), ('gameperfect', _('Perfect game'), tkinter.BooleanVar()), ('extra', _('Other'), tkinter.BooleanVar()), ] # frame = tkinter.Frame(top_frame) frame.pack(expand=True, fill='both', padx=5, pady=5) frame.columnconfigure(1, weight=1) # row = 0 w = tkinter.Checkbutton(frame, variable=self.sound, text=_("Sound enabled"), anchor='w') w.grid(row=row, column=0, columnspan=2, sticky='ew') # if os.name == "nt" and pysolsoundserver: row += 1 w = tkinter.Checkbutton(frame, variable=self.sound_mode, text=_("Use DirectX for sound playing"), command=self.mOptSoundDirectX, anchor='w') w.grid(row=row, column=0, columnspan=2, sticky='ew') # if app.audio.CAN_PLAY_MUSIC: # and app.startup_opt.sound_mode > 0: row += 1 w = tkinter.Label(frame, text=_('Sample volume:')) w.grid(row=row, column=0, sticky='w', padx=5) w = tkinter.Scale(frame, from_=0, to=128, resolution=1, orient='horizontal', takefocus=0, length="3i", # label=_('Sample volume'), variable=self.sample_volume) w.grid(row=row, column=1, sticky='ew', padx=5) row += 1 w = tkinter.Label(frame, text=_('Music volume:')) w.grid(row=row, column=0, sticky='w', padx=5) w = tkinter.Scale(frame, from_=0, to=128, resolution=1, orient='horizontal', takefocus=0, length="3i", # label=_('Music volume'), variable=self.music_volume) w.grid(row=row, column=1, sticky='ew', padx=5) else: # remove "Apply" button kw.strings[1] = None # frame = tkinter.LabelFrame(top_frame, text=_('Enable samles'), padx=5, pady=5) frame.pack(expand=True, fill='both', padx=5, pady=5) frame.columnconfigure(0, weight=1) frame.columnconfigure(1, weight=1) # row = 0 col = 0 for n, t, v in self.samples: v.set(app.opt.sound_samples[n]) w = tkinter.Checkbutton(frame, text=t, anchor='w', variable=v) w.grid(row=row, column=col, sticky='ew') if col == 1: col = 0 row += 1 else: col = 1 # top_frame.columnconfigure(1, weight=1) # focus = self.createButtons(bottom_frame, kw) self.mainloop(focus, kw.timeout)
def __init__(self, parent, title, app, manager, key=None, **kw): kw = self.initKw(kw) MfxDialog.__init__(self, parent, title, kw.resizable, kw.default) top_frame, bottom_frame = self.createFrames(kw) self.createBitmaps(top_frame, kw) # if key is None: key = manager.getSelected() self.manager = manager self.key = key self.app = app # padx, pady = kw.padx, kw.pady padx, pady = 5, 5 if self.TreeDataHolder_Class.data is None: self.TreeDataHolder_Class.data = self.TreeData_Class(manager, key) # self.top.wm_minsize(400, 200) if self.top.winfo_screenwidth() >= 800: w1, w2 = 240, 400 else: w1, w2 = 200, 300 paned_window = tkinter.PanedWindow(top_frame) paned_window.pack(expand=True, fill='both') left_frame = tkinter.Frame(paned_window) right_frame = tkinter.Frame(paned_window) paned_window.add(left_frame) paned_window.add(right_frame) font = app.getFont("default") self.tree = self.Tree_Class(self, left_frame, key=key, default=kw.default, font=font, width=w1) self.tree.frame.grid(row=0, column=0, sticky='nsew', padx=padx, pady=pady) if USE_PIL: # var = tkinter.DoubleVar() var.set(app.opt.scale_x) self.scale_x = tkinter.Scale( left_frame, label=_('Scale X:'), from_=0.5, to=4.0, resolution=0.1, orient='horizontal', variable=var, # value=app.opt.scale_x, command=self._updateScale) self.scale_x.grid(row=1, column=0, sticky='ew', padx=padx, pady=pady) # var = tkinter.DoubleVar() var.set(app.opt.scale_y) self.scale_y = tkinter.Scale( left_frame, label=_('Scale Y:'), from_=0.5, to=4.0, resolution=0.1, orient='horizontal', variable=var, # value=app.opt.scale_y, command=self._updateScale) self.scale_y.grid(row=2, column=0, sticky='ew', padx=padx, pady=pady) # self.auto_scale = tkinter.BooleanVar() self.auto_scale.set(app.opt.auto_scale) check = tkinter.Checkbutton(left_frame, text=_('Auto scaling'), variable=self.auto_scale, takefocus=False, command=self._updateAutoScale) check.grid(row=3, column=0, columnspan=2, sticky='w', padx=padx, pady=pady) # self.preserve_aspect = tkinter.BooleanVar() self.preserve_aspect.set(app.opt.preserve_aspect_ratio) self.aspect_check = tkinter.Checkbutton( left_frame, text=_('Preserve aspect ratio'), variable=self.preserve_aspect, takefocus=False, # command=self._updateScale ) self.aspect_check.grid(row=4, column=0, sticky='w', padx=padx, pady=pady) self._updateAutoScale() # left_frame.rowconfigure(0, weight=1) left_frame.columnconfigure(0, weight=1) # self.preview = MfxScrolledCanvas(right_frame, width=w2) self.preview.setTile(app, app.tabletile_index, force=True) self.preview.pack(fill='both', expand=True, padx=padx, pady=pady) self.preview.canvas.preview = 1 # create a preview of the current state self.preview_key = -1 self.preview_images = [] self.scale_images = [] self.updatePreview(key) # focus = self.createButtons(bottom_frame, kw) focus = self.tree.frame self.mainloop(focus, kw.timeout)
def __init__(self, parent, title, app, **kw): kw = self.initKw(kw) MfxDialog.__init__(self, parent, title, kw.resizable, kw.default) top_frame, bottom_frame = self.createFrames(kw) self.createBitmaps(top_frame, kw) frame = tkinter.Frame(top_frame) frame.pack(expand=True, fill='both', padx=10, pady=10) frame.columnconfigure(0, weight=1) notebook = TabPageSet(frame) notebook.pack(expand=True, fill='both') for w in WizardWidgets: if isinstance(w, basestring): notebook.AddPage(w) frame = tkinter.Frame(notebook.pages[w]['page']) frame.pack(expand=True, fill='both', padx=2, pady=4) frame.columnconfigure(1, weight=1) row = 0 continue tkinter.Label(frame, text=w.label).grid(row=row, column=0, padx=2) if w.widget == 'preset': if w.variable is None: w.variable = tkinter.StringVar() values = [_(v) for v in w.values] default = _(w.default) values.remove(default) values.sort() values.insert(0, default) def callback(v, w=w): return self.presetSelected(v, w) om = tkinter.OptionMenu(frame, w.variable, command=callback, *values) om.grid(row=row, column=1, sticky='ew', padx=2) elif w.widget == 'entry': if w.variable is None: w.variable = tkinter.StringVar() en = tkinter.Entry(frame, textvariable=w.variable) en.grid(row=row, column=1, sticky='ew', padx=2) elif w.widget == 'menu': if w.variable is None: w.variable = tkinter.StringVar() values = [_(v) for v in w.values] om = tkinter.OptionMenu(frame, w.variable, *values) om.grid(row=row, column=1, sticky='ew', padx=2) elif w.widget == 'spin': if w.variable is None: w.variable = tkinter.IntVar() from_, to = w.values s = tkinter.Scale(frame, from_=from_, to=to, resolution=1, orient='horizontal', length=200, variable=w.variable) s.grid(row=row, column=1, sticky='ew', padx=2) elif w.widget == 'check': if w.variable is None: w.variable = tkinter.BooleanVar() ch = tkinter.Checkbutton(frame, variable=w.variable, takefocus=False, anchor='w') ch.grid(row=row, column=1, sticky='ew', padx=2, pady=2) if w.current_value is None: v = w.default else: v = w.current_value if w.widget in ('menu', 'preset', 'entry'): v = _(v) w.variable.set(v) row += 1 notebook.ChangePage() focus = self.createButtons(bottom_frame, kw) self.mainloop(focus, kw.timeout)
def __init__(self, dm, master=None, *args, **kwargs): tkinter.Frame.__init__(self, master, *args, **kwargs) self.dm = dm n = dm.n_actuators self.dm_pattern = numpy.full((n), 0.5) ## We have a lot of Scales so we want a scrollbar. For this, ## create a Canvas and insert the Scales inside. The Scrollbar is ## associated with the canvas and controls the Canvas window. ## However, we would be forced to manage the position of the ## Scales inside the Canvas so instead we create another Frame to ## hold the Scales and place that Frame inside the Canvas. ## ## This is because in tk, scrollbars are their own widgets that ## are associated to other widgets. They can only be associated ## with a small set of Widgets, the ones that support the standard ## scrollbar interface, such as Listbox, Text, Canvas, and Entry. ## So we can't associated the Scrollbar directly with a Frame. self.canvas = tkinter.Canvas(self) self.canvas_frame = tkinter.Frame(self.canvas) zero_button = tkinter.Button(self.canvas_frame, text="Set all actuators to 0.5", command=self.zero) zero_button.pack(fill='x') self.zero_button = zero_button self.sliders = [None] * n for i in range(n): callback = lambda s, i=i: self.set_actuator(i, float(s)) slider = tkinter.Scale(self.canvas_frame, orient='horizontal', from_=0, to=1, resolution=0.01, label="actuator #%i" % i, command=callback) slider.set(0.5) slider.pack(fill='x') self.sliders[i] = slider self.canvas.pack(side='left', fill='both', expand=True) self.scrollbar = tkinter.Scrollbar(self.canvas, command=self.canvas.yview) self.scrollbar.pack(side='right', fill='y') self.canvas.configure(yscrollcommand=self.scrollbar.set, scrollregion=self.canvas.bbox('all')) self.canvas_window = self.canvas.create_window( (0, 0), window=self.canvas_frame, anchor='nw') ## Moving scrollbar will trigger configure on canvas_frame. ## Resizing DeformableMirror Frame on the Y axis will trigger canvas. ## Resizing DeformableMirror Frame on the X axis will trigger both ## canvas and canvas_frame. self.canvas.bind('<Configure>', self.on_canvas_configure) self.canvas_frame.bind('<Configure>', self.on_canvas_frame_configure)