Example #1
0
    def __init__(self, parent, model):
        super().__init__(parent)
        self._model = model
        util.stretchy_rows_cols(self, [0], [0])
        self._text = richtext.RichText(self, height=12, scroll="v")
        self._text.grid(sticky=tk.NSEW, row=0, column=0)
        self._text.add_text(_text["main"])

        frame = ttk.Frame(parent)
        frame.grid(row=1, column=0, sticky=tk.NSEW)
        ttk.Label(frame, text=_text["every"]).grid(row=0, column=0, sticky=tk.E, pady=2)
        self._every_var = tk.StringVar()
        self._every = ttk.Entry(frame, width=5, textvariable=self._every_var)
        self._every.grid(row=0, column=1, sticky=tk.W, pady=2)
        util.IntValidator(self._every, self._every_var, self.change)
        tooltips.ToolTipYellow(self._every, _text["everytt"])

        ttk.Label(frame, text=_text["score"]).grid(row=1, column=0, sticky=tk.E, pady=2)
        self._score_var = tk.StringVar()
        self._score = ttk.Entry(frame, width=5, textvariable=self._score_var)
        self._score.grid(row=1, column=1, sticky=tk.W, pady=2)
        util.IntValidator(self._score, self._score_var, self.change)
        tooltips.ToolTipYellow(self._score, _text["scorett"])
        
        self._preview_frame = ttk.LabelFrame(frame, text=_text["pp"])
        self._preview_frame.grid(row=2, column=0, columnspan=2, sticky=tk.NSEW, padx=5, pady=5)
        self._preview_label = ttk.Label(self._preview_frame)
        self._preview_label.grid(sticky=tk.NSEW)
        
        self.update()
Example #2
0
 def _add_widgets(self):
     self._selected = tk.StringVar()
     rb = ttk.Radiobutton(self,
                          text=_text["bi"],
                          value=0,
                          variable=self._selected,
                          command=self._sel_changed)
     rb.grid(row=0, column=0, sticky=tk.W)
     tooltips.ToolTipYellow(rb, _text["bi_tt"])
     if pyproj is not None:
         choices = ["utm", "uk", "epsg"]
         for index, name in enumerate(choices):
             rb = ttk.Radiobutton(self,
                                  text=_text[name],
                                  value=index + 1,
                                  variable=self._selected,
                                  command=self._sel_changed)
             rb.grid(row=index + 1, column=0, sticky=tk.W)
             tooltips.ToolTipYellow(rb, _text[name + "_tt"])
         self._espg_value = tk.StringVar()
         self._espg_entry = ttk.Entry(self, textvariable=self._espg_value)
         self._espg_entry.grid(row=3, column=1, sticky=tk.W)
         util.IntValidator(widget=self._espg_entry,
                           variable=self._espg_value,
                           callback=self._sel_changed,
                           allow_empty=False)
         href = util.HREF(self,
                          text=_text["epsg_url_text"],
                          url=_text["epsg_url"])
         href.grid(row=3, column=2)
         tooltips.ToolTipYellow(href, _text["epsg_url"])
     else:
         ttk.Label(self, text=_text["no_pyproj"],
                   wraplength=200).grid(row=1, column=0, sticky=tk.W)
     self._init()
Example #3
0
    def __init__(self, parent, model, parent_model):
        self._model = model
        self._parent_model = parent_model
        super().__init__(parent)

        subframe = ttk.Frame(self)
        subframe.grid(row=0, column=0, sticky=tk.W)
        label = ttk.Label(subframe, text=_text["spbw"])
        label.grid(row=0, column=0, padx=2, pady=2)
        tooltips.ToolTipYellow(label, _text["spbw_tt"])
        self._space_bandwidth = tk.StringVar()
        entry = ttk.Entry(subframe, textvariable=self._space_bandwidth, width=5)
        entry.grid(row=0, column=1, padx=2)
        util.IntValidator(entry, self._space_bandwidth, callback=self._space_bw_changed)
        ttk.Label(subframe, text=_text["spbw1"]).grid(row=0, column=2, padx=2)

        subframe = ttk.Frame(self)
        subframe.grid(row=1, column=0, sticky=tk.W)
        label = ttk.Label(subframe, text=_text["tbw"])
        label.grid(row=0, column=0, padx=2, pady=2)
        tooltips.ToolTipYellow(label, _text["tbw_tt"])
        self._time_bandwidth = tk.StringVar()
        entry = ttk.Entry(subframe, textvariable=self._time_bandwidth, width=5)
        entry.grid(row=0, column=1, padx=2)
        util.IntValidator(entry, self._time_bandwidth, callback=self._time_bw_changed)

        self._plot = mtp.CanvasFigure(self)
        self._plot.grid(padx=2, pady=2, sticky=tk.NSEW, row=2, column=0)
        util.stretchy_rows_cols(self, [2], [0])

        self._update()
Example #4
0
    def _add_widgets(self):
        label = ttk.Label(self, text=_text["size"])
        label.grid(row=0, column=0, padx=2, pady=2)
        tooltips.ToolTipYellow(label, _text["sizett"])
        self._size = tk.StringVar()
        self._size_entry = ttk.Entry(self, textvariable=self._size)
        self._size_entry.grid(row=0, column=1, padx=2, pady=2)
        util.IntValidator(self._size_entry, self._size, self._change, False)

        label = ttk.Label(self, text=_text["xo"])
        label.grid(row=1, column=0, padx=2, pady=2)
        tooltips.ToolTipYellow(label, _text["xyott"])
        self._xo = tk.StringVar()
        self._xo_entry = ttk.Entry(self, textvariable=self._xo)
        self._xo_entry.grid(row=1, column=1, padx=2, pady=2)
        util.FloatValidator(self._xo_entry, self._xo, self._change, False)

        label = ttk.Label(self, text=_text["yo"])
        label.grid(row=2, column=0, padx=2, pady=2)
        tooltips.ToolTipYellow(label, _text["xyott"])
        self._yo = tk.StringVar()
        self._yo_entry = ttk.Entry(self, textvariable=self._yo)
        self._yo_entry.grid(row=2, column=1, padx=2, pady=2)
        util.FloatValidator(self._yo_entry, self._yo, self._change, False)

        self._plot = None
        self._plot_grid()
        self._init()
    def __init__(self, parent, model, callback=None):
        super().__init__(parent)
        self._model = model
        self.callback = callback

        subframe = ttk.Frame(self)
        subframe.grid(row=2, column=0, padx=2, pady=3, sticky=tk.NW)
        self._input_crs_label = ttk.Label(subframe,
                                          text=_text["icrs"].format(""))
        self._input_crs_label.grid(row=0, column=0, padx=2)
        self._input_crs_lavel_tt = tooltips.ToolTipYellow(
            self._input_crs_label, _text["icrstt"])
        label = ttk.Label(subframe, text=_text["newcrs"])
        label.grid(row=0, column=1, padx=2)
        self._output_crs_entry_var = tk.StringVar()
        self._output_crs_entry = ttk.Entry(
            subframe, textvariable=self._output_crs_entry_var)
        self._output_crs_entry.grid(row=0, column=2, padx=2)
        util.IntValidator(self._output_crs_entry,
                          self._output_crs_entry_var,
                          callback=self._new_epsg,
                          allow_empty=True)
        tooltips.ToolTipYellow(label, _text["newcrstt"])
        href = util.HREF(subframe,
                         text=_text["epsg_url_text"],
                         url=_text["epsg_url"])
        href.grid(row=0, column=3, padx=2)
        tooltips.ToolTipYellow(href, _text["epsg_url"])
Example #6
0
    def add_widgets(self, frame):
        util.stretchy_rows_cols(frame, [1], [0,1])

        subframe = ttk.Frame(frame)
        subframe.grid(row=0, column=0, sticky=tk.NSEW, padx=1, pady=1)
        label = ttk.Label(subframe, text=_text["sk"])
        label.grid(row=0, column=0, padx=2)
        tooltips.ToolTipYellow(label, _text["sktt"])
        self._space_cbox = ttk.Combobox(subframe, height=5, state="readonly", width=40,
            values=_text["skernals"])
        self._space_cbox.bind("<<ComboboxSelected>>", self._space_changed)
        self._space_cbox.grid(row=0, column=1, padx=2)
        self._space_frame = ttk.LabelFrame(frame, text=_text["sks"])
        self._space_frame.grid(row=1, column=0, sticky=tk.NSEW, padx=1, pady=1)
        util.stretchy_rows_cols(self._space_frame, [0], [0])

        subframe = ttk.Frame(frame)
        subframe.grid(row=0, column=1, sticky=tk.NSEW, padx=1, pady=1)
        label = ttk.Label(subframe, text=_text["tk"])
        label.grid(row=0, column=0, padx=2)
        tooltips.ToolTipYellow(label, _text["tktt"])
        self._time_cbox = ttk.Combobox(subframe, height=5, state="readonly", width=40,
            values=_text["tchoices"])
        self._time_cbox.bind("<<ComboboxSelected>>", self._time_changed)
        self._time_cbox.grid(row=0, column=1, padx=2)
        self._time_frame = ttk.LabelFrame(frame, text=_text["tks"])
        self._time_frame.grid(row=1, column=1, sticky=tk.NSEW, padx=1, pady=1)
        util.stretchy_rows_cols(self._time_frame, [0], [0])
Example #7
0
    def __init__(self, parent, model, style):
        super().__init__(parent)
        self._model = model
        util.stretchy_rows_cols(self, [3], [0])
        if style == "normal":
            self._text = richtext.RichText(self, height=12, scroll="v")
            self._text.grid(sticky=tk.NSEW, row=0, column=0)
            if gpd is None:
                self._error_case()
                return
            self._text.add_text(_text["main"])

        subframe = ttk.Frame(self)
        subframe.grid(row=1, column=0, padx=2, pady=3, sticky=tk.NW)
        ttk.Button(subframe, text=_text["load"],
                   command=self._load).grid(row=0, column=0, padx=2)
        self._filename_label = ttk.Label(subframe)
        self._filename_label.grid(row=0, column=1, padx=2)
        tooltips.ToolTipYellow(self._filename_label, _text["filett"])

        self._projectors_widget = projectors_view.GeoFrameProjectorWidget(
            self, self._model._projector, self._update)
        self._projectors_widget.grid(row=2,
                                     column=0,
                                     padx=2,
                                     pady=3,
                                     sticky=tk.NW)

        subframe = ttk.Frame(self)
        subframe.grid(row=3, column=0, padx=2, pady=3, sticky=tk.NSEW)
        util.stretchy_rows_cols(subframe, [0], [0, 1])
        self._preview_frame = ttk.LabelFrame(subframe, text=_text["preview"])
        self._preview_frame.grid(row=0, column=0, sticky=tk.NSEW, padx=2)
        util.stretchy_rows_cols(self._preview_frame, [0], [0])
        self._preview_canvas = mtp.CanvasFigure(self._preview_frame)
        self._preview_canvas.grid(sticky=tk.NSEW, padx=1, pady=1)
        self._preview_frame_tt = tooltips.ToolTipYellow(
            self._preview_frame, _text["previewnonett"])

        with_coords_frame = ttk.LabelFrame(subframe, text=_text["preview2"])
        with_coords_frame.grid(row=0, column=1, sticky=tk.NSEW, padx=2)
        util.stretchy_rows_cols(with_coords_frame, [0], [0])
        self._with_coords_canvas = mtp.CanvasFigure(with_coords_frame)
        self._with_coords_canvas.grid(sticky=tk.NSEW, padx=1, pady=1)
        self._with_coords_frame_tt = tooltips.ToolTipYellow(
            with_coords_frame, _text["previewnonett"])

        self._update()
Example #8
0
    def _add_controls(self, frame):
        subframe = tk.Frame(frame)
        subframe.grid(row=0, column=0, sticky=tk.W)
        label = ttk.Label(subframe, text=_text["win"])
        label.grid(row=0, column=0, padx=5, pady=2)
        tooltips.ToolTipYellow(label, _text["wintt"])
        self._window_var = tk.StringVar()
        entry = ttk.Entry(subframe, textvariable=self._window_var, width=5)
        entry.grid(row=0, column=1)
        util.IntValidator(entry,
                          self._window_var,
                          callback=self._window_changed)
        ttk.Label(subframe, text=_text["win2"]).grid(row=0, column=2, padx=2)

        subframe = ttk.LabelFrame(frame, text=_text["kernelframe"])
        subframe.grid(row=1, column=0, sticky=tk.NSEW)
        self._cbox = ttk.Combobox(subframe, height=5, state="readonly")
        self._cbox["values"] = _text["kernel_choices"]
        self._cbox.bind("<<ComboboxSelected>>", self._kernel_selected)
        self._cbox.current(0)
        self._cbox["width"] = 10
        self._cbox.grid(row=0, column=0, sticky=tk.W, padx=2, pady=2)
        self._kernel_options_frame = ttk.Frame(subframe)
        self._kernel_options_frame.grid(row=1, column=0, sticky=tk.NSEW)
        util.stretchy_rows_cols(subframe, [1], [0])

        util.stretchy_rows_cols(frame, [1], [0])
Example #9
0
 def _add_entry_row(self, subsubframe, text, tttext, entry_var, last_text):
     label = ttk.Label(subsubframe, text=text)
     label.grid(row=0, column=0, padx=2, pady=2)
     tooltips.ToolTipYellow(label, tttext)
     entry = ttk.Entry(subsubframe, textvariable=entry_var, width=7)
     entry.grid(row=0, column=1, padx=2, pady=2)
     ttk.Label(subsubframe, text=last_text).grid(row=0, column=2)
     return entry
Example #10
0
 def _add_rb(self, frame, text_name, value):
     rb = ttk.Radiobutton(frame,
                          text=_text[text_name],
                          value=value,
                          variable=self._coverage_choice,
                          command=self._coverage_choice_change)
     tooltips.ToolTipYellow(rb, _text[text_name + "_tt"])
     return rb
Example #11
0
 def _add_config_box(self, frame):
     label = ttk.Label(frame, text=_text["ttk"])
     label.grid(row=0, column=0, padx=2, pady=2)
     tooltips.ToolTipYellow(label, _text["ttk_tt"])
     self.theme_cbox = ttk.Combobox(frame, height=5, state="readonly")
     self.theme_cbox.bind("<<ComboboxSelected>>", self._theme_selected)
     self.theme_cbox.grid(row=0, column=1, padx=2, pady=2)
     self.theme_cbox["values"] = list(self.model.themes)
Example #12
0
 def _make_rb(self, frame, value, text, tt):
     rb = ttk.Radiobutton(frame,
                          text=text,
                          value=value,
                          variable=self._risk_choice,
                          command=self._risk_choice_change)
     tooltips.ToolTipYellow(rb, tt)
     return rb
Example #13
0
    def _add_widgets(self, frame):
        self._ktime_var, f, la = self._add_label_entry(frame, _text["ktime"], self._change)
        f.grid(row=0, column=0, sticky=tk.W, padx=1, pady=1)
        tooltips.ToolTipYellow(la, _text["ktime_tt"])
        self._kspace_var, f, la = self._add_label_entry(frame, _text["kspace"], self._change)
        f.grid(row=0, column=1, sticky=tk.W, padx=1, pady=1)
        tooltips.ToolTipYellow(la, _text["kspace_tt"])

        self._ibtime_var, f, la = self._add_label_entry(frame, _text["ibtime"], self._change, _text["ibtime2"], util.FloatValidator)
        f.grid(row=1, column=0, sticky=tk.W, padx=1, pady=1)
        tooltips.ToolTipYellow(la, _text["ibtime_tt"])
        self._ibspace_var, f, la = self._add_label_entry(frame, _text["ibspace"], self._change, _text["ibspace2"], util.FloatValidator)
        f.grid(row=1, column=1, sticky=tk.W, padx=1, pady=1)
        tooltips.ToolTipYellow(la, _text["ibspace_tt"])

        self._cttime_var, f, la = self._add_label_entry(frame, _text["cttime"], self._change, _text["cttime2"], util.FloatValidator)
        f.grid(row=2, column=0, sticky=tk.W, padx=1, pady=1)
        tooltips.ToolTipYellow(la, _text["cttime_tt"])
        self._ctspace_var, f, la = self._add_label_entry(frame, _text["ctspace"], self._change, _text["ctspace2"], util.FloatValidator)
        f.grid(row=2, column=1, sticky=tk.W, padx=1, pady=1)
        tooltips.ToolTipYellow(la, _text["ctspace_tt"])

        self._iters_var, f, la = self._add_label_entry(frame, _text["iters"], self._change)
        f.grid(row=100, column=0, sticky=tk.W, padx=1, pady=1)
        tooltips.ToolTipYellow(la, _text["iters_tt"])
Example #14
0
 def _no_proj(self):
     if self._plot is None:
         self._plot = ttk.Label(self, text=_text["no_proj"], wraplength=200)
         self._plot.grid(sticky=tk.W,
                         padx=2,
                         pady=2,
                         row=3,
                         column=0,
                         columnspan=2)
         tooltips.ToolTipYellow(self._plot, _text["no_proj_tt"])
Example #15
0
 def __init__(self, model, parent):
     super().__init__(parent)
     self.model = model
     util.stretchy_rows_cols(self, [2], [0])
     text = richtext.RichText(self, height=3, scroll="v")
     text.grid(row=0, column=0, sticky=tk.NSEW)
     text.add_text(_text["nkde_main"])
     frame = ttk.Frame(self)
     frame.grid(row=1, column=0, sticky=tk.W)
     label = ttk.Label(frame, text=_text["nkde_k"])
     label.grid(row=0, column=0, padx=2, pady=2)
     tooltips.ToolTipYellow(label, _text["nkde_k_tt"])
     self._k_value = tk.StringVar()
     entry = ttk.Entry(frame, textvariable=self._k_value)
     entry.grid(row=0, column=1, padx=2, pady=2)
     util.IntValidator(entry, self._k_value, callback=self._k_changed)
     self._plot = mtp.CanvasFigure(self)
     self._plot.grid(row=2, column=0, sticky=tk.NSEW)
     tooltips.ToolTipYellow(self._plot, _text["kdeplot"])
     self.update()
Example #16
0
    def _add_controls(self, frame):
        subframe = ttk.Frame(frame)
        subframe.grid(row=0, column=0, columnspan=2, sticky=tk.NW)
        label = ttk.Label(subframe, text=_text["time_bin"])
        label.grid(row=0, column=0, padx=2, pady=2)
        tooltips.ToolTipYellow(label, _text["time_bin_tt"])
        self._time_resolution = tk.StringVar()
        entry = ttk.Entry(subframe, textvariable=self._time_resolution)
        entry.grid(row=0, column=1, padx=2, pady=2)
        util.IntValidator(entry, self._time_resolution, callback=self._time_res_changed)
        self._time_res_cbox = ttk.Combobox(subframe, height=5, state="readonly", width=10)
        self._time_res_cbox["values"] = _text["time_bin_choices"]
        self._time_res_cbox.bind("<<ComboboxSelected>>", self._time_res_changed)
        self._time_res_cbox.current(0)
        self._time_res_cbox.grid(row=0, column=2, padx=2, pady=2)

        subframe = ttk.LabelFrame(frame, text=_text["kernel"])
        subframe.grid(row=1, column=0, sticky=tk.NSEW, padx=2, pady=2)
        self._kernel_cbox = ttk.Combobox(subframe, height=5, state="readonly", width=20)
        self._kernel_cbox["values"] = _text["kernels"]
        self._kernel_cbox.bind("<<ComboboxSelected>>", self._kernel_changed)
        self._kernel_cbox.current(0)
        self._kernel_cbox.grid(row=0, column=0, padx=2, pady=2, sticky=tk.W)
        self._kernel_frame = ttk.Frame(subframe)
        self._kernel_frame.grid(row=1, column=0, sticky=tk.NSEW)
        util.stretchy_rows_cols(subframe, [1], [0])

        subframe = ttk.LabelFrame(frame, text=_text["dist"])
        subframe.grid(row=1, column=1, sticky=tk.NSEW, padx=2, pady=2)
        self._dist_cbox = ttk.Combobox(subframe, height=5, state="readonly", width=30)
        self._dist_cbox["values"] = _text["dists"]
        self._dist_cbox.bind("<<ComboboxSelected>>", self._dist_changed)
        self._dist_cbox.current(0)
        self._dist_cbox.grid(row=0, column=0, padx=2, pady=2, sticky=tk.W)
        self._dist_frame = ttk.Frame(subframe)
        self._dist_frame.grid(row=1, column=0, sticky=tk.NSEW)
        tooltips.ToolTipYellow(self._dist_frame, _text["dist_tt"])
        util.stretchy_rows_cols(subframe, [1], [0])

        util.stretchy_rows_cols(frame, [1], [0,1])
Example #17
0
    def _add_widgets(self):
        subframe = ttk.Frame(self)
        subframe.grid(row=0, column=0, sticky=tk.W)

        label = ttk.Label(subframe, text=_text["g_bandwidth"])
        label.grid(row=0, column=0, padx=2, pady=2)
        tooltips.ToolTipYellow(label, _text["g_bandwidth_tt"])
        self._bandwidth_var = tk.StringVar()
        entry = ttk.Entry(subframe, textvariable=self._bandwidth_var, width=7)
        entry.grid(row=0, column=1, padx=2)
        util.IntValidator(entry, self._bandwidth_var, callback=self._change)
        ttk.Label(subframe, text=_text["g_bandwidth1"]).grid(row=0, column=2)

        label = ttk.Label(subframe, text=_text["g_std_devs"])
        label.grid(row=1, column=0, padx=2, pady=2)
        tooltips.ToolTipYellow(label, _text["g_std_devs_tt"])
        self._std_var = tk.StringVar()
        entry = ttk.Entry(subframe, textvariable=self._std_var, width=7)
        entry.grid(row=1, column=1, padx=2)
        util.FloatValidator(entry, self._std_var, callback=self._change)

        self._plot = mtp.CanvasFigure(self)
        self._plot.grid(padx=2, pady=2, sticky=tk.NSEW, row=1, column=0)
        util.stretchy_rows_cols(self, [1], [0])
Example #18
0
        def __init__(self, model, parent):
            super().__init__(parent)
            self.model = model
            util.stretchy_rows_cols(self, [2], [0])
            text = richtext.RichText(self, height=3, scroll="v")
            text.grid(row=0, column=0, sticky=tk.NSEW)
            text.add_text(_text["scipy_main"])

            self._plot = mtp.CanvasFigure(self)
            self._plot.grid(row=2, column=0, sticky=tk.NSEW)
            tooltips.ToolTipYellow(self._plot, _text["kdeplot"])
            coords = self.model.main_model.test_coords()
            if coords is None:
                return
            kernel_provider = self.model.make_kernel()
            task = self.make_plot_task(kernel_provider, coords)
            self._plot.set_figure_task(task)
Example #19
0
 def _add_widgets(self):
     frame = ttk.Frame(self)
     frame.grid(row=0, column=0, padx=2, pady=2, sticky=tk.W)
     la = ttk.Label(frame,
                    text=_text["sf"].format(
                        funcs.string_ellipse(self.model.settings_filename,
                                             80)))
     la.grid(row=0, column=0)
     frame = ttk.LabelFrame(self, text=_text["config"])
     frame.grid(row=10, column=0, padx=2, pady=2, sticky=tk.NSEW)
     self._add_config_box(frame)
     frame = ttk.LabelFrame(self, text=_text["info"])
     frame.grid(row=11, column=0, padx=2, pady=2, sticky=tk.NSEW)
     tooltips.ToolTipYellow(frame, _text["info_tt"])
     util.stretchy_rows(frame, [0])
     self._add_info_box(frame)
     frame = ttk.Frame(self)
     frame.grid(row=20, column=0, padx=2, pady=2, sticky=tk.EW)
     util.stretchy_columns(frame, [0, 1])
     b = ttk.Button(frame, text=_text["okay"], command=self._okay)
     b.grid(row=0, column=0, padx=2, pady=2, sticky=tk.NSEW)
     b = ttk.Button(frame, text=_text["cancel"], command=self._cancel)
     b.grid(row=0, column=1, padx=2, pady=2, sticky=tk.NSEW)
Example #20
0
    def add_widgets(self, frame):
        subframe = ttk.LabelFrame(frame, text=_text["tw"])
        subframe.grid(row=0, column=0, padx=2, pady=2, sticky=tk.NSEW)
        self._time_window_option = tk.IntVar()
        rb = ttk.Radiobutton(subframe,
                             text=_text["tw1"],
                             variable=self._time_window_option,
                             value=STScan.TimeWindowChoice.from_training.value,
                             command=self._time_window_option_changed)
        rb.grid(row=0, column=0, padx=2, pady=2, sticky=tk.W)
        tooltips.ToolTipYellow(rb, _text["tw1tt"])
        subsubframe = ttk.Frame(subframe)
        subsubframe.grid(row=1, column=0, sticky=tk.W)
        rb = ttk.Radiobutton(subsubframe,
                             text=_text["tw2"],
                             variable=self._time_window_option,
                             value=STScan.TimeWindowChoice.window.value,
                             command=self._time_window_option_changed)
        rb.grid(row=0, column=0, padx=2, pady=2)
        tooltips.ToolTipYellow(rb, _text["tw2tt"])
        self._time_window_length_var = tk.StringVar()
        self._time_window_length = ttk.Entry(
            subsubframe, textvariable=self._time_window_length_var, width=7)
        self._time_window_length.grid(row=0, column=1, padx=2)
        util.IntValidator(self._time_window_length,
                          self._time_window_length_var,
                          callback=self._time_window_changed)
        ttk.Label(subsubframe, text=_text["tw3"]).grid(row=0, column=2, padx=2)

        subframe = ttk.LabelFrame(frame, text=_text["qu"])
        subframe.grid(row=0, column=1, padx=2, pady=2, sticky=tk.NSEW)
        self._quantise_option = tk.IntVar()
        for n in range(1, 5):
            label = _text["qu{}".format(n)]
            rb = ttk.Radiobutton(subframe,
                                 text=label,
                                 variable=self._quantise_option,
                                 value=n,
                                 command=self._quantise_option_changed)
            rb.grid(row=n, column=0, padx=2, pady=2, sticky=tk.W)
            tooltips.ToolTipYellow(rb, _text["qu{}tt".format(n)])
        subframe = ttk.LabelFrame(subframe, text=_text["quu"])
        tooltips.ToolTipYellow(subframe, _text["quutt"])
        subframe.grid(row=0, column=1, rowspan=4, padx=2, sticky=tk.NSEW)
        ttk.Label(subframe, text=_text["qu5"]).grid(row=0,
                                                    column=0,
                                                    padx=2,
                                                    pady=2,
                                                    sticky=tk.W)
        subsubframe = ttk.Frame(subframe)
        subsubframe.grid(row=1, column=0)
        self._time_bin_length_var = tk.StringVar()
        self._time_bin_length = ttk.Entry(
            subsubframe, textvariable=self._time_bin_length_var, width=7)
        util.IntValidator(self._time_bin_length,
                          self._time_bin_length_var,
                          callback=self._time_bin_changed)
        self._time_bin_length.grid(row=0, column=0, padx=2, pady=2)
        ttk.Label(subsubframe, text=_text["qu6"]).grid(row=0,
                                                       column=1,
                                                       padx=2,
                                                       pady=2)

        subframe = ttk.LabelFrame(frame, text=_text["opt1"])
        subframe.grid(row=1, column=0, padx=2, pady=2, sticky=tk.NSEW)
        subsubframe = ttk.Frame(subframe)
        subsubframe.grid(row=0, column=0, sticky=tk.W)
        self._geo_pop_limit_var = tk.StringVar()
        entry = self._add_entry_row(subsubframe,
                                    text=_text["opt2"],
                                    tttext=_text["opt2tt"],
                                    entry_var=self._geo_pop_limit_var,
                                    last_text=_text["optper"])
        util.PercentageValidator(entry,
                                 self._geo_pop_limit_var,
                                 callback=self._option_changed)
        subsubframe = ttk.Frame(subframe)
        subsubframe.grid(row=1, column=0, sticky=tk.W)
        self._geo_radius_limit_var = tk.StringVar()
        entry = self._add_entry_row(subsubframe,
                                    text=_text["opt3"],
                                    tttext=_text["opt3tt"],
                                    entry_var=self._geo_radius_limit_var,
                                    last_text=_text["optm"])
        util.IntValidator(entry,
                          self._geo_radius_limit_var,
                          callback=self._option_changed)
        subsubframe = ttk.Frame(subframe)
        subsubframe.grid(row=2, column=0, sticky=tk.W)
        self._time_pop_limit_var = tk.StringVar()
        entry = self._add_entry_row(subsubframe,
                                    text=_text["opt4"],
                                    tttext=_text["opt4tt"],
                                    entry_var=self._time_pop_limit_var,
                                    last_text=_text["optper"])
        util.PercentageValidator(entry,
                                 self._time_pop_limit_var,
                                 callback=self._option_changed)
        subsubframe = ttk.Frame(subframe)
        subsubframe.grid(row=3, column=0, sticky=tk.W)
        self._time_radius_limit_var = tk.StringVar()
        entry = self._add_entry_row(subsubframe,
                                    text=_text["opt5"],
                                    tttext=_text["opt5tt"],
                                    entry_var=self._time_radius_limit_var,
                                    last_text=_text["optdays"])
        util.IntValidator(entry,
                          self._time_radius_limit_var,
                          callback=self._option_changed)

        subframe = ttk.LabelFrame(frame, text=_text["clop"])
        subframe.grid(row=1, column=1, padx=2, pady=2, sticky=tk.NSEW)
        self._cluster_option = tk.IntVar()
        for i, (t1, t2, val) in enumerate(
                zip([_text["clop1"], _text["clop2"]],
                    [_text["clop1tt"], _text["clop2tt"]], [
                        STScan.ClusterOption.none.value,
                        STScan.ClusterOption.expand.value
                    ])):
            rb = ttk.Radiobutton(subframe,
                                 text=t1,
                                 variable=self._cluster_option,
                                 value=val,
                                 command=self._cluster_option_changed)
            rb.grid(row=i, column=0, padx=2, pady=2, sticky=tk.W)
            tooltips.ToolTipYellow(rb, t2)