Example #1
0
 def createFrames(self, kw):
     bottom_frame = ttk.Frame(self._frame, relief='flat', borderwidth=4)
     bottom_frame.pack(side='bottom', fill='both', expand=False)
     if kw.separator:
         separator = ttk.Separator(self._frame)
         separator.pack(side='bottom', fill='x')
     top_frame = ttk.Frame(self._frame)
     top_frame.pack(side='top', fill='both', expand=1)
     return top_frame, bottom_frame
Example #2
0
    def __init__(self, parent, title=None, input_options=None):

        tk.Toplevel.__init__(self, parent)
        self.transient(parent)
        self.input_options = input_options

        if title:
            self.title(title)

        self.parent = parent

        self.result = None

        body = ttk.Frame(self)
        self.initial_focus = self.body(body)
        body.pack(padx=5, pady=5)

        self.buttonbox()

        self.grab_set()

        if not self.initial_focus:
            self.initial_focus = self

        self.protocol("WM_DELETE_WINDOW", self.cancel)

        self.geometry("+%d+%d" %
                      (parent.winfo_rootx() + 50, parent.winfo_rooty() + 50))

        self.initial_focus.focus_set()

        self.wait_window(self)
Example #3
0
    def __init__(self, app, parent, title, **kw):
        self._url = kw['url']
        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.button = kw.default
        frame = ttk.Frame(top_frame)
        frame.pack(fill='both', expand=True, padx=kw.padx, pady=kw.pady)
        msg = ttk.Label(frame,
                        text=kw.text,
                        justify=kw.justify,
                        width=kw.width)
        msg.pack(fill='both', expand=True)

        # font_name = msg.lookup('TLabel', 'font')
        font_name = 'TkDefaultFont'
        font = tkinter_font.Font(parent, name=font_name, exists=True)
        font = font.copy()
        font.configure(underline=True)
        url_label = ttk.Label(frame,
                              text=kw.url,
                              font=font,
                              foreground='blue',
                              cursor='hand2')
        url_label.pack()
        from pysollib.options import calcCustomMouseButtonsBinding
        url_label.bind(calcCustomMouseButtonsBinding('<{mouse_button1}>'),
                       self._urlClicked)
        #
        focus = self.createButtons(bottom_frame, kw)
        self.mainloop(focus, kw.timeout)
Example #4
0
 def __init__(self, top, row, column, columnspan):
     self.top = top
     self._show = True
     self._widgets = []
     self._tooltips = []
     #
     self._row = row
     self._column = column
     self._columnspan = columnspan
     self._label_column = 0
     #
     self.padx = 1
     self.label_relief = 'sunken'
     self.top_frame = ttk.Frame(self.top)
     self.top_frame.grid(row=self._row, column=self._column,
                         columnspan=self._columnspan, sticky='ew')
     self.frame = ttk.Frame(self.top_frame)
     self.frame.pack(side='left', expand=True, fill='both', padx=0, pady=1)
Example #5
0
    def body(self, master):
        self.results = None # in case we cancel this gets returned
        self.results = None # in case we cancel this gets returned
        self.vars = {}
        self.widgets = {}
        self.values = {}

        colortables = [
         ('Jet (blue to red)',matplotlib.cm.jet),
         ('Gray', matplotlib.cm.gray),
         ('Heat (black-red-yellow)', matplotlib.cm.gist_heat),
         ('Copper (black to tan)',matplotlib.cm.copper),
         ('Stern',matplotlib.cm.gist_stern),
         ('Prism (repeating rainbow)', matplotlib.cm.prism)]

        self.colortables = dict(colortables)


        lf = ttk.LabelFrame(master, text='WebbPSF Advanced Options')

        r=1
        fr2 = ttk.Frame(lf)

        self.values['force_coron'] = ['regular propagation (MFT)', 'full coronagraphic propagation (FFT/SAM)']

        self._add_labeled_dropdown("force_coron", lf, label='Direct imaging calculations use', values=self.values['force_coron'],
                default = self.values['force_coron'][ 1 if self.input_options['force_coron'] else 0]  ,  width=30, position=(r,0), sticky='W')
        r+=1
        self.values['no_sam'] = ['semi-analytic method if possible', 'basic FFT method always']
        self._add_labeled_dropdown("no_sam", lf, label='Coronagraphic calculations use', values=self.values['no_sam'],
                default=self.values['no_sam'][ 1 if self.input_options['no_sam'] else 0] , width=30, position=(r,0), sticky='W')
        r+=1
        self._add_labeled_dropdown("parity", lf, label='Output pixel grid parity is', values=['odd', 'even', 'either'], default=self.input_options['parity'], width=10, position=(r,0), sticky='W')



        lf.grid(row=1, sticky='E,W', padx=10,pady=5)

        lf = ttk.LabelFrame(master, text='PSF Display Options')
        r=0
        self._add_labeled_dropdown("psf_scale", lf, label='    Display scale:', values=['log','linear'],default=self.input_options['psf_scale'], width=5, position=(r,0), sticky='W')
        r+=1
        self._add_labeled_entry("psf_vmin", lf, label='    Min scale value:', value="%.2g" % self.input_options['psf_vmin'], width=7, position=(r,0), sticky='W')
        r+=1
        self._add_labeled_entry("psf_vmax", lf, label='    Max scale value:', value="%.2g" % self.input_options['psf_vmax'], width=7, position=(r,0), sticky='W')
        r+=1
        self._add_labeled_dropdown("psf_normalize", lf, label='    Normalize PSF to:', values=['Total', 'Peak'], default=self.input_options['psf_normalize'], width=5, position=(r,0), sticky='W')
        r+=1
        self._add_labeled_dropdown("psf_cmap", lf, label='    Color table:', values=[a[0] for a in colortables],  default=self.input_options['psf_cmap_str'], width=20, position=(r,0), sticky='W')
        lf.grid(row=2, sticky='E,W', padx=10,pady=5)


        return self.widgets['force_coron']# return widget to have initial focus
Example #6
0
    def __init__(self, parent, **kw):
        if 'resolution' in kw:
            self.resolution = kw['resolution']
            del kw['resolution']
        else:
            self.resolution = 1
        if 'from_' in kw:
            kw['from_'] //= self.resolution
        if 'to' in kw:
            kw['to'] //= self.resolution
        if 'variable' in kw:
            self.variable = kw['variable']
            del kw['variable']
        else:
            self.variable = None
        value = None
        if 'value' in kw:
            value = kw['value']
            del kw['value']
        elif self.variable:
            value = self.variable.get()
        self.value = value
        self.command = command = None
        if 'command' in kw:
            command = kw['command']
        kw['command'] = self._scale_command
        if 'label' in kw:
            self.label_text = kw['label']
            width = len(self.label_text) + 4
            # width = None
            del kw['label']
        else:
            self.label_text = None
            width = 3

        # create widgets
        side = 'left'  # 'top'
        self.frame = ttk.Frame(parent)
        self.label = ttk.Label(self.frame,
                               anchor='w',
                               width=width,
                               padding=(5, 0))
        self.label.pack(side=side, expand=False, fill='x')
        self.scale = ttk.Scale(self.frame, **kw)
        self.scale.pack(side=side, expand=True, fill='both', pady=4)

        if self.variable:
            self.variable.trace('w', self._trace_var)
        if value is not None:
            self._set_text(self._round(value))
            if self.variable:
                self.variable.set(value)
        self.command = command
Example #7
0
 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.app = app
     self.manager = manager
     self.key = key
     self.table_color = app.opt.colors['table']
     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 = 200, 400
     else:
         w1, w2 = 200, 300
     font = app.getFont("default")
     padx, pady = 4, 4
     frame = ttk.Frame(top_frame)
     frame.pack(fill='both',
                expand=True,
                padx=kw.padx - padx,
                pady=kw.pady - pady)
     self.tree = self.Tree_Class(self,
                                 frame,
                                 key=key,
                                 default=kw.default,
                                 font=font,
                                 width=w1)
     self.tree.frame.pack(side="left",
                          fill='both',
                          expand=False,
                          padx=padx,
                          pady=pady)
     self.preview = MfxScrolledCanvas(frame, width=w2, hbar=0, vbar=0)
     self.preview.pack(side="right",
                       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.updatePreview(key)
     #
     focus = self.createButtons(bottom_frame, kw)
     focus = self.tree.frame
     self.mainloop(focus, kw.timeout)
 def make_expts_part(self, parent, part_name):
     """Make a component frame for the experiment editor."""
     frame = ttk.Frame(parent)
     self.make_label(frame, part_name)
     if isinstance(self.template_expt[part_name], collections.Mapping):
         # This is actually a related group of fields
         self.expts_boxes[part_name] = boxes = {}
         self.make_expts_fields(frame, self.template_expt[part_name], boxes)
     else:
         textbox = T.Text(frame, width=100, height=5, wrap='word')
         textbox.grid(row=1, column=0, sticky='nesw')
         textbox.insert('1.0', self.template_expt[part_name])
         self.expts_boxes[part_name] = textbox
     frame.pack(side='top', fill='x', expand=True)
    def make_stim_frame(self, parent):
        """Create fields to edit the stimulus details.

        TODO: At present this restricts you to the same number of stimuli as the template.
        """
        frame = ttk.Frame(parent)
        part_name = 'stimulus_details'
        self.make_label(frame, part_name)
        self.expts_boxes[part_name] = []
        for stim in self.template_expt['stimulus_details']:
            boxes = {}
            self.expts_boxes[part_name].append(boxes)
            self.make_expts_fields(frame, stim, boxes)
        frame.pack(side='top', fill='x', expand=True)
Example #10
0
    def buttonbox(self):
        # add standard button box. override if you don't want the
        # standard buttons

        box = ttk.Frame(self)

        w = ttk.Button(box, text="OK", width=10, command=self.ok, default=tk.ACTIVE)
        w.pack(side=tk.LEFT, padx=5, pady=5)
        w = ttk.Button(box, text="Cancel", width=10, command=self.cancel)
        w.pack(side=tk.LEFT, padx=5, pady=5)

        self.bind("<Return>", self.ok)
        self.bind("<Escape>", self.cancel)

        box.pack()
 def make_expts_fields(self, frame, template, boxes):
     """Create a related group of fields for an experiment section."""
     for i, field in enumerate(template):
         self.make_label(frame, field, row=i + 1, sticky='ne')
         if isinstance(template[field], collections.Mapping):
             # Another nesting level!
             boxes[field] = {}
             subframe = ttk.Frame(frame)
             for j, subfield in enumerate(template[field]):
                 self.make_label(subframe, subfield, row=j, sticky='e')
                 boxes[field][subfield] = ttk.Entry(subframe, width=40)
                 boxes[field][subfield].grid(row=j, column=1, sticky='w')
             subframe.grid(row=i + 1, column=1, sticky='we')
         else:
             boxes[field] = ttk.Entry(frame, width=70)
             boxes[field].grid(row=i + 1, column=1, sticky='w')
Example #12
0
 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)
     self.app = app
     #
     self.update_stats_var = tkinter.BooleanVar()
     self.update_stats_var.set(app.opt.update_player_stats != 0)
     self.confirm_var = tkinter.BooleanVar()
     self.confirm_var.set(app.opt.confirm != 0)
     self.win_animation_var = tkinter.BooleanVar()
     self.win_animation_var.set(app.opt.win_animation != 0)
     #
     frame = ttk.Frame(top_frame)
     frame.pack(expand=True, fill='both', padx=5, pady=10)
     widget = ttk.Label(frame,
                        text=_("\nPlease enter your name"),
                        takefocus=0)
     widget.grid(row=0, column=0, columnspan=2, sticky='ew', padx=0, pady=5)
     #
     w = kw.get("e_width", 30)  # width in characters
     names = self.app.getAllUserNames()
     self.player_var = ttk.Combobox(frame, width=w, values=tuple(names))
     self.player_var.current(names.index(app.opt.player))
     self.player_var.grid(row=1, column=0, sticky='ew', padx=0, pady=5)
     #
     widget = ttk.Checkbutton(frame,
                              variable=self.confirm_var,
                              text=_("Confirm quit"))
     widget.grid(row=2, column=0, columnspan=2, sticky='ew', padx=0, pady=5)
     widget = ttk.Checkbutton(frame,
                              variable=self.update_stats_var,
                              text=_("Update statistics and logs"))
     widget.grid(row=3, column=0, columnspan=2, sticky='ew', padx=0, pady=5)
     #  widget = ttk.Checkbutton(frame, variable=self.win_animation_var,
     #                               text="Win animation")
     #  widget.pack(side='top', padx=kw.padx, pady=kw.pady)
     frame.columnconfigure(0, weight=1)
     #
     self.player = self.player_var.get()
     self.confirm = self.confirm_var.get()
     self.update_stats = self.update_stats_var.get()
     self.win_animation = self.win_animation_var.get()
     #
     focus = self.createButtons(bottom_frame, kw)
     self.mainloop(focus, kw.timeout)
 def make_people_tab(self, parent):
     """Build the people tab and add it to the parent."""
     frame = ttk.Frame(parent)
     # Choosing who to edit
     ttk.Label(frame, text='Edit person:').grid(row=0, column=0, sticky='e')
     person_list = ttk.Combobox(frame,
                                state='readonly',
                                width=10,
                                values=sorted(
                                    self.metadata['people'].keys()))
     person_list.bind('<<ComboboxSelected>>',
                      lambda e: self.update_people_tab(person_list.get()))
     person_list.grid(row=0, column=1, sticky='w')
     # Section for adding new people
     ttk.Label(frame, text='New person:').grid(row=2, column=0, sticky='e')
     new_person_var = T.StringVar()
     ttk.Entry(frame, textvariable=new_person_var,
               width=10).grid(row=2, column=1, sticky='w')
     # TODO: Make hitting return in the Entry click the Add button
     # TODO: Make the Add button stick next to the Entry box
     ttk.Button(frame,
                text='Add',
                command=lambda: self.add_person(new_person_var.get(
                ), person_list)).grid(row=2, column=2, sticky='w')
     # Fields to edit current person
     widgets = self.session_widgets = {}
     ttk.Label(frame, text='Full name:').grid(row=0, column=4, sticky='e')
     widgets['name'] = ttk.Entry(frame)
     widgets['name'].grid(row=0, column=5, sticky='w')
     ttk.Label(frame, text='ORCID:').grid(row=1, column=4, sticky='e')
     widgets['orcid'] = ttk.Entry(frame)
     widgets['orcid'].grid(row=1, column=5, sticky='w')
     ttk.Label(frame, text='SCOPUS ID:').grid(row=2, column=4, sticky='e')
     widgets['scopus_id'] = ttk.Entry(frame)
     widgets['scopus_id'].grid(row=2, column=5, sticky='w')
     if self.metadata['people']:
         person_list.set(person_list['values'][0])
         self.update_people_tab(person_list.get())
     # Resize support
     frame.rowconfigure('all', weight=0)
     frame.columnconfigure(0, weight=2)
     frame.columnconfigure(3, weight=1)
     frame.columnconfigure(6, weight=2)
     parent.add(frame, text='People')
     return frame
Example #14
0
 def _createLabel(self, name, expand=False, width=0, tooltip=None):
     frame = ttk.Frame(self.frame, borderwidth=1, relief=self.label_relief)
     frame.grid(row=0, column=self._label_column,
                sticky='nsew', padx=self.padx)
     if expand:
         self.frame.grid_columnconfigure(self._label_column,
                                         weight=1)
     self._label_column += 1
     setattr(self, name + '_frame', frame)
     self._widgets.append(frame)
     label = ttk.Label(frame, width=width, anchor='center')
     label.pack(expand=True, fill='both')
     setattr(self, name + '_label', label)
     self._widgets.append(label)
     if tooltip:
         b = MfxTooltip(label)
         self._tooltips.append(b)
         b.setText(tooltip)
     return label
    def make_session_tab(self, parent):
        """Build a tab for setting session properties."""
        frame = ttk.Frame(parent)
        ttk.Label(frame, text='Description:').grid(row=2, column=0, sticky='e')
        desc = ttk.Entry(frame, width=70)
        desc.grid(row=2, column=1, sticky='w')

        ttk.Label(frame, text='Researcher:').grid(row=0, column=0, sticky='e')
        researcher = ttk.Combobox(frame,
                                  state='readonly',
                                  values=sorted(
                                      self.metadata['people'].keys()))
        researcher.bind(
            '<<ComboboxSelected>>', lambda e: self.update_session(
                person=researcher.get(), expt=experiment, desc=desc))
        researcher.grid(row=0, column=1, sticky='w')
        self.session_researcher_box = researcher

        ttk.Label(frame, text='Experiment:').grid(row=1, column=0, sticky='e')
        experiment = ttk.Combobox(frame,
                                  state='readonly',
                                  values=sorted(
                                      self.metadata['experiments'].keys()))
        experiment.bind(
            '<<ComboboxSelected>>',
            lambda e: self.update_session(person=researcher.get(),
                                          expt=experiment.get()))
        experiment.grid(row=1, column=1, sticky='w')
        self.session_experiment_box = experiment

        if 'last_session' not in self.metadata:
            self.metadata['last_session'] = T.StringVar()
            self.metadata['last_session'].set(researcher['values'][0])
        last_person = self.metadata['last_session'].get()
        researcher.set(last_person)
        self.update_session(person=researcher.get(),
                            desc=desc,
                            expt=experiment)
        # Resize support & add to tabs
        frame.rowconfigure('all', weight=0)
        frame.columnconfigure('all', weight=1)
        parent.add(frame, text='This session')
        return frame
Example #16
0
    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 = ttk.Frame(top_frame)
        frame.pack(expand=True, fill='both', padx=5, pady=10)
        frame.columnconfigure(0, weight=1)

        self.fonts = {}
        row = 0
        for fn, title in (  # ('default',        _('Default')),
            ('sans', _('HTML: ')),
            ('small', _('Small: ')),
            ('fixed', _('Fixed: ')),
            ('canvas_default', _('Tableau default: ')),
            ('canvas_fixed', _('Tableau fixed: ')),
            ('canvas_large', _('Tableau large: ')),
            ('canvas_small', _('Tableau small: ')),
        ):
            font = app.opt.fonts[fn]
            self.fonts[fn] = font
            ttk.Label(frame, text=title, anchor='w').grid(row=row,
                                                          column=0,
                                                          sticky='we')
            if font:
                title = ' '.join(
                    [str(i) for i in font if i not in ('roman', 'normal')])
            elif font is None:
                title = 'Default'
            label = ttk.Label(frame, font=font, text=title)
            label.grid(row=row, column=1, padx=8)
            b = ttk.Button(
                frame,
                text=_('Change...'),
                width=10,
                command=lambda label=label, fn=fn: self.selectFont(label, fn))
            b.grid(row=row, column=2)
            row += 1
        #
        focus = self.createButtons(bottom_frame, kw)
        self.mainloop(focus, kw.timeout)
Example #17
0
    def __init__(self, dialog, parent, app, player, gameid, **kw):
        ttk.Frame.__init__(self, parent)

        self.oval_width = 120
        self.oval_height = 60

        left_label = ttk.Label(self, image=app.gimages.logos[5])
        left_label.pack(side='left', expand=True, fill='both')
        self.right_frame = ttk.Frame(self)
        self.right_frame.pack(side='right', expand=True)

        self.dialog = dialog
        self.app = app
        self.parent = parent
        self.player = player or _("Demo games")
        #
        self._calc_tabs()
        #
        won, lost = app.stats.getStats(player, gameid)
        self.createPieChart(app, won, lost, _("Total"))
        won, lost = app.stats.getSessionStats(player, gameid)
        self.createPieChart(app, won, lost, _("Current session"))
Example #18
0
 def __init__(self,
              app,
              parent,
              title=None,
              images=None,
              color="blue",
              width=300,
              height=25,
              show_text=1,
              norm=1):
     self.parent = parent
     self.percent = 0
     self.top = makeToplevel(parent, title=title)
     self.top.wm_protocol("WM_DELETE_WINDOW", self.wmDeleteWindow)
     self.top.wm_group(parent)
     self.top.wm_resizable(False, False)
     self.top.config(cursor="watch")
     #
     self.frame = ttk.Frame(self.top, relief='flat', borderwidth=0)
     self.progress = ttk.Progressbar(self.frame, maximum=100, length=250)
     # style = ttk.Style(self.progress)
     # style.configure('TProgressbar', background=color)
     if images:
         self.f1 = ttk.Label(self.frame, image=images[0])
         self.f1.pack(side='left', ipadx=8, ipady=4)
         self.progress.pack(side='left', expand=True, fill='x')
         self.f2 = ttk.Label(self.frame, image=images[1])
         self.f2.pack(side='left', ipadx=8, ipady=4)
     else:
         self.progress.pack(expand=True, fill='x')
     self.frame.pack(expand=True, fill='both')
     if 1:
         setTransient(self.top, None, relx=0.5, rely=0.5)
     else:
         self.update(percent=0)
     self.norm = norm
     self.steps_sum = 0
Example #19
0
 def __init__(self, dialog, parent, app, player, **kw):
     ttk.Frame.__init__(self, parent)
     #
     self.dialog = dialog
     self.app = app
     self.CHAR_H = self.dialog.font_metrics['linespace']
     self.CHAR_W = self.dialog.tkfont.measure('M')
     #
     self.player = player
     self.sort_by = 'name'
     self.tree_items = []
     self.tree_tabs = None
     self.games = {}                 # tree_itemid: gameid
     #
     frame = ttk.Frame(self)
     frame.pack(fill='both', expand=True, padx=10, pady=10)
     vsb = ttk.Scrollbar(frame)
     vsb.grid(row=0, column=1, sticky='ns')
     self.tree = ttk.Treeview(frame, columns=self.COLUMNS,
                              selectmode='browse')
     self.tree.grid(row=0, column=0, sticky='nsew')
     self.tree.config(yscrollcommand=vsb.set)
     vsb.config(command=self.tree.yview)
     frame.rowconfigure(0, weight=1)
     frame.columnconfigure(0, weight=1)
     hsb = ttk.Scrollbar(frame, orient='horizontal')
     hsb.grid(row=1, column=0, sticky='ew')
     self.tree.config(xscrollcommand=hsb.set)
     hsb.config(command=self.tree.xview)
     bind(self.tree, '<<TreeviewSelect>>', self.treeviewSelected)
     #
     self.formatter = TreeFormatter(self.app, self.tree, self,
                                    self.dialog.heading_tkfont,
                                    self.CHAR_W, self.CHAR_H)
     self.createHeader(player)
     bind(self.tree, '<Map>', self.mapEvent)
Example #20
0
    def __init__(self, dialog, parent, app, player, gameid, **kw):
        ttk.Frame.__init__(self, parent)

        self.mapped = False

        self.dialog = dialog
        self.app = app
        self.player = player
        self.gameid = gameid
        self.items = []
        self.formatter = ProgressionFormatter(app, player, gameid)

        frame = ttk.Frame(self)
        frame.pack(expand=True, fill='both', padx=5, pady=10)
        frame.columnconfigure(0, weight=1)

        # constants
        w = dialog.tkfont.measure('M') * 42
        w = max(w, 500)
        w = min(w, 600)
        self.canvas_width, self.canvas_height = w, 325
        cond = parent.winfo_screenwidth() < 800 or \
            parent.winfo_screenheight() < 600
        if cond:
            self.canvas_width, self.canvas_height = 400, 200
        self.xmargin, self.ymargin = 10, 10
        self.graph_dx, self.graph_dy = 10, 10
        self.played_color = '#ff7ee9'
        self.won_color = '#00dc28'
        self.percent_color = 'blue'
        # create canvas
        self.canvas = canvas = tkinter.Canvas(frame, bg='#dfe8ff', bd=0,
                                              highlightthickness=1,
                                              highlightbackground='black',
                                              width=self.canvas_width,
                                              height=self.canvas_height)
        canvas.pack(side='left', padx=5)

        # right frame
        right_frame = ttk.Frame(frame)
        right_frame.pack(side='left', fill='x', padx=5)
        self.all_games_variable = var = tkinter.StringVar()
        var.set('all')
        b = ttk.Radiobutton(right_frame, text=_('All games'),
                            variable=var, value='all',
                            command=self.updateGraph)
        b.pack(fill='x', expand=True, padx=3, pady=1)
        b = ttk.Radiobutton(right_frame, text=_('Current game'),
                            variable=var, value='current',
                            command=self.updateGraph)
        b.pack(fill='x', expand=True, padx=3, pady=1)

        label_frame = ttk.LabelFrame(right_frame, text=_('Statistics for'))
        label_frame.pack(side='top', fill='x', pady=5)
        self.variable = var = tkinter.StringVar()
        var.set('week')
        for v, t in (
            ('week',  _('Last 7 days')),
            ('month', _('Last month')),
            ('year',  _('Last year')),
            ('all',   _('All time')),
                ):
            b = ttk.Radiobutton(label_frame, text=t, variable=var,
                                value=v, command=self.updateGraph)
            b.pack(fill='x', expand=True, padx=3, pady=1)

        label_frame = ttk.LabelFrame(right_frame, text=_('Show graphs'))
        label_frame.pack(side='top', fill='x', pady=5)
        self.played_graph_var = tkinter.BooleanVar()
        self.played_graph_var.set(True)
        b = ttk.Checkbutton(label_frame, text=_('Played'),
                            command=self.updateGraph,
                            variable=self.played_graph_var)
        b.pack(fill='x', expand=True, padx=3, pady=1)
        self.won_graph_var = tkinter.BooleanVar()
        self.won_graph_var.set(True)
        b = ttk.Checkbutton(label_frame, text=_('Won'),
                            command=self.updateGraph,
                            variable=self.won_graph_var)
        b.pack(fill='x', expand=True, padx=3, pady=1)
        self.percent_graph_var = tkinter.BooleanVar()
        self.percent_graph_var.set(True)
        b = ttk.Checkbutton(label_frame, text=_('% won'),
                            command=self.updateGraph,
                            variable=self.percent_graph_var)
        b.pack(fill='x', expand=True, padx=3, pady=1)

        label_frame = ttk.LabelFrame(right_frame, text=_('Date format'))
        label_frame.pack(side='top', fill='x', pady=5)
        self.date_format = tkinter.StringVar()
        self.date_format.set(self.app.opt.date_format)
        b = ttk.Radiobutton(label_frame, text=_('MM-DD'),
                            command=self.updateDateFormat,
                            variable=self.date_format,
                            value='%m-%d')
        b.pack(fill='x', expand=True, padx=3, pady=1)
        b = ttk.Radiobutton(label_frame, text=_('DD-MM'),
                            command=self.updateDateFormat,
                            variable=self.date_format,
                            value='%d-%m')
        b.pack(fill='x', expand=True, padx=3, pady=1)

        # self.createGraph()
        bind(canvas, '<Map>', self.createGraph)
Example #21
0
    def __init__(self, parent, title, app, gameid, top, **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)

        cnf = {'master': top_frame,
               'padding': (4, 1),
               }
        frame = ttk.Frame(**cnf)
        frame.pack(expand=True, fill='both', padx=10, pady=10)
        frame.columnconfigure(0, weight=1)
        cnf['master'] = frame
        cnf['text'] = _('N')
        label = ttk.Label(**cnf)
        label.grid(row=0, column=0, sticky='ew')
        if gameid == 'all':
            cnf['text'] = _('Game')
            label = ttk.Label(**cnf)
            label.grid(row=0, column=1, sticky='ew')
        cnf['text'] = _('Game number')
        label = ttk.Label(**cnf)
        label.grid(row=0, column=2, sticky='ew')
        cnf['text'] = _('Started at')
        label = ttk.Label(**cnf)
        label.grid(row=0, column=3, sticky='ew')
        cnf['text'] = _('Result')
        label = ttk.Label(**cnf)
        label.grid(row=0, column=4, sticky='ew')

        row = 1
        for i in top:
            # N
            cnf['text'] = str(row)
            label = ttk.Label(**cnf)
            label.grid(row=row, column=0, sticky='ew')
            if gameid == 'all':
                name = app.getGameTitleName(i.gameid)
                if name is None:
                    name = _("** UNKNOWN %d **") % i.gameid
                cnf['text'] = name
                label = ttk.Label(**cnf)
                label.grid(row=row, column=1, sticky='ew')
            # Game number
            cnf['text'] = '#'+str(i.game_number)
            label = ttk.Label(**cnf)
            label.grid(row=row, column=2, sticky='ew')
            # Start time
            t = time.strftime(
                '%Y-%m-%d %H:%M', time.localtime(i.game_start_time))
            cnf['text'] = t
            label = ttk.Label(**cnf)
            label.grid(row=row, column=3, sticky='ew')
            # Result
            if isinstance(i.value, float):
                # time
                s = format_time(i.value)
            else:
                # moves
                s = str(i.value)
            cnf['text'] = s
            label = ttk.Label(**cnf)
            label.grid(row=row, column=4, sticky='ew')
            row += 1

        focus = self.createButtons(bottom_frame, kw)
        self.mainloop(focus, kw.timeout)
Example #22
0
    def __init__(self, parent, title, cardset, images, **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 = ttk.Frame(top_frame)
        frame.pack(fill="both", expand=True, padx=5, pady=10)
        #
        #
        row = 0
        info_frame = ttk.LabelFrame(frame, text=_('About cardset'))
        info_frame.grid(row=row, column=0, columnspan=2, sticky='ew',
                        padx=0, pady=5, ipadx=5, ipady=5)
        row += 1
        styles = nationalities = year = None
        if cardset.si.styles:
            styles = '\n'.join([CSI.STYLE[i] for i in cardset.si.styles])
        if cardset.si.nationalities:
            nationalities = '\n'.join([CSI.NATIONALITY[i]
                                       for i in cardset.si.nationalities])
        if cardset.year:
            year = str(cardset.year)
        frow = 0
        for n, t in (
            # ('Version:', str(cardset.version)),
            (_('Type:'),          CSI.TYPE[cardset.type]),
            (_('Styles:'),        styles),
            (_('Nationality:'),   nationalities),
            (_('Year:'),          year),
            # (_('Number of cards:'), str(cardset.ncards)),
            (_('Size:'), '%d x %d' % (cardset.CARDW, cardset.CARDH)),
                ):
            if t is not None:
                label = ttk.Label(info_frame, text=n,
                                  anchor='w', justify='left')
                label.grid(row=frow, column=0, sticky='nw', padx=4)
                label = ttk.Label(info_frame, text=t,
                                  anchor='w', justify='left')
                label.grid(row=frow, column=1, sticky='nw', padx=4)
                frow += 1
        if images:
            try:
                from random import choice
                im = choice(images)
                f = os.path.join(cardset.dir, cardset.backname)
                self.back_image = loadImage(file=f)  # store the image
                label = ttk.Label(info_frame, image=im, padding=5)
                label.grid(row=0, column=2, rowspan=frow+1, sticky='ne')
                label = ttk.Label(info_frame, image=self.back_image,
                                  padding=(0, 5, 5, 5))  # left margin = 0
                label.grid(row=0, column=3, rowspan=frow+1, sticky='ne')

                info_frame.columnconfigure(2, weight=1)
                info_frame.rowconfigure(frow, weight=1)
            except Exception:
                pass
        if USE_PIL:
            padx = 4
            pady = 0
            settings_frame = ttk.LabelFrame(frame, text=_('Settings'))
            settings_frame.grid(row=row, column=0, columnspan=2, sticky='ew',
                                padx=0, pady=5, ipadx=5, ipady=5)
            row += 1
            var = tkinter.IntVar()
            self.x_offset = PysolScale(
                settings_frame, label=_('X offset:'),
                from_=5, to=40, resolution=1,
                orient='horizontal', variable=var,
                value=cardset.CARD_XOFFSET,
                # command=self._updateScale
                )
            self.x_offset.grid(row=0, column=0, sticky='ew',
                               padx=padx, pady=pady)
            var = tkinter.IntVar()
            self.y_offset = PysolScale(
                settings_frame, label=_('Y offset:'),
                from_=5, to=40, resolution=1,
                orient='horizontal', variable=var,
                value=cardset.CARD_YOFFSET,
                # command=self._updateScale
                )
            self.y_offset.grid(row=1, column=0, sticky='ew',
                               padx=padx, pady=pady)
            row += 1

        # bg = top_frame["bg"]
        bg = 'white'
        text_w = tkinter.Text(frame, bd=1, relief="sunken", wrap="word",
                              padx=4, width=64, height=16, bg=bg)
        text_w.grid(row=row, column=0, sticky='nsew')
        sb = ttk.Scrollbar(frame)
        sb.grid(row=row, column=1, sticky='ns')
        text_w.configure(yscrollcommand=sb.set)
        sb.configure(command=text_w.yview)
        frame.columnconfigure(0, weight=1)
        frame.rowconfigure(1, weight=1)
        #
        text = ''
        fn = os.path.join(cardset.dir, "COPYRIGHT")
        try:
            with open(fn, "rt") as fh:
                text = fh.read()
        except Exception:
            pass
        if text:
            text_w.config(state="normal")
            text_w.insert("insert", text)
        text_w.config(state="disabled")
        #
        focus = self.createButtons(bottom_frame, kw)
        # focus = text_w
        self.mainloop(focus, kw.timeout)
Example #23
0
 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
     self.cardset_values = None
     # 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 = ttk.PanedWindow(top_frame, orient='horizontal')
     paned_window.pack(expand=True, fill='both')
     left_frame = ttk.Frame(paned_window)
     right_frame = ttk.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 = PysolScale(
             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 = PysolScale(
             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 = ttk.Checkbutton(
             left_frame, text=_('Auto scaling'),
             variable=self.auto_scale,
             takefocus=False,
             command=self._updateAutoScale
             )
         check.grid(row=3, column=0, columnspan=2, sticky='ew',
                    padx=padx, pady=pady)
         #
         self.preserve_aspect = tkinter.BooleanVar()
         self.preserve_aspect.set(app.opt.preserve_aspect_ratio)
         self.aspect_check = ttk.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='ew',
                                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)
Example #24
0
    def __init__(self,
                 top,
                 menubar,
                 dir,
                 size=0,
                 relief='flat',
                 compound='none'):
        from pysollib.options import calcCustomMouseButtonsBinding
        self.top = top
        self.menubar = menubar
        self.side = -1
        self._tooltips = []
        self._widgets = []
        self.dir = dir
        self.size = size
        self.compound = compound
        self.orient = 'horizontal'
        #
        self.frame = ttk.Frame(top,
                               class_='Toolbar',
                               relief=TkSettings.toolbar_relief,
                               borderwidth=TkSettings.toolbar_borderwidth)
        #
        for label, f, t in (
            (n_("New"), self.mNewGame, _("New game")),
            (n_("Restart"), self.mRestart, _("Restart the\ncurrent game")),
            (None, None, None),
            (n_("Open"), self.mOpen, _("Open a\nsaved game")),
            (n_("Save"), self.mSave, _("Save game")),
            (None, None, None),
            (n_("Undo"), self.mUndo, _("Undo last move")),
            (n_("Redo"), self.mRedo, _("Redo last move")),
            (n_("Autodrop"), self.mDrop, _("Auto drop cards")),
            (n_("Shuffle"), self.mShuffle, _("Shuffle tiles")),
            (n_("Pause"), self.mPause, _("Pause game")),
            (None, None, None),
            (n_("Statistics"), self.mPlayerStats, _("View statistics")),
            (n_("Rules"), self.mHelpRules, _("Rules for this game")),
            (None, None, None),
            (n_("Quit"), self.mQuit, _("Quit %s") % TITLE),
        ):
            if label is None:
                sep = self._createSeparator()
                sep.bind(calcCustomMouseButtonsBinding("<{mouse_button3}>"),
                         self.rightclickHandler)
            elif label == 'Pause':
                self._createButton(label, f, check=True, tooltip=t)
            else:
                self._createButton(label, f, tooltip=t)
        self.pause_button.config(variable=menubar.tkopt.pause)

        self.popup = MfxMenu(master=None, label=n_('Toolbar'), tearoff=0)
        createToolbarMenu(menubar, self.popup)

        position = len(self._widgets)
        self.frame.rowconfigure(position, weight=1)
        self.frame.columnconfigure(position, weight=1)
        #
        self._createLabel("player",
                          label=n_('Player'),
                          tooltip=_("Player options"))
        #
        self.player_label.bind(
            calcCustomMouseButtonsBinding("<{mouse_button1}>"),
            self.mOptPlayerOptions)
        self.frame.bind(calcCustomMouseButtonsBinding("<{mouse_button3}>"),
                        self.rightclickHandler)
        #
        self.setCompound(compound, force=True)
Example #25
0
    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.weight_var.set(self.font_weight == 'bold')
        self.slant_var = tkinter.BooleanVar()
        self.slant_var.set(self.font_slant == 'italic')
        self.size_var = tkinter.IntVar()
        self.size_var.set(self.font_size)
        #
        frame = ttk.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 = ttk.Entry(frame)
        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 = ttk.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 = ttk.Checkbutton(frame,
                              text=_('Bold'),
                              command=self.fontupdate,
                              variable=self.weight_var)
        cb1.grid(row=2, column=0, columnspan=2, sticky='we')
        cb2 = ttk.Checkbutton(frame,
                              text=_('Italic'),
                              command=self.fontupdate,
                              variable=self.slant_var)
        cb2.grid(row=3, column=0, columnspan=2, sticky='we')

        sc = PysolScale(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')
        #
        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 = tkinter.BooleanVar()
        self.music.set(app.opt.music != 0)
        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 = ttk.Frame(top_frame)
        frame.pack(expand=True, fill='both', padx=5, pady=5)
        frame.columnconfigure(1, weight=1)
        #
        row = 0
        w = ttk.Checkbutton(frame,
                            variable=self.sound,
                            text=_("Sound enabled"))
        w.grid(row=row, column=0, columnspan=2, sticky='ew')
        #
        if os.name == "nt" and pysolsoundserver:
            row += 1
            w = ttk.Checkbutton(frame,
                                variable=self.sound_mode,
                                text=_("Use DirectX for sound playing"),
                                command=self.mOptSoundDirectX)
            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
            ttk.Label(frame, text=_('Sample volume:'),
                      anchor='w').grid(row=row, column=0, sticky='ew')
            w = PysolScale(
                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='w', padx=5)
            row += 1
            w = ttk.Checkbutton(frame,
                                variable=self.music,
                                text=_("Music enabled"))
            w.grid(row=row, column=0, columnspan=2, sticky='ew')

            row += 1
            ttk.Label(frame, text=_('Music volume:'),
                      anchor='w').grid(row=row, column=0, sticky='ew')
            w = PysolScale(
                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='w', padx=5)

        else:
            # remove "Apply" button
            kw.strings[1] = None
        #
        frame = ttk.LabelFrame(top_frame, text=_('Enable samples'))
        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 = ttk.Checkbutton(frame, text=t, variable=v)
            w.grid(row=row, column=col, sticky='ew', padx=3, pady=1)
            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)
Example #27
0
 def createFrame(self, kw):
     width = kw.get("width")
     height = kw.get("height")
     self.frame = ttk.Frame(self.parent, width=width, height=height)
Example #28
0
    def __init__(self):
        self._root = tk.Tk()
        self._root.title('Loopy Upload Client')

        #self._root.geometry('500x300')
        self._root.resizable(width=False, height=False)

        self._root.grid_columnconfigure(0, weight=1)
        self._root.grid_rowconfigure(0, weight=1)

        self._frame = ttk.Frame(self._root)
        self._frame.columnconfigure(1, weight=1)
        self._frame.columnconfigure(1, weight=3)

        self._u_thread = None
        self._u_error = None

        self._auth_ok = False
        self._auth_ok_message = 'Ready'

        self._progress = 0

        def _label_entry(_lbl,
                         _txt,
                         _row,
                         is_password=False,
                         width=None,
                         **gridpos):
            l = ttk.Label(self._frame, text=_lbl)
            l.grid(column=0, row=_row, sticky='W', padx=5, pady=5, **gridpos)

            sv = tk.StringVar()
            sv.set(_txt or '')
            sve = ttk.Entry(self._frame,
                            textvariable=sv,
                            show="*" if is_password else None,
                            width=width)
            sve.grid(column=1,
                     row=_row,
                     padx=5,
                     pady=5,
                     sticky="EW",
                     **gridpos)

            return sv, sve

        self._url, self._urle = _label_entry(
            'Loopy URL', 'https://app.loopb.io/file-upload', 1)
        self._api_key, self._api_keye = _label_entry('API Key',
                                                     '',
                                                     2,
                                                     width=32)
        self._email, self._emaile = _label_entry('Email (optional)', '', 3)

        self._c_button = ttk.Button(self._frame,
                                    text='Connect',
                                    state='enabled')
        self._c_button.grid(column=1, row=4, sticky='E', padx=5, pady=5)
        self._c_button.configure(command=self._connect_button_clicked)

        self._u_button = ttk.Button(self._frame,
                                    text='Select & Upload',
                                    state='disabled')
        self._u_button.grid(column=1, row=5, sticky='E', padx=5, pady=5)
        self._u_button.configure(command=self._upload_button_clicked)

        self._result_label = ttk.Label(self._frame)
        self._result_label.grid(row=6, columnspan=3, padx=5, pady=5)

        self._frame.grid(padx=10, pady=10, sticky='NSEW')
Example #29
0
    def __init__(self, parent, title, app, gameid, bookmark=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)
        #
        self.app = app
        self.gameid = gameid
        self.bookmark = bookmark
        self.random = None
        if self.TreeDataHolder_Class.data is None:
            self.TreeDataHolder_Class.data = self.TreeData_Class(app)
        #
        self.top.wm_minsize(400, 200)
        sw = self.top.winfo_screenwidth()
        sh = self.top.winfo_screenheight()

        h = sh * .8
        w1, w2 = min(250, sw / 4), max(sw / 2 + ((sw / 4) - 250), sw / 2)

        # print sw, w1, w2
        w2 = max(200, min(w2, 10 + 12 * (app.subsampled_images.CARDW + 10)))
        # print sw, w1, w2
        # padx, pady = kw.padx, kw.pady
        # padx, pady = kw.padx/2, kw.pady/2
        padx, pady = 4, 4
        # PanedWindow
        paned_window = ttk.PanedWindow(top_frame, orient='horizontal')
        paned_window.pack(expand=True, fill='both', padx=8, pady=8)
        left_frame = ttk.Frame(paned_window)
        right_frame = ttk.Frame(paned_window)
        paned_window.add(left_frame)
        paned_window.add(right_frame)
        # Tree
        font = app.getFont("default")
        self.tree = self.Tree_Class(self,
                                    left_frame,
                                    key=gameid,
                                    default=kw.default,
                                    font=font,
                                    width=w1,
                                    height=h)
        self.tree.frame.pack(padx=padx, pady=pady, expand=True, fill='both')
        # LabelFrame
        info_frame = ttk.LabelFrame(right_frame, text=_('About game'))
        info_frame.grid(row=0,
                        column=0,
                        padx=padx,
                        pady=pady,
                        ipadx=4,
                        ipady=4,
                        sticky='nws')
        stats_frame = ttk.LabelFrame(right_frame, text=_('Statistics'))
        stats_frame.grid(row=0,
                         column=1,
                         padx=padx,
                         pady=pady,
                         ipadx=4,
                         ipady=4,
                         sticky='nws')
        # Info
        self.info_labels = {}
        for n, t, f, row in (
            ('name', _('Name:'), info_frame, 0),
            ('altnames', _('Alternate names:'), info_frame, 1),
            ('category', _('Category:'), info_frame, 2),
            ('type', _('Type:'), info_frame, 3),
            ('skill_level', _('Skill level:'), info_frame, 4),
            ('decks', _('Decks:'), info_frame, 5),
            ('redeals', _('Redeals:'), info_frame, 6),
                #
            ('played', _('Played:'), stats_frame, 0),
            ('won', _('Won:'), stats_frame, 1),
            ('lost', _('Lost:'), stats_frame, 2),
            ('time', _('Playing time:'), stats_frame, 3),
            ('moves', _('Moves:'), stats_frame, 4),
            ('percent', _('% won:'), stats_frame, 5),
        ):
            title_label = ttk.Label(f, text=t, justify='left', anchor='w')
            title_label.grid(row=row, column=0, sticky='nw', padx=4)
            text_label = ttk.Label(f, justify='left', anchor='w')
            text_label.grid(row=row, column=1, sticky='nw', padx=4)
            self.info_labels[n] = (title_label, text_label)
        # info_frame.columnconfigure(1, weight=1)
        info_frame.rowconfigure(6, weight=1)
        stats_frame.rowconfigure(6, weight=1)
        # Canvas
        self.preview = MfxScrolledCanvas(right_frame, width=w2)
        self.preview.setTile(app, app.tabletile_index, force=True)
        self.preview.grid(row=1,
                          column=0,
                          columnspan=3,
                          padx=padx,
                          pady=pady,
                          sticky='nsew')
        right_frame.columnconfigure(1, weight=1)
        right_frame.rowconfigure(1, weight=1)
        #
        focus = self.createButtons(bottom_frame, kw)
        # set the scale factor
        self.preview.canvas.preview = 2
        # create a preview of the current game
        self.preview_key = -1
        self.preview_game = None
        self.preview_app = None
        self.updatePreview(gameid, animations=0)
        # focus = self.tree.frame
        self.mainloop(focus, kw.timeout)
Example #30
0
    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 = ttk.Frame(top_frame)
        frame.pack(expand=True, fill='both', padx=10, pady=10)
        frame.columnconfigure(0, weight=1)

        notebook = ttk.Notebook(frame)
        notebook.pack(expand=True, fill='both')

        for w in WizardWidgets:
            if isinstance(w, six.string_types):
                frame = ttk.Frame(notebook)
                notebook.add(frame, text=w, sticky='nsew', padding=5)
                frame.columnconfigure(1, weight=1)
                row = 0
                continue

            ttk.Label(frame, text=w.label).grid(row=row, column=0)

            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(e, w=w):
                    self.presetSelected(e, w)

                cb = PysolCombo(frame,
                                values=tuple(values),
                                textvariable=w.variable,
                                exportselection=False,
                                selectcommand=callback,
                                state='readonly',
                                width=32)
                cb.grid(row=row, column=1, sticky='ew', padx=2, pady=2)
            elif w.widget == 'entry':
                if w.variable is None:
                    w.variable = tkinter.StringVar()
                en = ttk.Entry(frame, textvariable=w.variable)
                en.grid(row=row, column=1, sticky='ew', padx=2, pady=2)
            elif w.widget == 'menu':
                if w.variable is None:
                    w.variable = tkinter.StringVar()
                values = [_(v) for v in w.values]
                cb = PysolCombo(frame,
                                values=tuple(values),
                                textvariable=w.variable,
                                exportselection=False,
                                state='readonly',
                                width=32)
                cb.grid(row=row, column=1, sticky='ew', padx=2, pady=2)
            elif w.widget == 'spin':
                if w.variable is None:
                    w.variable = tkinter.IntVar()
                else:
                    # delete all trace callbacks
                    for mod, cbname in w.variable.trace_vinfo():
                        w.variable.trace_vdelete(mod, cbname)
                from_, to = w.values
                # s = Spinbox(
                #   frame, textvariable=w.variable, from_=from_, to=to)
                s = PysolScale(frame,
                               from_=from_,
                               to=to,
                               resolution=1,
                               orient='horizontal',
                               variable=w.variable)
                s.grid(row=row, column=1, sticky='ew', padx=2, pady=2)
            elif w.widget == 'check':
                if w.variable is None:
                    w.variable = tkinter.BooleanVar()
                ch = ttk.Checkbutton(frame,
                                     variable=w.variable,
                                     takefocus=False)
                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'):
                v = _(v)
            w.variable.set(v)

            row += 1

        focus = self.createButtons(bottom_frame, kw)
        self.mainloop(focus, kw.timeout)