示例#1
0
    def draw_reference_point(self):
        label_frame = ttk.Labelframe(self.top,
                                     text="Reference Point",
                                     padding=FRAME_PAD)
        label_frame.grid(sticky="ew")
        label_frame.columnconfigure(0, weight=1)

        label = ttk.Label(
            label_frame,
            text="Default is (0, 0), the upper left corner of the canvas")
        label.grid()

        frame = ttk.Frame(label_frame)
        frame.grid(sticky="ew", pady=PADY)
        frame.columnconfigure(1, weight=1)
        frame.columnconfigure(3, weight=1)

        label = ttk.Label(frame, text="X")
        label.grid(row=0, column=0, sticky="w", padx=PADX)
        entry = validation.PositiveFloatEntry(frame, textvariable=self.x)
        entry.grid(row=0, column=1, sticky="ew", padx=PADX)

        label = ttk.Label(frame, text="Y")
        label.grid(row=0, column=2, sticky="w", padx=PADX)
        entry = validation.PositiveFloatEntry(frame, textvariable=self.y)
        entry.grid(row=0, column=3, sticky="ew", padx=PADX)

        label = ttk.Label(label_frame, text="Translates To")
        label.grid()

        frame = ttk.Frame(label_frame)
        frame.grid(sticky="ew", pady=PADY)
        frame.columnconfigure(1, weight=1)
        frame.columnconfigure(3, weight=1)
        frame.columnconfigure(5, weight=1)

        label = ttk.Label(frame, text="Lat")
        label.grid(row=0, column=0, sticky="w", padx=PADX)
        entry = validation.FloatEntry(frame, textvariable=self.lat)
        entry.grid(row=0, column=1, sticky="ew", padx=PADX)

        label = ttk.Label(frame, text="Lon")
        label.grid(row=0, column=2, sticky="w", padx=PADX)
        entry = validation.FloatEntry(frame, textvariable=self.lon)
        entry.grid(row=0, column=3, sticky="ew", padx=PADX)

        label = ttk.Label(frame, text="Alt")
        label.grid(row=0, column=4, sticky="w", padx=PADX)
        entry = validation.FloatEntry(frame, textvariable=self.alt)
        entry.grid(row=0, column=5, sticky="ew")
示例#2
0
    def draw_size(self) -> None:
        label_frame = ttk.Labelframe(self.top, text="Size", padding=FRAME_PAD)
        label_frame.grid(sticky=tk.EW)
        label_frame.columnconfigure(0, weight=1)

        # draw size row 1
        frame = ttk.Frame(label_frame)
        frame.grid(sticky=tk.EW, pady=PADY)
        frame.columnconfigure(1, weight=1)
        frame.columnconfigure(3, weight=1)
        label = ttk.Label(frame, text="Width")
        label.grid(row=0, column=0, sticky=tk.W, padx=PADX)
        entry = validation.PositiveIntEntry(frame,
                                            textvariable=self.pixel_width)
        entry.grid(row=0, column=1, sticky=tk.EW, padx=PADX)
        entry.bind("<KeyRelease>", self.size_scale_keyup)
        label = ttk.Label(frame, text="x Height")
        label.grid(row=0, column=2, sticky=tk.W, padx=PADX)
        entry = validation.PositiveIntEntry(frame,
                                            textvariable=self.pixel_height)
        entry.grid(row=0, column=3, sticky=tk.EW, padx=PADX)
        entry.bind("<KeyRelease>", self.size_scale_keyup)
        label = ttk.Label(frame, text="Pixels")
        label.grid(row=0, column=4, sticky=tk.W)

        # draw size row 2
        frame = ttk.Frame(label_frame)
        frame.grid(sticky=tk.EW, pady=PADY)
        frame.columnconfigure(1, weight=1)
        frame.columnconfigure(3, weight=1)
        label = ttk.Label(frame, text="Width")
        label.grid(row=0, column=0, sticky=tk.W, padx=PADX)
        entry = validation.PositiveFloatEntry(frame,
                                              textvariable=self.meters_width,
                                              state=tk.DISABLED)
        entry.grid(row=0, column=1, sticky=tk.EW, padx=PADX)
        label = ttk.Label(frame, text="x Height")
        label.grid(row=0, column=2, sticky=tk.W, padx=PADX)
        entry = validation.PositiveFloatEntry(frame,
                                              textvariable=self.meters_height,
                                              state=tk.DISABLED)
        entry.grid(row=0, column=3, sticky=tk.EW, padx=PADX)
        label = ttk.Label(frame, text="Meters")
        label.grid(row=0, column=4, sticky=tk.W)
示例#3
0
    def draw_size(self):
        label_frame = ttk.Labelframe(self.top, text="Size", padding=FRAME_PAD)
        label_frame.grid(sticky="ew")
        label_frame.columnconfigure(0, weight=1)

        # draw size row 1
        frame = ttk.Frame(label_frame)
        frame.grid(sticky="ew", pady=PADY)
        frame.columnconfigure(1, weight=1)
        frame.columnconfigure(3, weight=1)
        label = ttk.Label(frame, text="Width")
        label.grid(row=0, column=0, sticky="w", padx=PADX)
        entry = validation.PositiveIntEntry(frame,
                                            textvariable=self.pixel_width)
        entry.grid(row=0, column=1, sticky="ew", padx=PADX)
        label = ttk.Label(frame, text="x Height")
        label.grid(row=0, column=2, sticky="w", padx=PADX)
        entry = validation.PositiveIntEntry(frame,
                                            textvariable=self.pixel_height)
        entry.grid(row=0, column=3, sticky="ew", padx=PADX)
        label = ttk.Label(frame, text="Pixels")
        label.grid(row=0, column=4, sticky="w")

        # draw size row 2
        frame = ttk.Frame(label_frame)
        frame.grid(sticky="ew", pady=PADY)
        frame.columnconfigure(1, weight=1)
        frame.columnconfigure(3, weight=1)
        label = ttk.Label(frame, text="Width")
        label.grid(row=0, column=0, sticky="w", padx=PADX)
        entry = validation.PositiveFloatEntry(frame,
                                              textvariable=self.meters_width)
        entry.grid(row=0, column=1, sticky="ew", padx=PADX)
        label = ttk.Label(frame, text="x Height")
        label.grid(row=0, column=2, sticky="w", padx=PADX)
        entry = validation.PositiveFloatEntry(frame,
                                              textvariable=self.meters_height)
        entry.grid(row=0, column=3, sticky="ew", padx=PADX)
        label = ttk.Label(frame, text="Meters")
        label.grid(row=0, column=4, sticky="w")
示例#4
0
    def draw_scale(self):
        label_frame = ttk.Labelframe(self.top, text="Scale", padding=FRAME_PAD)
        label_frame.grid(sticky="ew")
        label_frame.columnconfigure(0, weight=1)

        frame = ttk.Frame(label_frame)
        frame.grid(sticky="ew")
        frame.columnconfigure(1, weight=1)
        label = ttk.Label(frame, text=f"{PIXEL_SCALE} Pixels =")
        label.grid(row=0, column=0, sticky="w", padx=PADX)
        entry = validation.PositiveFloatEntry(frame, textvariable=self.scale)
        entry.grid(row=0, column=1, sticky="ew", padx=PADX)
        label = ttk.Label(frame, text="Meters")
        label.grid(row=0, column=2, sticky="w")
示例#5
0
    def draw_scale(self) -> None:
        label_frame = ttk.Labelframe(self.top, text="Scale", padding=FRAME_PAD)
        label_frame.grid(sticky=tk.EW)
        label_frame.columnconfigure(0, weight=1)

        frame = ttk.Frame(label_frame)
        frame.grid(sticky=tk.EW)
        frame.columnconfigure(1, weight=1)
        label = ttk.Label(frame, text=f"{PIXEL_SCALE} Pixels =")
        label.grid(row=0, column=0, sticky=tk.W, padx=PADX)
        entry = validation.PositiveFloatEntry(frame, textvariable=self.scale)
        entry.grid(row=0, column=1, sticky=tk.EW, padx=PADX)
        entry.bind("<KeyRelease>", self.size_scale_keyup)
        label = ttk.Label(frame, text="Meters")
        label.grid(row=0, column=2, sticky=tk.W)
示例#6
0
    def get_frame(self) -> ttk.Frame:
        frame = ttk.Frame(self.top)
        frame.columnconfigure(1, weight=1)
        if self.is_symmetric:
            label_name = "Symmetric Link Effects"
        else:
            label_name = "Asymmetric Effects: Downstream / Upstream "
        row = 0
        label = ttk.Label(frame, text=label_name, anchor=tk.CENTER)
        label.grid(row=row, column=0, columnspan=2, sticky=tk.EW, pady=PADY)
        row = row + 1

        label = ttk.Label(frame, text="Bandwidth (bps)")
        label.grid(row=row, column=0, sticky=tk.EW)
        entry = validation.PositiveIntEntry(frame,
                                            empty_enabled=False,
                                            textvariable=self.bandwidth)
        entry.grid(row=row, column=1, sticky=tk.EW, pady=PADY)
        if not self.is_symmetric:
            entry = validation.PositiveIntEntry(
                frame, empty_enabled=False, textvariable=self.down_bandwidth)
            entry.grid(row=row, column=2, sticky=tk.EW, pady=PADY)
        row = row + 1

        label = ttk.Label(frame, text="Delay (us)")
        label.grid(row=row, column=0, sticky=tk.EW)
        entry = validation.PositiveIntEntry(frame,
                                            empty_enabled=False,
                                            textvariable=self.delay)
        entry.grid(row=row, column=1, sticky=tk.EW, pady=PADY)
        if not self.is_symmetric:
            entry = validation.PositiveIntEntry(frame,
                                                empty_enabled=False,
                                                textvariable=self.down_delay)
            entry.grid(row=row, column=2, sticky=tk.EW, pady=PADY)
        row = row + 1

        label = ttk.Label(frame, text="Jitter (us)")
        label.grid(row=row, column=0, sticky=tk.EW)
        entry = validation.PositiveIntEntry(frame,
                                            empty_enabled=False,
                                            textvariable=self.jitter)
        entry.grid(row=row, column=1, sticky=tk.EW, pady=PADY)
        if not self.is_symmetric:
            entry = validation.PositiveIntEntry(frame,
                                                empty_enabled=False,
                                                textvariable=self.down_jitter)
            entry.grid(row=row, column=2, sticky=tk.EW, pady=PADY)
        row = row + 1

        label = ttk.Label(frame, text="Loss (%)")
        label.grid(row=row, column=0, sticky=tk.EW)
        entry = validation.PositiveFloatEntry(frame,
                                              empty_enabled=False,
                                              textvariable=self.loss)
        entry.grid(row=row, column=1, sticky=tk.EW, pady=PADY)
        if not self.is_symmetric:
            entry = validation.PositiveFloatEntry(frame,
                                                  empty_enabled=False,
                                                  textvariable=self.down_loss)
            entry.grid(row=row, column=2, sticky=tk.EW, pady=PADY)
        row = row + 1

        label = ttk.Label(frame, text="Duplicate (%)")
        label.grid(row=row, column=0, sticky=tk.EW)
        entry = validation.PositiveIntEntry(frame,
                                            empty_enabled=False,
                                            textvariable=self.duplicate)
        entry.grid(row=row, column=1, sticky=tk.EW, pady=PADY)
        if not self.is_symmetric:
            entry = validation.PositiveIntEntry(
                frame, empty_enabled=False, textvariable=self.down_duplicate)
            entry.grid(row=row, column=2, sticky=tk.EW, pady=PADY)
        row = row + 1

        label = ttk.Label(frame, text="Color")
        label.grid(row=row, column=0, sticky=tk.EW)
        self.color_button = tk.Button(
            frame,
            textvariable=self.color,
            background=self.color.get(),
            bd=0,
            relief=tk.FLAT,
            highlightthickness=0,
            command=self.click_color,
        )
        self.color_button.grid(row=row, column=1, sticky=tk.EW, pady=PADY)
        row = row + 1

        label = ttk.Label(frame, text="Width")
        label.grid(row=row, column=0, sticky=tk.EW)
        entry = validation.PositiveFloatEntry(frame,
                                              empty_enabled=False,
                                              textvariable=self.width)
        entry.grid(row=row, column=1, sticky=tk.EW, pady=PADY)

        return frame
示例#7
0
    def draw_config(self) -> None:
        group_mapping = {}
        for key in self.config:
            option = self.config[key]
            group = group_mapping.setdefault(option.group, [])
            group.append(option)

        for group_name in sorted(group_mapping):
            group = group_mapping[group_name]
            tab = FrameScroll(self, self.app, borderwidth=0, padding=FRAME_PAD)
            tab.frame.columnconfigure(1, weight=1)
            self.add(tab, text=group_name)
            for index, option in enumerate(sorted(group,
                                                  key=lambda x: x.name)):
                label = ttk.Label(tab.frame, text=option.label)
                label.grid(row=index, pady=PADY, padx=PADX, sticky=tk.W)
                value = tk.StringVar()
                if option.type == ConfigOptionType.BOOL:
                    select = ("On", "Off")
                    state = "readonly" if self.enabled else tk.DISABLED
                    combobox = ttk.Combobox(tab.frame,
                                            textvariable=value,
                                            values=select,
                                            state=state)
                    combobox.grid(row=index, column=1, sticky=tk.EW)
                    if option.value == "1":
                        value.set("On")
                    else:
                        value.set("Off")
                elif option.select:
                    value.set(option.value)
                    select = tuple(option.select)
                    state = "readonly" if self.enabled else tk.DISABLED
                    combobox = ttk.Combobox(tab.frame,
                                            textvariable=value,
                                            values=select,
                                            state=state)
                    combobox.grid(row=index, column=1, sticky=tk.EW)
                elif option.type == ConfigOptionType.STRING:
                    value.set(option.value)
                    state = tk.NORMAL if self.enabled else tk.DISABLED
                    if "file" in option.label:
                        file_frame = ttk.Frame(tab.frame)
                        file_frame.grid(row=index, column=1, sticky=tk.EW)
                        file_frame.columnconfigure(0, weight=1)
                        entry = ttk.Entry(file_frame,
                                          textvariable=value,
                                          state=state)
                        entry.grid(row=0, column=0, sticky=tk.EW, padx=PADX)
                        func = partial(file_button_click, value, self)
                        button = ttk.Button(file_frame,
                                            text="...",
                                            command=func,
                                            state=state)
                        button.grid(row=0, column=1)
                    else:
                        entry = ttk.Entry(tab.frame,
                                          textvariable=value,
                                          state=state)
                        entry.grid(row=index, column=1, sticky=tk.EW)
                elif option.type in INT_TYPES:
                    value.set(option.value)
                    state = tk.NORMAL if self.enabled else tk.DISABLED
                    entry = validation.PositiveIntEntry(tab.frame,
                                                        textvariable=value,
                                                        state=state)
                    entry.grid(row=index, column=1, sticky=tk.EW)
                elif option.type == ConfigOptionType.FLOAT:
                    value.set(option.value)
                    state = tk.NORMAL if self.enabled else tk.DISABLED
                    entry = validation.PositiveFloatEntry(tab.frame,
                                                          textvariable=value,
                                                          state=state)
                    entry.grid(row=index, column=1, sticky=tk.EW)
                else:
                    logging.error("unhandled config option type: %s",
                                  option.type)
                self.values[option.name] = value