Beispiel #1
0
    def row(self, width=None, height=None, padx=None, pady=None, bg=None):
        """ Create row frame in master_frame.
        This frame represent an row. """

        # 1. Per default
        if width is None:
            width = self.width

        if height is None:
            height = self.height

        if padx is None:
            padx = self.padx

        if pady is None:
            pady = self.pady

        if bg is None:
            bg = self.bg

        # 2. Row frames count
        row_count = len(self.row_frames)

        # 3. Create new frame
        row = Frame(self.master_frame,
                    width=width,
                    height=height,
                    padx=padx,
                    pady=pady,
                    bg=bg)
        # 4. Grid in new frame
        row.grid(
            column=0,
            row=row_count,
            columnspan=12,
            sticky="nesw",
        )
        row.grid_propagate(0)
        # 5. Save row frame in list
        self.row_frames.append(row)
        # 6. Create settings
        settings = {}
        settings["width"] = width
        settings["height"] = height
        settings["padx"] = padx
        settings["pady"] = pady
        settings["bg"] = bg
        settings["col_width"] = width / 12
        settings["cols"] = 0
        # 7. Save row settings
        self.row_settings.append(settings)

        bloc_cols = []
        self.col_frames.append(bloc_cols)

        bloc_cols = []
        self.col_settings.append(bloc_cols)

        return row
def load_header(root):
    header_frame = Frame(root, bg="yellow", width=800, height=100)
    header_frame.grid_propagate(0)
    header_frame.grid_columnconfigure(0, weight=1)
    header_label = Label(header_frame,
                         text=literals["header"],
                         bg="green",
                         font=("TkDefaultFont", 44))
    header_frame.grid(row=0, column=0, pady=15)
    header_label.grid(row=0, column=0, sticky=W + E)
Beispiel #3
0
    def __init__(self, master, queue, endCommand, settings):
        self.queue = queue
        # Set up the GUI
        Frame.__init__(self, master=None)
        self.master.title("Optimizer execution")
        self.file = settings['file']
        self.image_path = os.path.join('outputs',
                                       os.path.splitext(self.file)[0] + '.png')
        self.max_eval = settings['max_eval']
        self.metric = settings['sim_metric']
        #
        center = Frame(master, padx=0, pady=0, width=760, height=300)
        btm_frame = Frame(master, pady=0, width=450, height=40)
        center.pack(fill=BOTH, expand=True)
        btm_frame.pack(side=BOTTOM, padx=0, pady=0)

        center.grid_propagate(False)
        btm_frame.pack_propagate(False)
        # create empty figure and draw
        self.canvas = Canvas(center, width=450, height=300)
        self.canvas.grid(row=0, column=0, sticky='W')
        # create figure and load
        self.create_figure()
        image = Image.open(self.image_path)
        image = image.resize((450, 300), Image.ANTIALIAS)
        self.img = ImageTk.PhotoImage(image)
        self.image_on_canvas = self.canvas.create_image(0,
                                                        0,
                                                        anchor='nw',
                                                        image=self.img)
        self.canvas.update()

        table_frame = Frame(center, padx=0, pady=0, width=310, height=300)
        table_frame.grid(row=0, column=1, sticky='W')

        self.tree = self.create_table(table_frame)
        self.tree.pack(side=TOP, padx=0, pady=0)

        buttons = Frame(table_frame, padx=0, pady=0)
        buttons.pack(side=BOTTOM, padx=0, pady=0)
        open_explorer = tkinter.Button(buttons,
                                       text='Open externally',
                                       command=self.open_explorer)
        open_explorer.grid(row=0, column=0, padx=0, pady=0)
        go_home = tkinter.Button(buttons,
                                 text='New execution',
                                 command=self.go_home)
        go_home.grid(row=0, column=1, padx=0, pady=0)

        self.progress = ttk.Progressbar(btm_frame,
                                        orient=HORIZONTAL,
                                        length=760,
                                        mode='determinate')
        self.progress.pack(side=BOTTOM, padx=0, pady=0)
        self.update_bar()
    def init_gui(self, cim):
        """Make a new tkinter window"""
        root = Tk()
        root.grid_rowconfigure(0, weight=1)
        root.columnconfigure(0, weight=1)
        root.title(cim)
        root.resizable(False, True)
        frame_main = Frame(root)
        frame_main.grid(sticky='news')

        # Create a frame for the canvas with non-zero row&column weights
        frame_canvas = Frame(frame_main)
        frame_canvas.grid(row=0, column=0)
        frame_canvas.grid_rowconfigure(0, weight=1)
        frame_canvas.grid_columnconfigure(0, weight=1)
        # Set grid_propagate to False to allow 5-by-5 buttons resizing later
        frame_canvas.grid_propagate(False)

        # Add a canvas in that frame
        canvas = Canvas(frame_canvas)
        canvas.grid(row=0, column=0)
        canvas.pack(fill="both", expand=True)

        # Link a scrollbar to the canvas
        vsb = Scrollbar(frame_canvas, orient="vertical", command=canvas.yview)
        vsb.grid(row=0, column=1, sticky='ns')
        canvas.configure(yscrollcommand=vsb.set)

        # Create a frame to contain the scrollable content
        frame_progress = Frame(canvas)
        canvas.create_window((0, 0), window=frame_progress, anchor='nw')
        self.canvas = canvas
        self.frame_main = frame_main

        for process in self.process_list:
            self.init_new_progressbar(frame_progress,
                                      p_length=300,
                                      p_process=process)
        frame_progress.update_idletasks()
        p = self.process_list[0]
        frame_width = p['task_label'].winfo_width(
        ) + p['progressbar'].winfo_width() + p['status_label'].winfo_width()
        rows = 20 if len(self.process_list) > 20 else len(self.process_list)
        frame_height = (p['progressbar'].winfo_height() * rows)
        frame_canvas.config(width=frame_width + vsb.winfo_width(),
                            height=frame_height)
        canvas.config(width=frame_width + vsb.winfo_width(),
                      height=frame_height)
        canvas.config(scrollregion=canvas.bbox("all"))
        canvas.update()

        self.frame_main.bind("<Configure>", self.configure)

        return root
Beispiel #5
0
def display_settings_ui(master):
    top = Toplevel(master)
    top.resizable(width=False, height=False)

    body = Frame(top, width=400, height=150)

    Label(body, text="Model:").grid(row=0, column=0, sticky="e")
    Label(body, text="Hostname:").grid(row=1, column=0, sticky="e")
    Label(body, text="URL Post:").grid(row=2, column=0, sticky="e")
    Label(body, text="Video capture:").grid(row=3, column=0, sticky="e")
    Label(body, text="Post by minute:").grid(row=4, column=0, sticky="e")

    model = Entry(body)
    model.grid(row=0, column=1, sticky="we", padx=2, pady=2)

    inputs = {
        "modelPath": StringVar(),
        "hostname": StringVar(),
        "urlPost": StringVar(),
        "videoCapture": StringVar(),
        "postByMinute": IntVar(),
    }

    row = 0
    inputs["modelPath"].set(config.SETTINGS.model_path)
    inputs["hostname"].set(config.SETTINGS.hostname)
    inputs["urlPost"].set(config.SETTINGS.url_post)
    inputs["videoCapture"].set(config.SETTINGS.video_capture)
    inputs["postByMinute"].set(config.SETTINGS.post_by_minute)

    for k, var in inputs.items():
        Entry(body, textvariable=var).grid(row=row, column=1, sticky="we", padx=2, pady=2)
        row += 1

    Button(body, text="...",
           command=partial(openfile, master, handle_file(inputs["modelPath"]))) \
        .grid(row=0, column=2, sticky="we", padx=2, pady=2)

    pack_btm_buttons = Frame(body)

    start = Button(pack_btm_buttons, text="Save",
                   command=partial(save_settings, top, **inputs))
    start.pack(side="left", fill=None, expand=False)

    pack_btm_buttons.grid(row=6, column=1, columnspan=2, sticky="e", padx=2, pady=2)

    body.grid(row=0, column=0, padx=5)
    body.grid_propagate(0)

    body.grid_rowconfigure(0, weight=1)

    body.grid_columnconfigure(1, weight=1)
    body.grid_columnconfigure(1, weight=1)
Beispiel #6
0
 def MakeButtonPanel(self):
     fwOptions = Frame(self.wwUi,
                       borderwidth=1,
                       relief='sunken',
                       height=50,
                       name='fwOptions')
     fwOptions.grid(row=1, sticky="ew")
     fwOptions.rowconfigure(0, weight=1)
     fwOptions.rowconfigure(1, weight=1)
     fwOptions.columnconfigure(0, weight=1)
     fwOptions.columnconfigure(1, weight=1)
     fwOptions.columnconfigure(2, weight=1)
     fwOptions.columnconfigure(3, weight=1)
     fwOptions.columnconfigure(4, weight=1)
     fwOptions.grid_propagate(False)
     return fwOptions
    def image_frame(parent):
        frame = Frame(parent.building_pos_window, width=640, height=360)
        frame.grid_rowconfigure(0, weight=1)
        frame.grid_columnconfigure(0, weight=1)
        frame.grid_propagate(False)
        frame.grid(row=0, column=0, sticky=N + W)

        label = Label(frame,
                      text='Loading city image, Please wait!',
                      background='white')
        label.grid(row=0, column=0, sticky=NSEW)

        canvas = Canvas(frame, width=640, height=360)

        def setBuildingCoords(event):
            if selected_building['name'] is None:
                return
            pos = [event.x * 2, event.y * 2]
            if parent.bot_building_pos is None:
                parent.bot_building_pos = {}

            parent.bot_config.hasBuildingPos = True
            parent.bot_building_pos[selected_building['name']] = [
                pos[0], pos[1]
            ]
            write_building_pos(parent.bot_building_pos,
                               parent.device.serial.replace(':', "_"))
            selected_building['label'].config(
                text='[{}, {}]'.format(pos[0], pos[1]))
            selected_building['name'] = None
            selected_building['label'] = None

        canvas.bind("<Button 1>", setBuildingCoords)

        def after_image_load():
            image = parent.bot.get_city_image().resize((640, 360),
                                                       Image.ANTIALIAS)
            frame.image = image = ImageTk.PhotoImage(image)
            canvas.create_image((0, 0), image=image, anchor='nw')
            parent.bot.curr_thread = None
            label.grid_forget()
            canvas.grid(row=0, column=0, sticky=N + W)

        parent.bot.start(after_image_load)

        return frame
Beispiel #8
0
    def task_display_frame(self):
        width = self.windows_size[0] - 20
        height = 210
        frame = Frame(self, width=width, height=height)
        frame.grid_propagate(False)
        frame.columnconfigure(0, weight=width)
        frame.rowconfigure(0, weight=5)
        frame.rowconfigure(1, weight=5)
        frame.rowconfigure(2, weight=height - 20)

        dl = Label(frame, text=self.device.serial, width=width, height=5, bg='white')
        title = Label(frame, text="Task: None", width=width, height=5)
        text = Text(frame, width=width, height=height - 30)
        title.config(bg='white', anchor=W, justify=LEFT)

        dl.grid(row=0, column=0, pady=(10, 0), sticky=N + W)
        title.grid(row=1, column=0, pady=10, sticky=N + W)
        text.grid(row=2, column=0, sticky=N + W)
        return frame, title, text
	def init_grid(self):
		background = Frame(self, bg=c.BACKGROUND_COLOR_GAME,
						   width=c.SIZE, height=c.SIZE)
		background.grid()

		for i in range(c.GRID_LEN):
			grid_row = []
			for j in range(c.GRID_LEN):
				cell = Frame(background, bg=c.BACKGROUND_COLOR_CELL_EMPTY,
							 width=c.SIZE / c.GRID_LEN,
							 height=c.SIZE / c.GRID_LEN)
				cell.grid(row=i, column=j, padx=c.GRID_PADDING,
						  pady=c.GRID_PADDING)
				cell.grid_propagate(False)
				t = Label(master=cell, text="",
						  bg=c.BACKGROUND_COLOR_CELL_EMPTY,
						  justify=CENTER, font=c.FONT, width=5, height=3)
				t.grid()
				grid_row.append(t)

			self.grid_cells.append(grid_row)
Beispiel #10
0
def show_doc(doc):
    """ This function opens a pop-up window and shows a document
    with information.

    Attributes:
        :doc: Document to open and show in a new window.
    """
    tpl_table = Toplevel(root)
    tpl_table.resizable(1, 1)
    tpl_table.title(f'{doc[1]}')

    frm_tpl = Frame(
        tpl_table,
        bd=5
    )
    frm_tpl.pack(expand=True, fill='both')
    frm_tpl.grid_propagate(True)
    frm_tpl.grid_columnconfigure(0, weight=1)
    frm_tpl.grid_rowconfigure(0, weight=1)

    txt_doc = Text(
        frm_tpl,
        font=font,
        state='normal'
    )
    scrollb = Scrollbar(frm_tpl)
    scrollb.config(command=txt_doc.yview)
    txt_doc.config(yscrollcommand=scrollb.set)
    scrollb.grid(row=0, column=1, pady=pady, sticky='nsew')
    txt_doc.grid(row=0, column=0, pady=pady, sticky='nsew')

    with open(doc[0], 'r') as f:
        log.debug(f'Showing information from "{doc[0]}".')
        txt_doc.insert(
            END,
            f.read().rstrip()
        )
Beispiel #11
0
    def init_window(self):
        # Init window, set title and geomtry of window.
        self.master.title("SimQ")
        self.master.geometry("1024x664")
        self.master.pack_propagate(0)
        """Declaration of outer frames"""
        # Declaration frames of the UI and configuring.
        header_frame = Frame(self.master, width=1024, height=62)
        settings_frame = Frame(self.master,
                               width=1024,
                               height=40,
                               bg="#3dcd58")
        bottom_queue = Frame(self.master,
                             width=1024,
                             height=570,
                             padx=3,
                             bg="#e0dede")
        queue_frame = Frame(bottom_queue,
                            width=736,
                            height=570,
                            padx=10,
                            borderwidth=1)
        queue_frame.config(relief=RIDGE)
        stats_frame = Frame(bottom_queue, width=288, bg="#e0dede")
        header_frame.pack(fill=BOTH)
        settings_frame.pack(fill=BOTH)
        bottom_queue.pack(fill=BOTH, expand=True)
        stats_frame.pack(side=LEFT, padx=(16, 8), pady=16)
        queue_frame.pack(side=RIGHT,
                         padx=(8, 16),
                         pady=16,
                         fill=BOTH,
                         expand=True)
        """Declaration of inner frames"""
        # Header_frame needs icon, Name of the Tool, Connection stats, Project completion stats, Disconnect option
        img = PhotoImage(file=r'resources\Header_icon_simq.png')
        icon_frame = Label(header_frame,
                           height=62,
                           width=121,
                           image=img,
                           highlightthickness=0,
                           borderwidth=0)
        icon_frame.photo = img
        icon_frame.pack(side=LEFT, fill=BOTH)
        disconnect_button = Button(header_frame,
                                   text="Disconnect",
                                   fg="#42b4e6",
                                   font=("Arial", 11))
        disconnect_button.config(relief=FLAT, padx=3)
        disconnect_button.bind("<Button-1>", self.new_connection)
        disconnect_button.bind("<Enter>", self.toggle_underline)
        disconnect_button.bind("<Leave>", self.toggle_underline)
        disconnect_button.pack(side=RIGHT)
        connection_frame = Frame(header_frame, width=260, height=90)
        connection_frame.pack(side=RIGHT)

        # settings_frame will just have a label frame for text (for now).
        text = Label(settings_frame,
                     text="Settings",
                     font=("Arial", 12),
                     fg="white",
                     bg="#3dcd58")
        text.pack(side=LEFT, anchor="center", padx=5)

        # stats_frame need's three stats frames CPU, RAM and DISK.
        status_frame = Frame(stats_frame,
                             width=256,
                             height=128,
                             borderwidth=1,
                             relief=RIDGE)
        cpu_frame = Frame(stats_frame,
                          width=256,
                          height=128,
                          borderwidth=1,
                          relief=RIDGE)
        ram_frame = Frame(stats_frame,
                          width=256,
                          height=128,
                          borderwidth=1,
                          relief=RIDGE)
        disk_frame = Frame(stats_frame,
                           width=256,
                           height=128,
                           borderwidth=1,
                           relief=RIDGE)
        status_frame.pack(expand=True)
        cpu_frame.pack(pady=16, expand=True)
        ram_frame.pack(pady=(0, 16), expand=True)
        disk_frame.pack(fill=Y, expand=True)

        # queue_frame will have 3 frames, one for header text,
        # one for processing of tasks, one for listbox and one for two buttons
        header_listbox = Frame(queue_frame, width=664, height=100)
        aux_frame = Frame(header_listbox, height=50)
        aux_frame.pack(fill=BOTH)
        img = PhotoImage(file=r'resources\simulation_queue.png')
        icon_frame = Label(aux_frame,
                           height=19,
                           width=186,
                           image=img,
                           highlightthickness=0,
                           borderwidth=0)
        icon_frame.photo = img
        icon_frame.pack(anchor="w", pady=5)
        ttk.Separator(aux_frame, orient=HORIZONTAL).pack(fill=X, expand=True)
        progress_frame = Frame(header_listbox, height=10)
        progress_frame.pack(fill=BOTH, pady=5)
        s = ttk.Style()
        self.cute_tag = Label(progress_frame,
                              text="On hold",
                              font=("Arial", 10, "bold"),
                              fg="#3dcd58")
        self.cute_tag.pack(side=LEFT, anchor="w")
        s.configure("red.Horizontal.TProgressbar",
                    foreground='green',
                    background='#3dcd58',
                    theme="alt")
        self.progress_project = ttk.Progressbar(
            progress_frame,
            style="red.Horizontal.TProgressbar",
            orient="horizontal",
            value=1,
            length=100,
            mode="determinate",
            maximum=100)

        listbox_frame = Frame(queue_frame, width=664, height=208)
        bottom_queue = Frame(queue_frame, width=830, height=50, pady=5)
        header_listbox.pack(fill=BOTH)
        listbox_frame.pack(fill=BOTH, expand=True)
        bottom_queue.pack(fill=BOTH)
        self.treeview = listbox.DDList(listbox_frame, self, height=5)

        # Configuring Connection frame
        img = PhotoImage(file=r'resources\User_picto.png')
        icon_frame = Label(connection_frame,
                           image=img,
                           highlightthickness=0,
                           borderwidth=0)
        icon_frame.photo = img
        icon_frame.pack(side=LEFT, anchor="e")
        self.iplabel = Label(connection_frame,
                             text=self.active_session.host,
                             fg="#3dcd58",
                             font=("Arial", 10, "bold"))
        self.username = Label(connection_frame,
                              text=self.active_session.user,
                              fg="#3dcd58",
                              font=("Arial", 12, "bold"))
        self.username.pack(side=TOP, anchor="w")
        self.iplabel.pack(side=BOTTOM, anchor="w")
        # Label(connection_frame, text="Queue Status:").grid(row=2, column=0, sticky=W)
        # self.status_queue_label = Label(connection_frame, text="Stopped", foreground="red")

        # Config Status Frame
        status_header = Frame(status_frame, width=256, height=32)
        status_header.pack(side=TOP, fill=BOTH)
        status_body = Frame(status_frame, width=256, height=100)
        status_body.pack(side=BOTTOM, fill=BOTH)
        status_tag = Frame(status_body, width=32, height=100, bg="#e8e8e8")
        status_tag.pack(side=LEFT)
        status_val = Frame(status_body, width=32, height=100, bg="#e8e8e8")
        status_val.pack(side=LEFT)
        right_val = Frame(status_body, width=32, height=100)
        right_val.pack(side=LEFT, fill=BOTH, expand=True)
        Label(right_val, text="Running Info",
              font=("Arial", 11, "bold")).pack(side=TOP)
        left_aux = Frame(right_val, width=16)
        left_aux.pack(side=LEFT, fill=BOTH, expand=True)
        right_aux = Frame(right_val, width=16)
        right_aux.pack(side=LEFT, fill=BOTH, expand=True)
        Label(left_aux, text="Name:", font=("Arial", 10)).pack()
        Label(left_aux, text="Percentage:", font=("Arial", 10)).pack()
        Label(left_aux, text="Iteration:", font=("Arial", 10)).pack()
        Label(left_aux, text="ETC:", font=("Arial", 10)).pack()
        self.project_name = Label(right_aux, text="--", font=("Arial", 10))
        self.project_percentage = Label(right_aux,
                                        text="--",
                                        font=("Arial", 10))
        self.project_iteration = Label(right_aux,
                                       text="--",
                                       font=("Arial", 10))
        self.project_etc = Label(right_aux, text="--", font=("Arial", 10))

        self.project_name.pack()
        self.project_percentage.pack()
        self.project_iteration.pack()
        self.project_etc.pack()
        img = PhotoImage(file=r'resources\Status_header.png')
        one = Label(status_header,
                    image=img,
                    highlightthickness=0,
                    borderwidth=0)
        one.photo = img
        one.pack(side=TOP, anchor="w")
        ttk.Separator(status_header, orient=HORIZONTAL).pack(side=BOTTOM,
                                                             fill=X,
                                                             expand=True)
        img = PhotoImage(file=r'resources\completed_picto.png')
        one = Label(status_tag,
                    image=img,
                    highlightthickness=0,
                    borderwidth=0,
                    bg="#e8e8e8")
        one.photo = img
        one.pack(padx=2)
        self.completed_val = Label(status_val,
                                   text="0",
                                   font=("Arial", 12),
                                   bg="#e8e8e8")
        self.completed_val.pack(side=TOP, anchor="w", pady=3, padx=3)
        img = PhotoImage(file=r'resources\error_picto.png')
        one = Label(status_tag,
                    image=img,
                    highlightthickness=0,
                    borderwidth=0,
                    bg="#e8e8e8")
        one.photo = img
        one.pack(padx=2)
        self.error_val = Label(status_val,
                               text="0",
                               font=("Arial", 12),
                               bg="#e8e8e8")
        self.error_val.pack(side=TOP, anchor="w", pady=3, padx=3)
        img = PhotoImage(file=r'resources\information_picto.png')
        one = Label(status_tag,
                    image=img,
                    highlightthickness=0,
                    borderwidth=0,
                    bg="#e8e8e8")
        one.photo = img
        one.pack(padx=2)
        self.info_val = Label(status_val,
                              text="0",
                              font=("Arial", 12),
                              bg="#e8e8e8")
        self.info_val.pack(side=TOP, anchor="w", pady=3, padx=3)
        img = PhotoImage(file=r'resources\warning_picto.png')
        one = Label(status_tag,
                    image=img,
                    highlightthickness=0,
                    borderwidth=0,
                    bg="#e8e8e8")
        one.photo = img
        one.pack(padx=2)
        self.warning_val = Label(status_val,
                                 text="0",
                                 font=("Arial", 12),
                                 bg="#e8e8e8")
        self.warning_val.pack(side=TOP, anchor="w", pady=3, padx=3)
        self.status_avg = Label(status_body,
                                text="--",
                                font=("Arial", 11, "bold"))

        # Configuring Cpu stats frame

        cpu_header = Frame(cpu_frame, width=256, height=32)
        cpu_header.pack(side=TOP, fill=BOTH)
        cpu_body = Frame(cpu_frame, width=256, height=100)
        cpu_body.pack(side=BOTTOM, fill=BOTH, expand=True)
        cpu_body_left = Frame(cpu_body, width=128, height=100, bg="#e8e8e8")
        cpu_body_left.pack(side=LEFT, fill=BOTH, expand=True)
        cpu_body_right = Frame(cpu_body, width=128, height=100)
        cpu_body_right.pack(side=RIGHT, fill=BOTH, expand=True)
        cpu_tag = Frame(cpu_body_left, width=64, height=100, bg="#e8e8e8")
        cpu_tag.pack(side=LEFT, fill=BOTH, expand=True)
        cpu_val = Frame(cpu_body_left, width=64, height=100, bg="#e8e8e8")
        cpu_val.pack(side=RIGHT, fill=BOTH, expand=True)
        img = PhotoImage(file=r'resources\CPU_header.png')
        one = Label(cpu_header, image=img, highlightthickness=0, borderwidth=0)
        one.photo = img
        one.pack(side=TOP, anchor="w")
        ttk.Separator(cpu_header, orient=HORIZONTAL).pack(side=BOTTOM,
                                                          fill=X,
                                                          expand=True)
        Label(cpu_tag,
              text="CPU 0:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.cpu_stats_0 = Label(cpu_val,
                                 text="--",
                                 font=("Arial", 10),
                                 bg="#e8e8e8",
                                 fg="#333333")
        self.cpu_stats_0.pack(fill=BOTH, expand=True, padx=4)
        Label(cpu_tag,
              text="CPU 1:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.cpu_stats_1 = Label(cpu_val,
                                 text="--",
                                 font=("Arial", 10),
                                 bg="#e8e8e8",
                                 fg="#333333")
        self.cpu_stats_1.pack(fill=BOTH, padx=4, expand=True)
        Label(cpu_tag,
              text="CPU 2:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.cpu_stats_2 = Label(cpu_val,
                                 text="--",
                                 font=("Arial", 10),
                                 bg="#e8e8e8",
                                 fg="#333333")
        self.cpu_stats_2.pack(fill=BOTH, padx=4, expand=True)
        Label(cpu_tag,
              text="CPU 3:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.cpu_stats_3 = Label(cpu_val,
                                 text="--",
                                 font=("Arial", 10),
                                 bg="#e8e8e8",
                                 fg="#333333")
        self.cpu_stats_3.pack(fill=BOTH, padx=4, expand=True)
        self.cpu_avg = Label(cpu_body_right,
                             text="--",
                             font=("Arial", 16, "bold"))
        self.cpu_avg.pack(side=BOTTOM)
        Label(cpu_body_right,
              text="USAGE",
              font=("Arial", 8, "bold"),
              foreground="gray").pack(side=BOTTOM, anchor="w", pady=(5, 0))

        # Configuring RAM stats frame
        ram_header = Frame(ram_frame, width=256, height=32)
        ram_header.pack(side=TOP, fill=BOTH)
        ram_body = Frame(ram_frame, width=256, height=60)
        ram_body.pack(side=BOTTOM, fill=BOTH, expand=True)
        ram_body_left = Frame(ram_body, width=128, height=100, bg="#e8e8e8")
        ram_body_left.pack(side=LEFT, fill=BOTH, expand=True)
        ram_body_right = Frame(ram_body, width=128, height=100)
        ram_body_right.pack(side=RIGHT, fill=BOTH, expand=True)
        ram_tag = Frame(ram_body_left, width=64, height=100, bg="#e8e8e8")
        ram_tag.pack(side=LEFT, fill=BOTH, expand=True)
        ram_val = Frame(ram_body_left, width=64, height=100, bg="#e8e8e8")
        ram_val.pack(side=RIGHT, fill=BOTH, expand=True)
        img = PhotoImage(file=r'resources\RAM_header.png')
        one = Label(ram_header, image=img, highlightthickness=0, borderwidth=0)
        one.photo = img
        one.pack(side=TOP, anchor="w")
        ttk.Separator(ram_header, orient=HORIZONTAL).pack(side=BOTTOM,
                                                          fill=X,
                                                          expand=True)
        Label(ram_tag,
              text="total:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.ram_stats_0 = Label(ram_val,
                                 text="--",
                                 font=("Arial", 10),
                                 bg="#e8e8e8",
                                 fg="#333333")
        self.ram_stats_0.pack()
        Label(ram_tag,
              text="used:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.ram_stats_1 = Label(ram_val,
                                 text="--",
                                 font=("Arial", 10),
                                 bg="#e8e8e8",
                                 fg="#333333")
        self.ram_stats_1.pack()
        Label(ram_tag,
              text="free:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.ram_stats_2 = Label(ram_val,
                                 text="--",
                                 font=("Arial", 10),
                                 bg="#e8e8e8",
                                 fg="#333333")
        self.ram_stats_2.pack()
        self.ram_stats_3 = Label(ram_body_right,
                                 text="--",
                                 font=("Arial", 16, "bold"),
                                 foreground="green")
        self.ram_stats_3.pack(side=BOTTOM)
        Label(ram_body_right,
              text="USAGE",
              font=("Arial", 8, "bold"),
              foreground="gray").pack(side=BOTTOM, anchor="w")
        # Configuring Disk stats frame

        disk_header = Frame(disk_frame, width=256, height=32)
        disk_header.pack(side=TOP, fill=BOTH)
        disk_body = Frame(disk_frame, width=100, height=60, bg="#e8e8e8")
        disk_body.pack(side=BOTTOM, fill=BOTH, expand=True)
        disk_body_left = Frame(disk_body, width=85, height=60)
        disk_body_left.pack(side=LEFT, fill=BOTH, expand=True)
        disk_body_right = Frame(disk_body, width=85, height=60)
        disk_body_right.pack(side=RIGHT, fill=BOTH, expand=True)
        disk_tag = Frame(disk_body_left, width=40, height=60, bg="#e8e8e8")
        disk_tag.pack(side=LEFT, fill=BOTH, expand=True)
        disk_val = Frame(disk_body_left, width=40, height=60, bg="#e8e8e8")
        disk_val.pack(side=RIGHT, fill=BOTH, expand=True)

        img = PhotoImage(file=r'resources\Disk_header.png')
        one = Label(disk_header,
                    image=img,
                    highlightthickness=0,
                    borderwidth=0)
        one.photo = img
        one.pack(side=TOP, anchor="w")
        ttk.Separator(
            disk_header,
            orient=HORIZONTAL,
        ).pack(side=BOTTOM, fill=X, expand=True)
        Label(disk_tag,
              text="total:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.disk_storage_0 = Label(disk_val,
                                    text="--",
                                    font=("Arial", 10),
                                    bg="#e8e8e8",
                                    fg="#333333")
        self.disk_storage_0.pack()
        Label(disk_tag,
              text="used:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.disk_storage_1 = Label(disk_val,
                                    text="--",
                                    font=("Arial", 10),
                                    bg="#e8e8e8",
                                    fg="#333333")
        self.disk_storage_1.pack()
        Label(disk_tag,
              text="free:",
              font=("Arial", 11),
              bg="#e8e8e8",
              fg="#333333").pack()
        self.disk_storage_2 = Label(disk_val,
                                    text="--",
                                    font=("Arial", 10),
                                    bg="#e8e8e8",
                                    fg="#333333")
        self.disk_storage_2.pack()
        self.disk_storage_3 = Label(disk_body_right,
                                    text="--",
                                    font=("Arial", 16, "bold"),
                                    foreground="green")
        self.disk_storage_3.pack(side=BOTTOM)
        Label(disk_body_right,
              text="USAGE",
              font=("Arial", 8, "bold"),
              foreground="gray").pack(side=BOTTOM, anchor="w")

        # Defining buttons for queue_frame

        self.delete_button = ttk.Button(bottom_queue,
                                        text='Delete',
                                        state="disabled",
                                        command=self.treeview.delete)
        self.delete_button.pack(side=RIGHT, padx=(5, 10))
        ttk.Button(bottom_queue, text='Add',
                   command=self.add_project).pack(side=RIGHT,
                                                  fill=X,
                                                  padx=(10, 0))
        self.status_button = ttk.Button(bottom_queue,
                                        text='Start',
                                        command=self.toggle_queue_status)
        self.status_button.pack(side=LEFT, padx=(10, 0))

        # Config of frames
        stats_frame.grid_propagate(False)
        cpu_frame.grid_propagate(False)
        ram_frame.grid_propagate(False)
        disk_frame.grid_propagate(False)
def main(token):
    '''
    Main event loop, draw the image and text to tkinter window
    '''

    root = Tk()
    root.configure(bg="black", cursor="none")
    root.attributes('-fullscreen', True)

    f = Frame(root, bg="black", width=MONITOR_WIDTH, height=MONITOR_HEIGHT)
    f.grid(row=0, column=0, sticky="NW")
    f.grid_propagate(0)
    f.update()

    most_recent_song = ""
    while True:
        redraw = True

        time.sleep(5)
        current_song = get_current_playing(token)

        if current_song["album"] != most_recent_song:
            redraw = True
        else:
            redraw = False

        if redraw:
            artist = current_song["artist"]
            name = current_song["name"]
            album = current_song["album"]
            most_recent_song = album
            hd_img = itunes_search(current_song["album"],
                                   current_song["artist"])

            if hd_img != None:
                pi = convert_image(hd_img)
                itunes_cover = "iTunes Cover"
            else:
                pi = convert_image(current_song["img_src"])
                itunes_cover = ""

            img_x = MONITOR_WIDTH / 2
            img_y = MONITOR_HEIGHT / 2

            label = Label(f, image=pi, highlightthickness=0, bd=0)
            label.place(x=img_x, y=img_y, anchor="center")

            artist_label = Label(f,
                                 text=artist,
                                 bg="black",
                                 fg="white",
                                 font=("Courier New", 10))

            artist_x = MONITOR_WIDTH - (MONITOR_WIDTH / 5)
            artist_y = (MONITOR_HEIGHT / 2) - 50
            artist_label.place(x=artist_x, y=artist_y, anchor="center")

            song_label = Label(
                f,
                text=name + "\n \n " + album + "\n \n " + itunes_cover,
                bg="black",
                fg="white",
                font=("Courier New", 10),
            )

            song_x = MONITOR_WIDTH - (MONITOR_WIDTH / 5)
            song_y = (MONITOR_HEIGHT / 2) + 50
            song_label.place(x=song_x, y=song_y, anchor="center")

            root.update()

            label.destroy()
            artist_label.destroy()
            song_label.destroy()
Beispiel #13
0
class PianoTutor:
    def __init__(self, root):
        self.root = root
        self.root.resizable(False, False)
        self.root.title('Piano Tutor')
        self.keys = []
        self.progression_buttons = []
        self.load_json_files()
        self.keys_to_highlight = []
        self.build_mode_selector_frame()
        self.build_score_sheet_frame()
        self.build_controls_frame()
        self.build_keyboard_frame()
        self.build_chords_frame()
        self.build_progressions_frame()
        self.build_scales_frame()
        self.find_scale()

    def load_json_files(self):
        with open(SCALES_JSON_FILE, 'r') as f:
            self.scales = json.load(f, object_pairs_hook=OrderedDict)
        with open(CHORDS_JSON_FILE, 'r') as f:
            self.chords = json.load(f, object_pairs_hook=OrderedDict)
        with open(PROGRESSIONS_JSON_FILE, 'r') as f:
            self.progressions = json.load(f, object_pairs_hook=OrderedDict)

    def on_progression_scale_changed(self, event):
        selected_progression_scale = \
            self.progression_scale_selector.get()
        progressions = [
            k for k in self.progressions[selected_progression_scale].keys()
        ]
        self.progression_selector['values'] = progressions
        self.progression_selector.current(0)
        self.show_progression_buttons()

    def on_progression_key_changed(self, event):
        self.show_progression_buttons()

    def on_progression_changed(self, event):
        self.show_progression_buttons()

    def destroy_current_progression_buttons(self):
        for buttons in self.progression_buttons:
            buttons.destroy()

    def show_progression_buttons(self):
        self.destroy_current_progression_buttons()
        selected_progression_scale = \
            self.progression_scale_selector.get()
        selected_progression = self.progression_selector.get().split('-')
        self.progression_buttons = []
        for i in range(len(selected_progression)):
            self.progression_buttons.append(
                Button(self.progressions_frame,
                       text=selected_progression[i],
                       command=partial(self.on_progression_button_clicked, i)))
            sticky = ('W' if i == 0 else 'E')
            col = (i if i > 1 else 1)
            self.progression_buttons[i].grid(column=col,
                                             row=2,
                                             sticky=sticky,
                                             padx=10)

    def on_progression_button_clicked(self, i):
        self.remove_all_key_highlights()
        selected_progression = self.progression_selector.get().split('-')[i]
        if any(x.isupper() for x in selected_progression):
            selected_chord = 'Major'
        else:
            selected_chord = 'Minor'
        key_offset = ROMAN_TO_NUMBER[selected_progression]
        selected_key = self.progression_key_selector.get()
        index_of_selected_key = (KEYS.index(selected_key) + key_offset) \
            % 12
        self.keys_to_highlight = [
            ALL_KEYS[j + index_of_selected_key]
            for j in self.chords[selected_chord]
        ]
        self.score_maker.draw_chord(self.keys_to_highlight)
        self.highlight_list_of_keys(self.keys_to_highlight)
        play_chord_in_new_thread(self.keys_to_highlight)

    def on_chord_changed(self, event):
        self.remove_all_key_highlights()
        self.find_chord(event)

    def on_chords_key_changed(self, event):
        self.remove_all_key_highlights()
        self.find_chord(event)

    def find_chord(self, event=None):
        self.selected_chord = self.chords_selector.get()
        self.chords_selected_key = self.chords_key_selector.get()
        index_of_selected_key = KEYS.index(self.chords_selected_key)
        self.keys_to_highlight = [
            ALL_KEYS[i + index_of_selected_key]
            for i in self.chords[self.selected_chord]
        ]
        self.score_maker.draw_chord(self.keys_to_highlight)
        self.highlight_list_of_keys(self.keys_to_highlight)
        play_chord_in_new_thread(self.keys_to_highlight)

    def on_scale_changed(self, event):
        self.remove_all_key_highlights()
        self.find_scale(event)

    def on_scale_key_changed(self, event):
        self.remove_all_key_highlights()
        self.find_scale(event)

    def find_scale(self, event=None):
        self.selected_scale = self.scale_selector.get()
        self.scale_selected_key = self.scale_key_selector.get()
        index_of_selected_key = KEYS.index(self.scale_selected_key)
        self.keys_to_highlight = [
            ALL_KEYS[i + index_of_selected_key]
            for i in self.scales[self.selected_scale]
        ]
        self.score_maker.draw_notes(self.keys_to_highlight)
        self.highlight_list_of_keys(self.keys_to_highlight)
        play_scale_in_new_thread(self.keys_to_highlight)

    def highlight_list_of_keys(self, key_names):
        for key in key_names:
            self.highlight_key(key)

    def highlight_key(self, key_name):
        if len(key_name) == 2:
            img = WHITE_KEY_PRESSED_IMAGE
        elif len(key_name) == 3:
            img = BLACK_KEY_PRESSED_IMAGE
        key_img = PhotoImage(file=img)
        for widget in self.keys:
            if widget.name == key_name:
                widget.configure(image=key_img)
                widget.image = key_img

    def remove_key_highlight(self, key_name):
        if len(key_name) == 2:
            img = WHITE_KEY_IMAGE
        elif len(key_name) == 3:
            img = BLACK_KEY_IMAGE
        key_img = PhotoImage(file=img)
        for widget in self.keys:
            if widget.name == key_name:
                widget.configure(image=key_img)
                widget.image = key_img

    def remove_all_key_highlights(self):
        for key in self.keys_to_highlight:
            self.remove_key_highlight(key)
        self.keys_to_highlight = []

    def build_mode_selector_frame(self):
        self.mode_selector_frame = Frame(self.root,
                                         width=WINDOW_WIDTH,
                                         height=MODE_SELECTOR_HEIGHT)
        self.mode_selector_frame.grid_propagate(False)
        self.mode_selector = ttk.Combobox(self.mode_selector_frame,
                                          values=CHOICES)
        self.mode_selector.bind('<<ComboboxSelected>>', self.on_mode_changed)
        self.mode_selector.current(0)
        self.mode_selector.grid(row=0,
                                column=1,
                                columnspan=3,
                                padx=10,
                                pady=10,
                                sticky='nsew')
        self.mode_selector_frame.grid(row=0, column=0)

    def build_score_sheet_frame(self):
        self.score_sheet_frame = Frame(self.root,
                                       width=WINDOW_WIDTH,
                                       height=SCORE_DISPLAY_HEIGHT)
        self.score_sheet_frame.grid_propagate(False)
        self.score_sheet_frame.grid(row=1, column=0)
        self.score_maker = ScoreMaker(self.score_sheet_frame)

    def build_controls_frame(self):
        self.controls_frame = Frame(self.root,
                                    width=WINDOW_WIDTH,
                                    height=CONTROLS_FRAME_HEIGHT)
        self.controls_frame.grid_propagate(False)
        self.controls_frame.grid(row=2, column=0)

    def build_keyboard_frame(self):
        self.keyboard_frame = Frame(self.root,
                                    width=WINDOW_WIDTH,
                                    height=KEYBOARD_HEIGHT,
                                    background='LavenderBlush2')
        self.keyboard_frame.grid_propagate(False)
        self.keyboard_frame.grid(row=4, column=0, sticky='nsew')
        for (index, key) in enumerate(WHITE_KEY_NAMES):
            x = WHITE_KEY_X_COORDINATES[index]
            self.create_key(WHITE_KEY_IMAGE, key, x)
        for (index, key) in enumerate(BLACK_KEY_NAMES):
            x = BLACK_KEY_X_COORDINATES[index]
            self.create_key(BLACK_KEY_IMAGE, key, x)

    def build_scales_frame(self):
        self.scales_frame = Frame(self.controls_frame,
                                  width=WINDOW_WIDTH,
                                  height=CONTROLS_FRAME_HEIGHT)
        self.scales_frame.grid(row=1, column=0, sticky='nsew')
        Label(self.scales_frame, text='Select scale').grid(row=0,
                                                           column=1,
                                                           sticky='w',
                                                           padx=10,
                                                           pady=1)
        self.scale_selector = ttk.Combobox(
            self.scales_frame, values=[k for k in self.scales.keys()])
        self.scale_selector.current(0)
        self.scale_selector.bind('<<ComboboxSelected>>', self.on_scale_changed)
        self.scale_selector.grid(row=1, column=1, sticky='e', padx=10, pady=10)
        Label(self.scales_frame, text='in the key of').grid(row=0,
                                                            column=2,
                                                            sticky='w',
                                                            padx=10,
                                                            pady=1)
        self.scale_key_selector = ttk.Combobox(self.scales_frame,
                                               values=[k for k in KEYS])
        self.scale_key_selector.current(0)
        self.scale_key_selector.bind('<<ComboboxSelected>>',
                                     self.on_scale_key_changed)
        self.scale_key_selector.grid(row=1,
                                     column=2,
                                     sticky='e',
                                     padx=10,
                                     pady=10)

    def build_chords_frame(self):
        self.chords_frame = Frame(self.controls_frame,
                                  width=WINDOW_WIDTH,
                                  height=CONTROLS_FRAME_HEIGHT)
        self.chords_frame.grid_propagate(False)
        self.chords_frame.grid(row=1, column=0, sticky='nsew')
        Label(self.chords_frame, text='Select Chord').grid(row=0,
                                                           column=1,
                                                           sticky='w',
                                                           padx=10,
                                                           pady=1)
        self.chords_selector = ttk.Combobox(
            self.chords_frame, values=[k for k in self.chords.keys()])
        self.chords_selector.current(0)
        self.chords_selector.bind('<<ComboboxSelected>>',
                                  self.on_chord_changed)
        self.chords_selector.grid(row=1,
                                  column=1,
                                  sticky='e',
                                  padx=10,
                                  pady=10)
        Label(self.chords_frame, text='in the key of').grid(row=0,
                                                            column=2,
                                                            sticky='w',
                                                            padx=10,
                                                            pady=1)
        self.chords_key_selector = ttk.Combobox(self.chords_frame,
                                                values=[k for k in KEYS])
        self.chords_key_selector.current(0)
        self.chords_key_selector.bind('<<ComboboxSelected>>',
                                      self.on_chords_key_changed)
        self.chords_key_selector.grid(row=1,
                                      column=2,
                                      sticky='e',
                                      padx=10,
                                      pady=10)

    def build_progressions_frame(self):
        self.progressions_frame = Frame(self.controls_frame,
                                        width=WINDOW_WIDTH,
                                        height=CONTROLS_FRAME_HEIGHT)
        self.progressions_frame.grid_propagate(False)
        self.progressions_frame.grid(row=1, column=0, sticky='nsew')
        Label(self.progressions_frame, text='Select Scale').grid(row=0,
                                                                 column=1,
                                                                 sticky='w',
                                                                 padx=10,
                                                                 pady=1)
        Label(self.progressions_frame,
              text='Select Progression').grid(row=0,
                                              column=2,
                                              sticky='w',
                                              padx=10,
                                              pady=1)
        Label(self.progressions_frame, text='in the Key of').grid(row=0,
                                                                  column=3,
                                                                  sticky='w',
                                                                  padx=10,
                                                                  pady=1)

        self.progression_scale_selector = \
            ttk.Combobox(self.progressions_frame, values=[k for k in
                         self.progressions.keys()], width=18)
        self.progression_scale_selector.bind('<<ComboboxSelected>>',
                                             self.on_progression_scale_changed)
        self.progression_scale_selector.current(0)
        self.progression_scale_selector.grid(row=1,
                                             column=1,
                                             sticky='w',
                                             padx=10,
                                             pady=10)

        self.progression_selector = \
            ttk.Combobox(self.progressions_frame, values=[k for k in
                         self.progressions['Major'].keys()], width=18)
        self.progression_selector.bind('<<ComboboxSelected>>',
                                       self.on_progression_changed)
        self.progression_selector.current(0)
        self.progression_selector.grid(row=1,
                                       column=2,
                                       sticky='w',
                                       padx=10,
                                       pady=10)

        self.progression_key_selector = \
            ttk.Combobox(self.progressions_frame, values=KEYS, width=18)
        self.progression_key_selector.current(0)
        self.progression_key_selector.bind('<<ComboboxSelected>>',
                                           self.on_progression_key_changed)
        self.progression_key_selector.grid(row=1,
                                           column=3,
                                           sticky='w',
                                           padx=10,
                                           pady=10)

    def on_mode_changed(self, event):
        self.remove_all_key_highlights()
        selected_mode = self.mode_selector.get()
        if selected_mode == 'Scales':
            self.show_scales_frame()
            self.find_scale()
        elif selected_mode == 'Chords':
            self.show_chords_frame()
            self.find_chord()
        elif selected_mode == 'Chord Progressions':
            self.show_progressions_frame()
            self.show_progression_buttons()

    def show_scales_frame(self):
        self.chords_frame.grid_remove()
        self.progressions_frame.grid_remove()
        self.scales_frame.grid()

    def show_chords_frame(self):
        self.chords_frame.grid()
        self.progressions_frame.grid_remove()
        self.scales_frame.grid_remove()

    def show_progressions_frame(self):
        self.chords_frame.grid_remove()
        self.progressions_frame.grid()
        self.scales_frame.grid_remove()

    def create_key(self, img, key_name, x_coordinate):
        key_image = PhotoImage(file=img)
        label = Label(self.keyboard_frame, image=key_image, border=0)
        label.image = key_image
        label.place(x=x_coordinate, y=0)
        label.name = key_name
        label.bind('<Button-1>', self.on_key_pressed)
        label.bind('<ButtonRelease-1>', self.on_key_released)
        self.keys.append(label)
        return label

    def change_image_to_pressed(self, event):
        if len(event.widget.name) == 2:
            img = WHITE_KEY_PRESSED_IMAGE
        elif len(event.widget.name) == 3:
            img = BLACK_KEY_PRESSED_IMAGE
        key_img = PhotoImage(file=img)
        event.widget.configure(image=key_img)
        event.widget.image = key_img

    def change_image_to_unpressed(self, event):
        if len(event.widget.name) == 2:
            img = WHITE_KEY_IMAGE
        elif len(event.widget.name) == 3:
            img = BLACK_KEY_IMAGE
        key_img = PhotoImage(file=img)
        event.widget.configure(image=key_img)
        event.widget.image = key_img

    def on_key_pressed(self, event):
        play_note(event.widget.name)
        self.change_image_to_pressed(event)

    def on_key_released(self, event):
        self.change_image_to_unpressed(event)
Beispiel #14
0
class PianoTutor:
    def __init__(self, root):
        self.root = root
        self.root.resizable(False, False)
        self.root.title('Piano Tutor')
        self.keys = []
        self.build_mode_selector_frame()
        self.build_score_sheet_frame()
        self.build_controls_frame()
        self.build_keyboard_frame()
        self.build_chords_frame()
        self.build_progressions_frame()
        self.build_scales_frame()

    def build_mode_selector_frame(self):
        self.mode_selector_frame = Frame(self.root,
                                         width=WINDOW_WIDTH,
                                         height=MODE_SELECTOR_HEIGHT,
                                         background='mint cream')
        self.mode_selector_frame.grid_propagate(False)
        self.mode_selector = ttk.Combobox(self.mode_selector_frame,
                                          values=CHOICES)
        self.mode_selector.bind('<<ComboboxSelected>>', self.on_mode_changed)
        self.mode_selector.current(0)
        self.mode_selector.grid(
            row=0,
            column=1,
            columnspan=3,
            padx=10,
            pady=10,
            sticky='nsew',
        )
        self.mode_selector_frame.grid(row=0, column=0)

    def build_score_sheet_frame(self):
        self.score_sheet_frame = Frame(self.root,
                                       width=WINDOW_WIDTH,
                                       height=SCORE_DISPLAY_HEIGHT,
                                       background='SteelBlue1')
        self.score_sheet_frame.grid_propagate(False)
        Label(self.score_sheet_frame,
              text='placeholder for score sheet',
              background='SteelBlue1').grid(row=1, column=1)
        self.score_sheet_frame.grid(row=1, column=0)

    def build_controls_frame(self):
        self.controls_frame = Frame(self.root,
                                    width=WINDOW_WIDTH,
                                    height=CONTROLS_FRAME_HEIGHT,
                                    background='cornsilk3')
        self.controls_frame.grid_propagate(False)
        self.controls_frame.grid(row=2, column=0)

    def build_keyboard_frame(self):
        self.keyboard_frame = Frame(self.root,
                                    width=WINDOW_WIDTH,
                                    height=KEYBOARD_HEIGHT,
                                    background='LavenderBlush2')
        self.keyboard_frame.grid_propagate(False)
        self.keyboard_frame.grid(row=4, column=0, sticky='nsew')
        for (index, key) in enumerate(WHITE_KEY_NAMES):
            x = WHITE_KEY_X_COORDINATES[index]
            self.create_key(WHITE_KEY_IMAGE, key, x)
        for (index, key) in enumerate(BLACK_KEY_NAMES):
            x = BLACK_KEY_X_COORDINATES[index]
            self.create_key(BLACK_KEY_IMAGE, key, x)

    def build_scales_frame(self):
        self.scales_frame = Frame(self.controls_frame,
                                  width=WINDOW_WIDTH,
                                  height=CONTROLS_FRAME_HEIGHT,
                                  bg='SlateBlue3')
        Label(self.scales_frame,
              text='placeholder for scales frame').grid(row=1, column=1)
        self.scales_frame.grid(row=1, column=0, sticky='nsew')

    def build_chords_frame(self):
        self.chords_frame = Frame(self.controls_frame,
                                  width=WINDOW_WIDTH,
                                  height=CONTROLS_FRAME_HEIGHT,
                                  bg='cornsilk4')
        self.chords_frame.grid_propagate(False)
        Label(self.chords_frame,
              text='placeholder for chords frame').grid(row=1, column=1)
        self.chords_frame.grid(row=1, column=0, sticky='nsew')

    def build_progressions_frame(self):
        self.progressions_frame = Frame(self.controls_frame,
                                        width=WINDOW_WIDTH,
                                        height=CONTROLS_FRAME_HEIGHT,
                                        bg='plum2')
        self.progressions_frame.grid_propagate(False)
        Label(self.progressions_frame,
              text='placeholder for progression frame').grid(row=1, column=1)
        self.progressions_frame.grid(row=1, column=0, sticky='nsew')

    def on_mode_changed(self, event):
        selected_mode = self.mode_selector.get()
        if selected_mode == 'Scales':
            self.show_scales_frame()
        elif selected_mode == 'Chords':
            self.show_chords_frame()
        elif selected_mode == 'Chord Progressions':
            self.show_progressions_frame()

    def show_scales_frame(self):
        self.chords_frame.grid_remove()
        self.progressions_frame.grid_remove()
        self.scales_frame.grid()

    def show_chords_frame(self):
        self.chords_frame.grid()
        self.progressions_frame.grid_remove()
        self.scales_frame.grid_remove()

    def show_progressions_frame(self):
        self.chords_frame.grid_remove()
        self.progressions_frame.grid()
        self.scales_frame.grid_remove()

    def create_key(self, img, key_name, x_coordinate):
        key_image = PhotoImage(file=img)
        label = Label(self.keyboard_frame, image=key_image, border=0)
        label.image = key_image
        label.place(x=x_coordinate, y=0)
        label.name = key_name
        label.bind('<Button-1>', self.on_key_pressed)
        label.bind('<ButtonRelease-1>', self.on_key_released)
        self.keys.append(label)
        return label

    def change_image_to_pressed(self, event):
        if len(event.widget.name) == 2:
            img = WHITE_KEY_PRESSED_IMAGE
        elif len(event.widget.name) == 3:
            img = BLACK_KEY_PRESSED_IMAGE
        key_img = PhotoImage(file=img)
        event.widget.configure(image=key_img)
        event.widget.image = key_img

    def change_image_to_unpressed(self, event):
        if len(event.widget.name) == 2:
            img = WHITE_KEY_IMAGE
        elif len(event.widget.name) == 3:
            img = BLACK_KEY_IMAGE
        key_img = PhotoImage(file=img)
        event.widget.configure(image=key_img)
        event.widget.image = key_img

    def on_key_pressed(self, event):
        play_note(event.widget.name)
        self.change_image_to_pressed(event)

    def on_key_released(self, event):
        print(event.widget.name + ' released')
        self.change_image_to_unpressed(event)
Beispiel #15
0
    def show_stats(self):
            self.frame.destroy()
            self.frame = Frame(window, bg=bgc)
            self.frame.grid(row=0, column=0, sticky="news")
            self.frame.rowconfigure(0, weight=1)
            self.frame.rowconfigure(4, weight=1)
            self.frame.columnconfigure(0, weight=1)
            self.frame.columnconfigure(3, weight=1)
            lblFrame = Frame(self.frame, bg=bgc)
            # lblFrame.grid_propagate(False)
            # lblFrame.rowconfigure(0, weight=1)
            # lblFrame.rowconfigure(3, weight=1)
            # lblFrame.columnconfigure(0, weight=1)
            # lblFrame.columnconfigure(2, weight=1)
            lblFrame.grid(row=2, column=2, sticky="news")
            diff = self.end-self.start
            Label(lblFrame, text=("Time taken: {0:0.1f}s".format(diff)),
                  font=f, anchor="w", bg=bgc, fg=fc
                  ).grid(row=0, column=0, padx=20, pady=(30, 0), sticky="news")

            avg = c = 0
            for q in self.questions:
                if q["time"] != "SKIP":
                    avg += q["time"]
                    c += 1
            if c != 0:
                avg /= c
            else:
                avg = 0
            # Label(lblFrame, text="Avg time taken: {0:0.1f}s".format(avg),
            # font=f, anchor="w", bg=bgc, fg=fc).grid(row=1, column=0, padx=20,
            # sticky="news")
            HoverButton(self.frame, text="choose level", command=main_menu
                        ).grid(row=3, column=2, padx=10, pady=20, sticky="ew")
            # play again button is added on in respective inherited methods

            graphFrame = Frame(self.frame, bg=bgc)
            graphFrame.grid(row=1, column=2, sticky="news")
            # graphFrame.grid_propagate(False)
            graphCanvas = Canvas(graphFrame, bg=bgc, highlightthickness=0)
            graphCanvas.grid()
            graph = SpeedGraph(graphCanvas, 50, 50, 250, 250, 15, avg)
            graphCanvas.create_text(
                150, 25, text="Average time taken", fill=tbgc,
                font=(font.Font(family="Consolas", size=20))
            )

            oframe = Frame(
                self.frame, bg=sbgc, bd=5, relief=tk.GROOVE, padx=10
            )
            oframe.grid(row=1, column=1, rowspan=2, sticky='nw')
            oframe.grid_rowconfigure(0, weight=1)
            oframe.grid_columnconfigure(0, weight=1)
            # prevents children of the frame resizing frame
            oframe.grid_propagate(False)

            # Add a canvas in that frame
            canvas = Canvas(oframe, bg=sbgc, highlightbackground=sbgc)
            canvas.grid(row=0, column=0, sticky="news", padx=20, pady=20)

            # Link a scrollbar to the canvas
            vsb = Scrollbar(oframe, orient=tk.VERTICAL, command=canvas.yview)
            vsb.grid(row=0, column=1, sticky='ns', padx=5, pady=5)
            canvas.configure(yscrollcommand=vsb.set)

            hsb = Scrollbar(oframe, orient=tk.HORIZONTAL, command=canvas.xview)
            hsb.grid(row=1, column=0, sticky="ew", padx=5, pady=5)
            canvas.configure(xscrollcommand=hsb.set)

            # Create a frame to contain the results
            self.iframe = Frame(canvas, bg=sbgc)
            canvas.create_window((0, 0), window=self.iframe, anchor='nw')

            Result(self.iframe, text="Question"
                   ).grid(row=0, column=0, padx=5, sticky="news")
            Result(self.iframe, text="Answer"
                   ).grid(row=0, column=1, padx=5, sticky="news")
            Result(self.iframe, text="Time"
                   ).grid(row=0, column=2, padx=5, sticky="news")
            global normal_op
            for c, v in enumerate(self.questions):
                if v["op"] in normal_op:
                    Result(self.iframe, text=v["format"]
                           ).grid(row=c+1, column=0, padx=5, sticky="news")
                else:
                    Result(self.iframe, text=v["format"]
                           ).grid(row=c+1, column=0, padx=5, sticky="news")

                Result(self.iframe, text=v["answer"]
                       ).grid(row=c+1, column=1, padx=5, sticky="news")
                if v["time"] == "SKIP":
                    Result(self.iframe, text=v["time"]
                           ).grid(row=c+1, column=2, padx=5, sticky="news")
                else:
                    Result(self.iframe, text=("{0:0.1f} sec").format(v["time"])
                           ).grid(row=c+1, column=2, padx=5, sticky="news")

            self.iframe.update_idletasks()  # NEED THIS for BBOX INFO
            oframe.config(width=400, height=400)
            canvas.config(scrollregion=canvas.bbox("all"))
Beispiel #16
0
    def column(self,
               span=0,
               row=None,
               width=None,
               height=None,
               padx=None,
               pady=None,
               bg=None):
        """ 'span'  (int):
            'row'   (int): number of row frame.
        """

        row_frame = self.row_frames[row]
        row_settings = self.row_settings[row]

        if height is None:
            height = int(row_settings.get("height"))

        if width is None:
            width = int(row_settings.get("width"))

        if padx is None:
            padx = int(row_settings.get("padx"))

        if pady is None:
            pady = int(row_settings.get("pady"))

        if bg is None:
            bg = row_settings.get("bg")

        row_cols = int(row_settings.get("cols"))

        # 3. Create new frame
        column = Frame(row_frame,
                       height=height,
                       width=width,
                       padx=padx,
                       pady=pady,
                       bg=bg)
        # 4. Grid in new frame
        column.grid(column=0, row=0, columnspan=span, sticky="nesw")
        column.grid_propagate(0)
        column.pack_propagate(False)
        # 5. Save column frame in list
        self.col_frames[row].append(column)
        # 6. Update number of row columns
        row_count = row_cols + 1
        self.row_settings[row]["cols"] = row_count
        # 7. Create settings
        settings = {}
        settings["row"] = row
        settings["span"] = span
        settings["width"] = width
        settings["height"] = height
        settings["padx"] = padx
        settings["pady"] = pady
        settings["bg"] = bg
        # 8. Save settings
        self.col_settings[row].append(settings)
        # 9.config column
        self.column_config(row=row)

        return column
Beispiel #17
0
def import_data(frame, file):
    docu = tk.Toplevel(frame)
    docu.title("Documentation")
    docu.geometry("{}x{}".format(800, 300))
    docu.maxsize(800, 300)
    docu.config(bg="lightgrey")
    docu.iconbitmap('zbt_logo.ico')

    top = Frame(docu, bg='lightgrey', width=800, height=275)
    top.grid_propagate(0)
    bot = Frame(docu, bg='grey', width=800, height=25)
    bot.grid_propagate(0)

    #docu.grid_rowconfigure(0, weight=1)
    #docu.grid_rowconfigure(1, weight=1)

    top.grid(row=0)
    bot.grid(row=1)

    top.grid_rowconfigure(1, weight=1)
    top.grid_rowconfigure(7, weight=1)
    top.grid_rowconfigure(1, weight=1)
    top.grid_columnconfigure(0, minsize=100, weight=1)
    top.grid_columnconfigure(1, minsize=100, weight=1)
    top.grid_columnconfigure(2, minsize=100, weight=1)

    bot.grid_rowconfigure(1, minsize=25, weight=1)
    bot.grid_columnconfigure(0, minsize=100, weight=1)
    bot.grid_columnconfigure(1, minsize=100, weight=1)
    bot.grid_columnconfigure(2, minsize=100, weight=1)

    #cb_vars = {var1: 1, var2: 2,var3: 3, var4: 4}
    var1 = 'a'
    var2 = 'b'
    var3 = 'c'
    var4 = 'd'

    if file == '':
        docu.destroy()

    filesplit = file.split(' ')[0]
    name = filesplit.split('/')[-1]

    #label1 = tk.Label(docu, text="Datum")

    label2 = tk.Label(top, pady=10, text="Sample:", bg='lightgrey')
    label3 = tk.Label(top, pady=10, text="GDL:", bg='lightgrey')
    label4 = tk.Label(top, pady=10, text="Method:", bg='lightgrey')
    label5 = tk.Label(bot, text='Selection: ' + file, bg='grey')
    label6 = tk.Label(top, pady=10, text="Thickness [mm]:", bg='lightgrey')
    label7 = tk.Label(top, pady=10, text="GDL-Alter:", bg='lightgrey')
    label8 = tk.Label(top, pady=10, text="Kommentar:", bg='lightgrey')

    #entry1 = tk.Entry(docu, width=40, bd=5)        #enables text string (oneliner) input

    entry2 = tk.Entry(top, width=30, bd=5)
    entry2.insert(0, name)
    entry3 = tk.Entry(top, width=30, bd=5)
    entry3.insert(0, '1')
    entry4 = tk.Entry(top, width=30, bd=5)
    entry4.insert(0, '15')
    entry5 = tk.Entry(top, width=30, bd=5)
    entry5.insert(0, 'U=100V / t=30s / Ra=0.219')

    button1 = \
        tk.Button(top, text='OK', width=20, bd=5,
                  command=lambda: store_library(file,
                                    entry2.get(),
                                    checkbutton3.getvar(var3),
                                    checkbutton4.getvar(var4),
                                    checkbutton1.getvar(var1),
                                    checkbutton2.getvar(var2),
                                    entry3.get(),
                                    entry4.get(),
                                    entry5.get(), docu))

    checkbutton1 = tk.Checkbutton(top,
                                  text="Messnadel",
                                  variable=var1,
                                  onvalue="m. Nadel",
                                  offvalue="o. Nadel",
                                  bg='lightgrey')
    checkbutton1.select()

    checkbutton2 = tk.Checkbutton(top,
                                  text="Referenz",
                                  variable=var2,
                                  onvalue='Referenz',
                                  offvalue='',
                                  bg='lightgrey')

    checkbutton3 = tk.Checkbutton(top,
                                  text="F-H23",
                                  variable=var3,
                                  onvalue='H23',
                                  offvalue='',
                                  bg='lightgrey')
    checkbutton3.select()

    checkbutton4 = tk.Checkbutton(top,
                                  text="SGL-29BC",
                                  variable=var4,
                                  onvalue='29BC',
                                  offvalue='',
                                  bg='lightgrey')

    #label1.grid(row=2, column=0, sticky="w")
    label2.grid(row=1, column=0, padx=20, sticky="w")
    label6.grid(row=2, column=0, padx=20, sticky="w")
    label7.grid(row=3, column=0, padx=20, sticky="w")
    label3.grid(row=5, column=0, padx=20, sticky="w")
    label4.grid(row=6, column=0, padx=20, sticky="w")
    label5.grid(row=0, column=0, columnspan=3, sticky='w')
    label5.config(font=("Courier", 7))
    label8.grid(row=4, column=0, padx=20, sticky="w")

    #entry1.grid(row=2, column=1, sticky="w")

    entry2.grid(row=1, column=1)
    entry3.grid(row=2, column=1)
    entry4.grid(row=3, column=1)
    entry5.grid(row=4, column=1)

    #entry3.grid(row=4, column=1, sticky="w")

    button1.grid(row=7, column=1)

    checkbutton1.grid(row=6, padx=20, column=1, sticky='w')
    checkbutton2.grid(row=2, padx=20, column=2, sticky='w')
    checkbutton3.grid(row=5, padx=20, column=1, sticky='w')
    checkbutton4.grid(row=5, padx=20, column=2, sticky='w')

    docu.mainloop()  # halts python app for duration of gui
Beispiel #18
0
class App:
    """Defines a class that creates the Tkinter GUI."""
    def __init__(self, window):
        """
        Constructor - defines all GUI elements.

        :param window: Tkinter root object.
        """

        # Create frames.
        self.input_frame = Frame(master=root,
                                 bg="#E0E9FF",
                                 width=1920,
                                 height=100,
                                 padx=1,
                                 pady=1)
        self.prediction_frame = Frame(master=root,
                                      bg="#E0E9FF",
                                      width=1920,
                                      height=400,
                                      padx=1,
                                      pady=1)
        self.data_frame = Frame(master=root,
                                bg="#E0E9FF",
                                width=1920,
                                height=400,
                                padx=1,
                                pady=1)
        self.button_frame = Frame(master=root,
                                  bg="#E0E9FF",
                                  width=1920,
                                  padx=1,
                                  pady=1)

        # Place frames in grid layout.
        self.input_frame.grid(row=1, column=0, sticky="ew")
        self.prediction_frame.grid(row=2, column=0, sticky="ew")
        self.data_frame.grid(row=3, column=0, sticky="ew")
        self.button_frame.grid(row=4, column=0, sticky="ew")

        # Should frame shrink to wrap subordinate widgets?
        self.input_frame.grid_propagate(True)
        self.prediction_frame.grid_propagate(True)
        self.data_frame.grid_propagate(True)
        self.data_frame.grid_propagate(True)

        # Set weights.
        self.input_frame.grid_rowconfigure(0, weight=1)
        self.input_frame.grid_columnconfigure(0, weight=1)
        self.prediction_frame.grid_rowconfigure(0, weight=1)
        self.prediction_frame.grid_columnconfigure(0, weight=1)
        self.data_frame.grid_rowconfigure(0, weight=1)
        self.data_frame.grid_columnconfigure(0, weight=1)
        self.button_frame.grid_rowconfigure(0, weight=1)
        self.button_frame.grid_columnconfigure(0, weight=1)

        # Input text to model.
        self.input_text = StringVar(value="Enter input to model here...")
        self.input_text_area = Text(master=self.input_frame,
                                    bg="#E0E9FF",
                                    width=1920,
                                    height=10)
        self.input_text_area_scrollbar = Scrollbar(master=self.input_frame)

        self.input_text_area_scrollbar.config(
            command=self.input_text_area.yview)
        self.input_text_area.config(
            yscrollcommand=self.input_text_area_scrollbar.set)
        self.input_text_area_scrollbar.pack(side=RIGHT, fill=Y)
        self.input_text_area.pack(expand=YES, fill=BOTH)

        self.input_text_area.insert(1.0, self.input_text.get())

        # Output data from model.
        self.predicted_text = StringVar(
            value="Predicted text will appear here...")
        self.predicted_text_area = Text(master=self.prediction_frame,
                                        bg="#E0E9FF",
                                        width=1920,
                                        height=10)
        self.predicted_text_area_scrollbar = Scrollbar(
            master=self.prediction_frame)

        self.predicted_text_area_scrollbar.config(
            command=self.predicted_text_area.yview)
        self.predicted_text_area.config(
            yscrollcommand=self.predicted_text_area_scrollbar.set)
        self.predicted_text_area_scrollbar.pack(side=RIGHT, fill=Y)
        self.predicted_text_area.pack(expand=YES, fill=BOTH)

        self.predicted_text_area.insert(1.0, self.predicted_text.get())

        self.data_text = StringVar(
            value="Prediction data will appear here...\n")
        self.data_text_area = Text(master=self.data_frame,
                                   bg="#E0E9FF",
                                   width=1920,
                                   height=20)
        self.data_text_area_scrollbar = Scrollbar(master=self.data_frame)

        self.data_text_area_scrollbar.config(command=self.data_text_area.yview)
        self.data_text_area.config(
            yscrollcommand=self.data_text_area_scrollbar.set)
        self.data_text_area_scrollbar.pack(side=RIGHT, fill=Y)
        self.data_text_area.pack(expand=YES, fill=BOTH)

        self.data_text_area.insert(1.0, self.data_text.get())

        # Message Widget.
        # self.prediction_message_area = Message(master=self.prediction_frame, bg="#E0E9FF", width=1920, padx=1, pady=1,
        #                                        anchor="center", justify="left", relief="raised",
        #                                        textvariable=self.predicted_text)
        # self.prediction_message_area.pack(expand=YES, fill=BOTH)
        #
        #
        # self.data_message_area = Message(master=self.data_frame, bg="#E0E9FF", width=1920, padx=1, pady=1,
        #                                  anchor="center", justify="left", relief="raised",
        #                                  textvariable=self.data_text)
        # self.data_message_area.pack(expand=YES, fill=BOTH)

        # Buttons.
        self.predict_button = Button(self.button_frame,
                                     text='Generate Prediction',
                                     command=self.predict)
        self.predict_button.pack(side=LEFT)

        self.quit_button = Button(self.button_frame,
                                  text='Quit Program',
                                  command=window.destroy)
        self.quit_button.pack(side=RIGHT)

        self.string_var_2 = StringVar()
        self.message_label = Label(window,
                                   textvariable=self.string_var_2,
                                   width=40)

        # Change fonts.
        myFont = Font(family="Times New Roman", size=16)
        self.input_text_area.configure(font=myFont)
        self.predicted_text_area.configure(font=myFont)
        self.data_text_area.configure(font=myFont)
        self.predict_button.configure(font=myFont)
        self.quit_button.configure(font=myFont)

    def predict(self):
        """
        Callback method that obtains GPT-2 model prediction and associated data.
        Outputs predicted text to GUI.

        :return: None.
        """
        debug = 0
        self.predicted_text_area.delete(1.0, END)
        self.data_text_area.delete(1.0, END)

        # Call GPT-2 model and obtain prediction results/data.
        results = model.main(str(self.input_text_area.get("1.0", "end-1c")))
        output = results

        model_input = output["Model Input"]
        decoded_prediction = output["Decoded Prediction"]
        encoded_prediction = output["Encoded Prediction"]

        if debug:
            print(f"Model input: {model_input}")
            print(f"Encoded prediction: {encoded_prediction}")
            print(f"Decoded prediction: {decoded_prediction}")

        # Display the data in the message widget.
        self.predicted_text.set(f"Original model input: {model_input}\n\n"
                                f"Encoded prediction: {encoded_prediction}\n\n"
                                f"Decoded prediction: {decoded_prediction}")
        self.predicted_text_area.insert(1.0, self.predicted_text.get())
        # self.prediction_message_area.configure(textvariable=self.predicted_text)

        ####################################################################################

        if debug:
            print(f"Object length: {len(testDataDict)}")

        data_wrapper = {}
        data = {}
        counter = 0
        self.data_text.set("")
        for i in range(0, len(output) - 4):
            myKey = "Token " + str(counter)
            myValue = output[myKey]
            data[myKey + " Encoded"] = myValue[0]
            data[myKey + " Decoded"] = myValue[1]
            data[myKey + " Encoded Choices"] = myValue[2][0]
            data[myKey + " Decoded Choices"] = myValue[3]
            data_wrapper[counter] = data

            # Append to display all data.
            self.data_text.set(
                self.data_text.get() + f"\n"
                f"Token {counter}:\n"
                f"Encoded token: {data[myKey + ' Encoded']}\n"
                f"Decoded token: {data[myKey + ' Decoded']}\n"
                f"Encoded token choices: {data[myKey + ' Encoded Choices']}\n"
                f"Decoded token choices: {data[myKey + ' Decoded Choices']}\n")
            if debug:
                print(f"Encoded token: {data[myKey + ' Encoded']}")
                print(f"Decoded token: {data[myKey + ' Decoded']}")
                print(
                    f"Encoded token choices: {data[myKey + ' Encoded Choices']}"
                )
                print(
                    f"Decoded token choices: {data[myKey + ' Decoded Choices']}"
                )
            data = {}
            counter += 1

        if debug:
            for key, value in data_wrapper.items():
                print(f"Data wrapper key: {key}")
                print(f"Data wrapper value: {value}")

        # Display the data in the message widget.
        self.data_text_area.delete(1.0, END)
        self.data_text_area.insert(1.0, self.data_text.get())
        # self.data_message_area.configure(textvariable=self.data_text)

        ####################################################################################

        # Convert data for use in visualization.
        restructured_data = []
        counter = 0
        for key, value in data_wrapper.items():
            restructured_data.append({
                "selected_token":
                value["Token " + str(counter) + " Decoded"],
                "token_choices":
                value["Token " + str(counter) + " Decoded Choices"]
            })
            counter += 1

        if debug:
            print(f"{restructured_data}")
            for element in restructured_data:
                print(f"Restructured Data Word: {element['selected_token']}")
                print(f"Restructured Data Tokens: {element['token_choices']}")
off = Button(control_frame, text="OFF", width=6, state="disable")
rgb = Button(control_frame, text="RGB", width=6, state="disable")
delete = Button(control_frame, text="Delete", width=6, state="disable")
brightnessInt = IntVar()
brightness = Scale(control_frame, label="Brightness", variable=brightnessInt, repeatinterval=10, repeatdelay=150,
                   orient="horizontal", length=250, from_=1.0, to=100, sliderlength=20, state="disable")
tempInt = IntVar()
temp = Scale(control_frame, label="Temp", variable=tempInt, orient="horizontal", resolution=100,
             length=250, from_=1700, to=6500, sliderlength=20, state="disable")
colorInt = IntVar()
color = Scale(control_frame, label="Color", variable=colorInt, sliderlength=20, from_=0, to=360,
              orient="horizontal", length=250, showvalue=0, state="disable")
rgb_scale = Label(control_frame, image=imgRgb)

search_frame.grid(column=0, row=0, sticky="e")
search_frame.grid_propagate(0)
search_frame.columnconfigure(0, minsize=100)
search_frame.columnconfigure(1, minsize=100)
control_frame.grid(column=1, row=0, sticky="n")
control_frame.columnconfigure(0, minsize=150)
control_frame.columnconfigure(1, minsize=150)
devices_frame.grid(column=0, row=4, columnspan=2, pady=10)
devices_canvas.pack(side="left", fill="both", expand=True)
devices_scrollbar.pack(side="right", fill="y")

search_button.grid(column=0, row=0, pady=10)
add_button.grid(column=1, row=0, pady=10)
ip_list.grid(column=0, row=1, columnspan=2, padx=5)
sep.grid(column=0, row=2, columnspan=2, pady=10, padx=10, sticky="ew")

devices_title.grid(column=0, row=3, columnspan=2)
Beispiel #20
0
class PianoTutor:

    def __init__(self, root):
        self.root = root
        self.root.resizable(False, False)
        self.root.title('Piano Tutor')
        self.build_mode_selector_frame()
        self.build_score_sheet_frame()
        self.build_controls_frame()
        self.build_keyboard_frame()
        self.build_chords_frame()
        self.build_progressions_frame()
        self.build_scales_frame()

    def build_mode_selector_frame(self):
        self.mode_selector_frame = Frame(self.root, width=WINDOW_WIDTH,
                height=MODE_SELECTOR_HEIGHT, background='mint cream')
        self.mode_selector_frame.grid_propagate(False)
        self.mode_selector = ttk.Combobox(self.mode_selector_frame,
                values=CHOICES)
        self.mode_selector.bind('<<ComboboxSelected>>',
                                self.on_mode_changed)
        self.mode_selector.current(0)
        self.mode_selector.grid(
            row=0,
            column=1,
            columnspan=3,
            padx=10,
            pady=10,
            sticky='nsew',
            )
        self.mode_selector_frame.grid(row=0, column=0)

    def build_score_sheet_frame(self):
        self.score_sheet_frame = Frame(self.root, width=WINDOW_WIDTH,
                height=SCORE_DISPLAY_HEIGHT, background='SteelBlue1')
        self.score_sheet_frame.grid_propagate(False)
        Label(self.score_sheet_frame, text='placeholder for score sheet'
              , background='SteelBlue1').grid(row=1, column=1)
        self.score_sheet_frame.grid(row=1, column=0)

    def build_controls_frame(self):
        self.controls_frame = Frame(self.root, width=WINDOW_WIDTH,
                                    height=CONTROLS_FRAME_HEIGHT,
                                    background='cornsilk3')
        self.controls_frame.grid_propagate(False)
        self.controls_frame.grid(row=2, column=0)

    def build_keyboard_frame(self):
        self.keyboard_frame = Frame(self.root, width=WINDOW_WIDTH,
                                    height=KEYBOARD_HEIGHT,
                                    background='LavenderBlush2')
        self.keyboard_frame.grid_propagate(False)
        Label(self.keyboard_frame, text='placeholder for keyboard',
              background='LavenderBlush2').grid()
        self.keyboard_frame.grid(row=4, column=0, sticky='nsew')

    def build_scales_frame(self):
        self.scales_frame = Frame(self.controls_frame,
                                  width=WINDOW_WIDTH,
                                  height=CONTROLS_FRAME_HEIGHT,
                                  bg='SlateBlue3')
        Label(self.scales_frame, text='placeholder for scales frame'
              ).grid(row=1, column=1)
        self.scales_frame.grid(row=1, column=0, sticky='nsew')

    def build_chords_frame(self):
        self.chords_frame = Frame(self.controls_frame,
                                  width=WINDOW_WIDTH,
                                  height=CONTROLS_FRAME_HEIGHT,
                                  bg='cornsilk4')
        self.chords_frame.grid_propagate(False)
        Label(self.chords_frame, text='placeholder for chords frame'
              ).grid(row=1, column=1)
        self.chords_frame.grid(row=1, column=0, sticky='nsew')

    def build_progressions_frame(self):
        self.progressions_frame = Frame(self.controls_frame,
                width=WINDOW_WIDTH, height=CONTROLS_FRAME_HEIGHT,
                bg='plum2')
        self.progressions_frame.grid_propagate(False)
        Label(self.progressions_frame,
              text='placeholder for progression frame').grid(row=1,
                column=1)
        self.progressions_frame.grid(row=1, column=0, sticky='nsew')

    def on_mode_changed(self, event):
        selected_mode = self.mode_selector.get()
        if selected_mode == 'Scales':
            self.show_scales_frame()
        elif selected_mode == 'Chords':
            self.show_chords_frame()
        elif selected_mode == 'Chord Progressions':
            self.show_progressions_frame()

    def show_scales_frame(self):
        self.chords_frame.grid_remove()
        self.progressions_frame.grid_remove()
        self.scales_frame.grid()

    def show_chords_frame(self):
        self.chords_frame.grid()
        self.progressions_frame.grid_remove()
        self.scales_frame.grid_remove()

    def show_progressions_frame(self):
        self.chords_frame.grid_remove()
        self.progressions_frame.grid()
        self.scales_frame.grid_remove()
    ## GUI ##
    root = Tk()                                # Create Tk Object
    root.protocol("WM_DELETE_WINDOW",askQuit)  # Add exit portocol
    root.geometry("800x500")                 # Configure aspect ratio
    root.title("  \t\t\t\t ECG GUI")           # Add title 
    root.resizable(0,0)                        # Does not Enbale resize figure


    ### PLOTTING DATA ###
    canvas = FigureCanvasTkAgg(fig,master=root)                  # Create a canvas object with predermined fig
    canvas._tkcanvas.grid(row=0,column = 0, padx = 1,pady = 1)   # Set  canvas at specific position
    
    frame = Frame(root, width = 130,height = 200, bg = "#7003FC")
    frame.grid(row = 0,column = 1, padx = 1,pady = 2)
    frame.grid_propagate(False)
    frame.config(relief = "sunken")
    frame.config(cursor="circle")
   
    Begin = Button(frame,command= Begin, text= "Begin ",bg="blue",fg="white", font="Helvetica 14 bold",justify="center")
    Begin.pack
    Begin.grid(row=1,column=0, padx=30,pady=30) 
   
    
    Exit = Button(frame,command= askQuit, text= "Exit ",bg="red",fg="white", font="Helvetica 14 bold",justify="center")
    Exit.pack
    Exit.grid(row=2,column=0, padx=1,pady=5) 
    
    
    
    root.mainloop()
class MainWindow(Frame):
    """This class defines UI and functionality of the application main window
    Derives from class Frame"""

    # class variables
    left_panel_width = 300
    left_upper_height = 270  # width required to display the calendar (date picker)
    notes_ctrl_height = 50
    base_color = 'bisque'
    cover_color = 'indianred'
    lbl_font = '"Century Gothic" 16'
    lbl_fontcolor = 'floralwhite'
    input_font = '"Segoe UI" 16'
    input_fontcolor = 'brown'
    btn_font = '"Century Gothic" 12 bold'
    btn_fontcolor = 'brown'
    str_by_category = 'filter by category:'
    str_by_text = 'filter by text:'
    str_newnote = 'newnote'
    noteview_side = 250
    note_padding = 5

    def __init__(self, container):
        """ctor"""
        super().__init__(container)
        container.update_idletasks()
        self.total_height = container.winfo_height()
        self.total_width = container.winfo_width()
        self.left_middle_height = self.left_lower_height = (
            self.total_height - __class__.left_upper_height) // 2
        self.right_area_width = self.total_width - __class__.left_panel_width
        self.notes_display_height = self.total_height - self.__class__.notes_ctrl_height

        self.msgboard_img = PhotoImage(
            file=msgboard_img_path
        )  # object that represents the background as cork-board texture
        self.justdoit_img = PhotoImage(
            file=justdoit_img_path)  # placeholder #1
        self.colornotes_img = PhotoImage(
            file=colornotes_img_path)  # placeholder #2

        self.create_widgets(container)

        # initial calculation of the grid dimensions according to the available space and the note frame size
        self.cnvs_notes_display.gridcols_cnt = self.right_area_width // (
            __class__.noteview_side + __class__.note_padding)
        self.cnvs_notes_display.gridrows_cnt = self.notes_display_height // (
            __class__.noteview_side + __class__.note_padding)
        self.cnvs_notes_display.grid_propagate(False)

    def create_widgets(self, container):
        """This method defines UI of the main window"""
        self.frm_main = Frame(container)
        self.frm_main.pack(fill=BOTH, expand=True)

        self.frm_left_main = Frame(self.frm_main,
                                   width=__class__.left_panel_width,
                                   height=self.total_height,
                                   bg=__class__.base_color)
        self.frm_left_main.pack(side=LEFT)

        self.frm_left_top = Frame(self.frm_left_main,
                                  width=__class__.left_panel_width,
                                  height=__class__.left_upper_height,
                                  bg=__class__.cover_color)
        self.frm_left_top.grid(row=0)
        self.frm_left_top.grid_propagate(False)
        self.calendar = Calendar(self.frm_left_top,
                                 padx_param=__class__.left_panel_width / 5,
                                 pady_param=__class__.left_upper_height / 8)

        self.frm_left_middle = Frame(self.frm_left_main,
                                     width=__class__.left_panel_width,
                                     height=self.left_middle_height,
                                     bg=__class__.base_color)
        self.frm_left_middle.grid(row=1)
        self.cnvs_left_middle = Canvas(
            self.frm_left_middle,
            width=self.left_panel_width,
            height=self.left_middle_height)  #, bg='white'
        self.cnvs_left_middle.grid(row=0, column=0)
        self.cnvs_left_middle.create_image(self.left_panel_width // 2,
                                           self.left_middle_height // 2,
                                           image=self.justdoit_img)

        self.frm_left_btm = Frame(self.frm_left_main,
                                  width=__class__.left_panel_width,
                                  height=self.left_lower_height,
                                  bg=__class__.base_color)
        self.frm_left_btm.grid(row=2)
        self.cnvs_left_bottom = Canvas(
            self.frm_left_btm,
            width=self.left_panel_width,
            height=self.left_lower_height)  #, bg='white'
        self.cnvs_left_bottom.grid(row=0, column=0)
        self.cnvs_left_bottom.create_image(self.left_panel_width // 2,
                                           self.left_lower_height // 2,
                                           image=self.colornotes_img)

        self.frm_right_main = Frame(self.frm_main,
                                    width=self.right_area_width,
                                    height=self.total_height,
                                    bg=__class__.base_color)
        self.frm_right_main.pack()

        self.frm_notes_control = Frame(self.frm_right_main,
                                       width=self.right_area_width,
                                       height=__class__.notes_ctrl_height,
                                       bg=__class__.cover_color)
        self.frm_notes_control.pack(fill=X)
        self.frm_notes_control.pack_propagate(False)

        self.lbl_filter_by_category = Label(self.frm_notes_control,
                                            font=__class__.lbl_font,
                                            fg=__class__.lbl_fontcolor,
                                            bg=__class__.cover_color,
                                            text=__class__.str_by_category)
        self.lbl_filter_by_category.pack(side=LEFT)

        self.cmbx_filter_by_category = Combobox(
            self.frm_notes_control,
            font=__class__.input_font,
            foreground=__class__.input_fontcolor,
            textvariable=category_filter_ctrlvar)  # ttk.Combobox
        self.cmbx_filter_by_category.configure(values=['All'] +
                                               category_names_lst)
        self.cmbx_filter_by_category.current(0)  # i.e. default value is 'All'
        self.cmbx_filter_by_category.bind("<<ComboboxSelected>>",
                                          self.action_filter_notes)
        self.cmbx_filter_by_category.pack(side=LEFT)

        self.lbl_filter_by_text = Label(self.frm_notes_control,
                                        font=__class__.lbl_font,
                                        fg=__class__.lbl_fontcolor,
                                        bg=__class__.cover_color,
                                        text=__class__.str_by_text)
        self.lbl_filter_by_text.pack(side=LEFT)

        self.entry_filter_by_text = Entry(self.frm_notes_control,
                                          font=__class__.input_font,
                                          fg=__class__.input_fontcolor,
                                          textvariable=descr_filter_ctrlvar)
        self.entry_filter_by_text.bind('<KeyRelease>',
                                       self.action_filter_notes)
        self.entry_filter_by_text.pack(side=LEFT)

        self.btn_new_note = Button(self.frm_notes_control,
                                   font=__class__.btn_font,
                                   fg=__class__.btn_fontcolor,
                                   text=__class__.str_newnote)
        self.btn_new_note.bind("<Button-1>", action_new_note_dialog)
        self.btn_new_note.pack(side=RIGHT, padx=5)

        self.frm_notes_display = Frame(self.frm_right_main,
                                       width=self.right_area_width,
                                       height=self.notes_display_height,
                                       bg='bisque')
        self.frm_notes_display.pack()

        self.cnvs_notes_display = Canvas(self.frm_notes_display,
                                         width=self.right_area_width,
                                         height=self.notes_display_height)
        self.cnvs_notes_display.bind('<Configure>', self.action_config_display)
        self.cnvs_notes_display.pack(fill=BOTH)
        self.cnvs_notes_display.create_image(self.right_area_width // 2,
                                             self.notes_display_height // 2,
                                             image=self.msgboard_img)

        self.sizegrip = Sizegrip(self)  #ttk.Sizegrip
        self.sizegrip.pack(side=RIGHT)

    def action_config_display(self, event):
        """This method deploys according to the new screen dimensions"""
        #self.after(250, clean_display())

        root.update_idletasks()
        self.total_height = root.winfo_height()
        self.total_width = root.winfo_width()
        self.left_middle_height = self.left_lower_height = (
            self.total_height - __class__.left_upper_height) // 2
        self.right_area_width = self.total_width - __class__.left_panel_width
        self.notes_display_height = self.total_height - self.__class__.notes_ctrl_height

        # recalculation of the grid dimensions according to available space and note frame size
        self.cnvs_notes_display.gridcols_cnt = self.right_area_width // (
            __class__.noteview_side + __class__.note_padding)
        self.cnvs_notes_display.gridrows_cnt = self.notes_display_height // (
            __class__.noteview_side + __class__.note_padding)

        self.action_filter_notes(event)

    def action_filter_notes(self, event=None):
        """This method displays notes that meet currentl filtering criteria"""

        aux_filter_notes(category_filter_ctrlvar.get(),
                         descr_filter_ctrlvar.get())
        display_notes(event)
Beispiel #23
0
class Interface(Frame):  # Une classe qui hérite de la classe Frame
    """Inherited from tkinter.Frame class.
    Generate the search_engine's user interface. 
    """
    def __init__(self, master: object = None):
        super().__init__(master, width="13c", height="12c")
        self.grid_propagate(0)
        self.pack()
        self.rowconfigure(0, minsize=10)

        # BOUTON D'AUTHENTIFICATION
        # Frame parent
        self.auth_frame = Frame(self, width="13c", height="0.75c")
        self.auth_frame.grid_propagate(0)
        self.auth_frame.grid(row=1)
        self.auth_frame.columnconfigure(0, minsize="13c")
        # Bouton enfant
        self.Auth_btn = Button(self.auth_frame,
                               text="Tester l'Authentification")
        self.Auth_btn.grid(column=0, row=0, sticky="ns")

        # LA ZONE DE RECHERCHE DE TEXTE LIBRE:
        # Frame Parent
        self.search_frame = Frame(self, width="13c", height="2c")
        self.search_frame.grid(row=2)
        self.search_frame.columnconfigure(0, minsize="13c")
        self.search_frame.rowconfigure(0, minsize="0.5c")
        self.search_frame.rowconfigure(2, minsize="0.5c")

        # Zone de texte enfant
        self.str_search = StringVar()
        self.search_box = Entry(self.search_frame,
                                textvariable=self.str_search,
                                width=70)
        #self.search_box = Entry(self.search_frame, width=70)
        self.search_box.grid(row=1)

        # LES FILTRES et LANCEMENT
        # Frame parent filtres
        self.filters_frame = Frame(self, width="13c", height="8c")
        self.filters_frame.grid_propagate(0)
        self.filters_frame.grid(row=3)

        filters_frame_grid = {
            "row0": "0.5c",
            "row2": "0.75c",
            "row4": "0.75c",
            "col0": "1c",
            "col2": "1.5c",
            "col4": "0.5c"
        }
        for dimension in filters_frame_grid:
            if dimension[0:3] == "row":
                self.filters_frame.rowconfigure(
                    int(dimension[3]), minsize=filters_frame_grid[dimension])
            else:
                self.filters_frame.columnconfigure(
                    int(dimension[3]), minsize=filters_frame_grid[dimension])

        # Frame parent Fournisseur
        self.fourn_frame = FilterFrame(self.filters_frame, field="Fournisseur")
        self.fourn_frame.grid(row=1, column=1)

        # Frame parent Groupe de travail
        self.grpTrav_frame = FilterFrame(self.filters_frame,
                                         field="Groupe de travail")
        self.grpTrav_frame.grid(row=1, column=3)

        # Frame parent Type
        self.type_frame = FilterFrame(self.filters_frame, field="Type")
        self.type_frame.grid(row=3, column=1)

        # Frame parent Mot-clef
        self.keyW_frame = FilterFrame(self.filters_frame, field="Mot-Clef")
        self.keyW_frame.grid(row=3, column=3)

        # Frame parent Format
        self.format_frame = FilterFrame(self.filters_frame, field="Format")
        self.format_frame.grid(row=5, column=1)

        # Frame parent Bouton Lancement
        self.resetBtn_frame = Frame(self.filters_frame,
                                    width="5.5c",
                                    height="2c")
        self.resetBtn_frame.grid_propagate(0)
        self.resetBtn_frame.grid(row=5, column=3)
        self.resetBtn_frame.rowconfigure(0, minsize="1c")
        self.resetBtn_frame.columnconfigure(0, minsize="4c")
        # Bouton enfant
        self.reset_btn = Button(self.resetBtn_frame, text="Reset", width=20)
        self.reset_btn.grid(row=1, column=0, sticky="w")

        #RESULTAT DE L'INVENTAIRE
        # Frame parent
        self.result_frame = Frame(self, width="13c", height="1c")
        self.result_frame.grid_propagate(0)
        self.result_frame.grid(row=4)
        self.result_frame.rowconfigure(0, minsize="0.5c")
        self.result_frame.columnconfigure(0, minsize="1c")
        # Texte enfant
        self.str_result = StringVar()
        self.str_result.set("0 métadonnées correspondantes")
        self.result_lbl = Label(self.result_frame,
                                textvariable=self.str_result,
                                justify="left")
        self.result_lbl.grid(column=1, row=1, sticky="w")
Beispiel #24
0
class Gui():
    def __init__(self, root, settings):
        self.root = root
        self.settings = settings

        self.entry = Entry(root)
        self.canvas = Canvas(root,
                             width=settings.width,
                             height=settings.height,
                             background='white')
        self.canvas.grid(row=0, column=1)
        self.stvar = StringVar()
        self.stvar.set("one")

        self.Graf1 = Graf(self.canvas, self.settings.hodnoteneHrany)

        self.frame = Frame(self.root, width="150", height=600, bg="#1e272e")
        self.frame.grid(row=0, column=0, sticky='nswe')
        self.frame.grid_propagate(0)
        # self.label1 = Label(self.frame, text="Figure").grid(row=0, column=0, sticky="nw")
        self.selectedText = StringVar()
        self.selectedText.set("None")
        self.label10 = Label(self.frame,
                             bg="#1e272e",
                             fg="white",
                             text="Selected V: ").grid(row=1,
                                                       column=0,
                                                       sticky="we")
        self.label11 = Label(self.frame,
                             bg="#1e272e",
                             fg="white",
                             width=10,
                             textvariable=self.selectedText).grid(
                                 row=1,
                                 column=1,
                                 sticky="we",
                                 pady=20,
                             )

        # self.option = OptionMenu(self.frame, self.stvar, "one", "two", "three").grid(row=1, column=1, sticky='nwe')
        self.UlozButton = Button(self.frame,
                                 text="Uloz Graf",
                                 bg="#05c46b",
                                 relief="flat",
                                 command=self.Graf1.uloz).grid(row=3,
                                                               column=0,
                                                               columnspan=2,
                                                               sticky="we")
        self.NacitajButton = Button(self.frame,
                                    text="Nacitaj Graf",
                                    bg="#05c46b",
                                    command=self.Graf1.nacitaj).grid(
                                        row=4,
                                        column=0,
                                        columnspan=2,
                                        sticky="we")
        self.NVymazButton = Button(self.frame,
                                   text="Vymaz graf",
                                   bg="#05c46b",
                                   command=self.Graf1.vymazVsetko).grid(
                                       row=5,
                                       column=0,
                                       columnspan=2,
                                       sticky="we")
        self.cyklusButton = Button(
            self.frame,
            text="Ma cyklus",
            bg="#05c46b",
            command=lambda: self.Graf1.vypis("cyklus")).grid(row=6,
                                                             column=0,
                                                             columnspan=2,
                                                             sticky="we")
        self.KomponentyButton = Button(
            self.frame,
            text="Vyznac komponenty",
            bg="#05c46b",
            command=lambda: self.Graf1.vypis("komponenty")).grid(row=7,
                                                                 column=0,
                                                                 columnspan=2,
                                                                 sticky="we")
        self.JeSuvislyButton = Button(
            self.frame,
            text="Je Suvisly",
            bg="#05c46b",
            command=lambda: self.Graf1.vypis("suvisly")).grid(row=8,
                                                              column=0,
                                                              columnspan=2,
                                                              sticky="we")
        self.MinKostraButton = Button(
            self.frame,
            text="Min_Kostra",
            bg="#05c46b",
            command=lambda: self.Graf1.vypis("kostra")).grid(row=9,
                                                             column=0,
                                                             columnspan=2,
                                                             sticky="we")
        self.canvas.bind('<Button-1>', self.lclick)

    def lclick(self, event):
        # print(event)

        self.Graf1.klik(event)
        # print(self.Graf1.selected,"selected gui")
        self.selectedText.set("None" if self.Graf1.selected ==
                              -1 else str(self.Graf1.selected))
Beispiel #25
0
class Grid():
    """ Build a grid following the bootstrap model.
    This class can be used to create a grid in a grid. """
    def __init__(self,
                 frame=None,
                 width=None,
                 height=None,
                 padx=0,
                 pady=0,
                 bg="#ffffff"):
        """ 'frame'         (Frame): Tkinter frame.
            'width'         (int  ): new frame width.
            'height'        (int  ): new frame height.
            'padx'          (int  ): new frame space (top/bottom).
            'pady'          (int  ): new frame space (right/left).
            'bg'            (str  ): new frame background color.
            'master_frame'  (Frame): new frame.
            'row_frames'    (list ): new frame row frames.
            'row_settings'  (list ): new frame row frames settings.
            'col_frames'    (list ): new frame column frames.
            'col_settings'  (list ): new frame column frames settings. """

        self.frame = frame
        self.width = width - pady
        self.height = height - padx
        self.padx = padx
        self.pady = pady
        self.bg = bg

        self.master_frame = None
        self.row_frames = []
        self.row_settings = []
        self.col_frames = []
        self.col_settings = []

        self.create_master_frame()

    def create_master_frame(self):
        """When an instance of this class is created,\
        we create a main frame on the frame received as a parameter.
        (!) This method should only be called once. """

        self.master_frame = Frame(self.frame,
                                  width=self.width,
                                  height=self.height,
                                  padx=self.padx,
                                  pady=self.pady,
                                  bg=self.bg)

        self.master_frame.grid(
            column=0,
            row=0,
            columnspan=12,
            sticky="nesw",
        )
        self.master_frame.grid_propagate(0)

    def row(self, width=None, height=None, padx=None, pady=None, bg=None):
        """ Create row frame in master_frame.
        This frame represent an row. """

        # 1. Per default
        if width is None:
            width = self.width

        if height is None:
            height = self.height

        if padx is None:
            padx = self.padx

        if pady is None:
            pady = self.pady

        if bg is None:
            bg = self.bg

        # 2. Row frames count
        row_count = len(self.row_frames)

        # 3. Create new frame
        row = Frame(self.master_frame,
                    width=width,
                    height=height,
                    padx=padx,
                    pady=pady,
                    bg=bg)
        # 4. Grid in new frame
        row.grid(
            column=0,
            row=row_count,
            columnspan=12,
            sticky="nesw",
        )
        row.grid_propagate(0)
        # 5. Save row frame in list
        self.row_frames.append(row)
        # 6. Create settings
        settings = {}
        settings["width"] = width
        settings["height"] = height
        settings["padx"] = padx
        settings["pady"] = pady
        settings["bg"] = bg
        settings["col_width"] = width / 12
        settings["cols"] = 0
        # 7. Save row settings
        self.row_settings.append(settings)

        bloc_cols = []
        self.col_frames.append(bloc_cols)

        bloc_cols = []
        self.col_settings.append(bloc_cols)

        return row

    def column(self,
               span=0,
               row=None,
               width=None,
               height=None,
               padx=None,
               pady=None,
               bg=None):
        """ 'span'  (int):
            'row'   (int): number of row frame.
        """

        row_frame = self.row_frames[row]
        row_settings = self.row_settings[row]

        if height is None:
            height = int(row_settings.get("height"))

        if width is None:
            width = int(row_settings.get("width"))

        if padx is None:
            padx = int(row_settings.get("padx"))

        if pady is None:
            pady = int(row_settings.get("pady"))

        if bg is None:
            bg = row_settings.get("bg")

        row_cols = int(row_settings.get("cols"))

        # 3. Create new frame
        column = Frame(row_frame,
                       height=height,
                       width=width,
                       padx=padx,
                       pady=pady,
                       bg=bg)
        # 4. Grid in new frame
        column.grid(column=0, row=0, columnspan=span, sticky="nesw")
        column.grid_propagate(0)
        column.pack_propagate(False)
        # 5. Save column frame in list
        self.col_frames[row].append(column)
        # 6. Update number of row columns
        row_count = row_cols + 1
        self.row_settings[row]["cols"] = row_count
        # 7. Create settings
        settings = {}
        settings["row"] = row
        settings["span"] = span
        settings["width"] = width
        settings["height"] = height
        settings["padx"] = padx
        settings["pady"] = pady
        settings["bg"] = bg
        # 8. Save settings
        self.col_settings[row].append(settings)
        # 9.config column
        self.column_config(row=row)

        return column

    def column_config(self, row=None):
        """ This method comput the size \
        and span of columns. """

        row_width = int(self.row_settings[row].get("width"))
        row_cols = int(self.row_settings[row].get("cols"))
        default_col_width = self.row_settings[row].get("col_width")

        cols_frames = self.col_frames[row]
        cols_settings = self.col_settings[row]

        previous_pos = 0
        for i in range(row_cols):

            span = cols_settings[i]["span"]
            if int(span) == 0:
                col_width = row_width // row_cols
                col_span = 12 // row_cols
                col_pos = i * col_span
            else:
                if i == 0:
                    col_pos = 0
                else:
                    col_span_prev = cols_settings[i - 1]["span"]
                    col_pos = col_span_prev + previous_pos

                col_span = span
                col_width = default_col_width * span

            cols_settings[i]["width"] = col_width
            cols_settings[i]["span"] = col_span

            cols_frames[i].config(width=col_width)
            cols_frames[i].grid(column=col_pos,
                                row=0,
                                columnspan=col_span,
                                sticky="nesw")

            previous_pos = col_pos
from tkinter import Tk,Frame,Grid, Label, Button, Canvas
from rgbSensor import getRGB

app = Tk()
app.title("RGB GUI") # * Name of the window 

# * Main frame on which everything is added 
f = Frame(app,width=800,height=500)
f.grid(row=1,column=0,sticky="NW")
f.grid_propagate(0)
f.update()

# * Title Label 
title = Label(f,text="RGB Viewer")
title.config(font=("Roboto Slab", 20))
title.place(x=400, y=50, anchor="center")

colors=getRGB()

red=Label(f,text="RED: "+str(colors[0]))
red.config(font=("Roboto Slab", 15))
red.place(x=400, y=100, anchor="center")

green=Label(f,text="GREEN: "+str(colors[1]))
green.config(font=("Roboto Slab", 15))
green.place(x=400, y=150, anchor="center")

blue=Label(f,text="BLUE: "+str(colors[2]))
blue.config(font=("Roboto Slab", 15))
blue.place(x=400, y=200, anchor="center")
    archive.mainloop()


# GUI / Mainwindow

#Init / Mainwindow - Mainframe
menu = tk.Tk()
menu.title("Analyse Kontaktwiderstand")
menu.geometry("{}x{}".format(500, 350))
menu.maxsize(500, 350)
menu.config(bg='lightgrey')
menu.iconbitmap('zbt_logo.ico')

#Init / Mainwindow - Subframes
top = Frame(menu, bg='lightgrey', width=500, height=100)
top.grid_propagate(0)

center = Frame(menu, bg='grey', width=500, height=250)
center.grid_propagate(0)

menu.grid_rowconfigure(0, weight=1)
menu.grid_rowconfigure(1, weight=1)
top.grid(row=0)
center.grid(row=1)

center.grid_columnconfigure(0, minsize=100, weight=1)
center.grid_columnconfigure(1, minsize=100, weight=1)

#Tkinter Objects
button1 = tk.Button(top,
                    text='Import new Measurement',
Beispiel #28
0
class FactorioModTool:
    def __init__(self, master):
        self.master = master
        master.title('Factorio ModTool')
        master.geometry('{}x{}'.format(800, 500))

        global frames

        self.navigationPanel(self.master)
        self.baseFrame(self.master)
        self.baseItemsFrame(self.master)

        self.modFrame(self.master)
        self.configFrame(self.master)

        self.changeFrame('base')

    def navigationPanel(self, master):
        #Create the navigationPanel
        self.navigationFrame = Frame(master,
                                     width=120,
                                     height=500,
                                     bg="blue",
                                     highlightbackground="black",
                                     highlightthickness=2)

        self.baseButton = Button(
            self.navigationFrame,
            text="Base",
            width=12,
            command=lambda: self.changeFrame('base')).grid(row=0,
                                                           column=0,
                                                           sticky=W)

        #Create Base mod buttons
        self.baseItemsButton = Button(
            self.navigationFrame,
            text="Items",
            width=12,
            command=lambda: self.changeFrame('baseItems'))
        self.baseItemsButton.grid(row=1, column=0, sticky=W, padx=10)
        self.baseRecipesButton = Button(self.navigationFrame,
                                        text="Recipes",
                                        width=12,
                                        command=lambda: self.changeFrame(2))
        self.baseRecipesButton.grid(row=2, column=0, sticky=W, padx=10)
        self.baseTechsButton = Button(self.navigationFrame,
                                      text="Technologies",
                                      width=12,
                                      command=lambda: self.changeFrame(3))
        self.baseTechsButton.grid(row=3, column=0, sticky=W, padx=10)

        self.modButton = Button(self.navigationFrame,
                                text="Mod",
                                width=12,
                                command=lambda: self.changeFrame('mod')).grid(
                                    row=4, column=0, sticky=W)

        #Create Mod buttons
        self.modItemsButton = Button(self.navigationFrame,
                                     text="Items",
                                     width=12,
                                     command=lambda: self.changeFrame(5))
        self.modItemsButton.grid(row=5, column=0, sticky=W, padx=10)
        self.modRecipesButton = Button(self.navigationFrame,
                                       text="Recipes",
                                       width=12,
                                       command=lambda: self.changeFrame(6))
        self.modRecipesButton.grid(row=6, column=0, sticky=W, padx=10)
        self.modTechsButton = Button(self.navigationFrame,
                                     text="Technologies",
                                     width=12,
                                     command=lambda: self.changeFrame(7))
        self.modTechsButton.grid(row=7, column=0, sticky=W, padx=10)

        #Create config button
        self.configButton = Button(self.navigationFrame,
                                   text="Config",
                                   width=12,
                                   command=lambda: self.changeFrame('config'))
        self.configButton.grid(column=0, sticky=W)

        self.navigationFrame.grid(row=0, column=0, sticky=NW)
        self.navigationFrame.grid_propagate(0)

        if config['baseFolder'] != 'tempPath':
            self.showBaseButtons()
        else:
            self.hideBaseButtons()

        if config['modFolder'] != 'tempPath':
            self.showModButtons()
        else:
            self.hideModButtons()

    def hideBaseButtons(self):
        self.baseItemsButton.grid_forget()
        self.baseRecipesButton.grid_forget()
        self.baseTechsButton.grid_forget()

    def hideModButtons(self):
        self.modItemsButton.grid_forget()
        self.modRecipesButton.grid_forget()
        self.modTechsButton.grid_forget()

    def showBaseButtons(self):
        self.baseItemsButton.grid(row=1, column=0, sticky=W, padx=10)
        self.baseRecipesButton.grid(row=2, column=0, sticky=W, padx=10)
        self.baseTechsButton.grid(row=3, column=0, sticky=W, padx=10)

    def showModButtons(self):
        self.modItemsButton.grid(row=5, column=0, sticky=W, padx=10)
        self.modRecipesButton.grid(row=6, column=0, sticky=W, padx=10)
        self.modTechsButton.grid(row=7, column=0, sticky=W, padx=10)

    def baseFrame(self, master):
        global frames
        global config
        #Base Frame
        self.baseFrame = Frame(master, width=700, height=700, bg='red')
        frames['base'] = self.baseFrame

        self.baseFrame.grid(row=0, column=1, sticky=W)
        self.baseFrame.grid_propagate(0)

        #List the files for each category, items/recipes/techs

        #Create a frame for each list
        #Item
        self.itemsFrame = Frame(self.baseFrame,
                                highlightbackground="black",
                                highlightthickness=2)
        self.itemsFrame.grid(row=0, column=0, sticky=W, padx=10, pady=5)
        if config['baseFolder'] != 'tempPath':
            path = config['baseFolder'] + r"\data\base\prototypes\item"
            items = os.listdir(path)

        self.itemsLabel = Label(self.itemsFrame, text='Items:')
        self.itemsLabel.grid(row=0, column=0, sticky=W)
        self.itemsChecklist = ChecklistBox(self.itemsFrame,
                                           items,
                                           bd=1,
                                           relief="sunken",
                                           background="white")
        self.itemsChecklist.grid(row=1, column=0, sticky=W)

        #Recipe
        self.recipesFrame = Frame(self.baseFrame,
                                  highlightbackground="black",
                                  highlightthickness=2)
        self.recipesFrame.grid(row=0, column=1, sticky=NW, padx=10, pady=5)
        if config['baseFolder'] != 'tempPath':
            path = config['baseFolder'] + r"\data\base\prototypes\recipe"
            recipes = os.listdir(path)

        self.recipesLabel = Label(self.recipesFrame, text='Recipes:')
        self.recipesLabel.grid(row=0, column=0, sticky=NW)
        self.recipesChecklist = ChecklistBox(self.recipesFrame,
                                             recipes,
                                             bd=1,
                                             relief="sunken",
                                             background="white")
        self.recipesChecklist.grid(row=1, column=0, sticky=NW)

        #Techs
        self.techsFrame = Frame(self.baseFrame,
                                highlightbackground="black",
                                highlightthickness=2)
        self.techsFrame.grid(row=0, column=2, sticky=NW, padx=10, pady=5)
        if config['baseFolder'] != 'tempPath':
            path = config['baseFolder'] + r"\data\base\prototypes\technology"
            techs = os.listdir(path)

        self.techsLabel = Label(self.techsFrame, text='Technologies:')
        self.techsLabel.grid(row=0, column=0, sticky=NW)
        self.techsChecklist = ChecklistBox(self.techsFrame,
                                           techs,
                                           bd=1,
                                           relief="sunken",
                                           background="white")
        self.techsChecklist.grid(row=1, column=0, sticky=NW)

    def baseItemsFrame(self, master):
        global frames
        global config

        self.baseItemsFrame = Frame(master, width=700, height=500, bg='pink')
        frames['baseItems'] = self.baseItemsFrame

        self.baseItemsFrame.grid(row=0, column=1, sticky=W)
        self.baseItemsFrame.grid_propagate(0)

        #path = config['baseFolder'] + r"\data\base\prototypes\item"
        path = r"C:\Users\Christoffer\Documents"
        path = path + r"\demo-turret.lua"
        file = open(path, 'r')
        #ff = file.read()
        ff = json.load(file)
        print(ff)
        file.close()

    def modFrame(self, master):
        global frames
        #Mod Frame
        self.modFrame = Frame(master, width=700, height=500, bg='green')
        frames['mod'] = self.modFrame

        self.modFrame.grid(row=0, column=1, sticky=W)
        self.modFrame.grid_propagate(0)

    def configFrame(self, master):
        global frames
        global config
        #Config Frame
        self.configFrame = Frame(master, width=700, height=500, bg="yellow")
        frames['config'] = self.configFrame

        self.configFrame.grid(row=0, column=1, sticky=W)
        self.configFrame.grid_propagate(0)

        self.configFactorioFolderLabel = Label(
            self.configFrame, text='Factorio installation folder:')
        self.configFactorioFolderLabel.grid(row=0, column=0, sticky=W)

        self.configFactorioFolderTextbox = Text(self.configFrame,
                                                width=60,
                                                height=1)
        self.configFactorioFolderTextbox.grid(row=1, column=0, sticky=W)
        if config['baseFolder'] != 'tempPath':
            self.configFactorioFolderTextbox.insert(END, config['baseFolder'])

        self.configFactorioFolderBrowse = Button(
            self.configFrame,
            text='Browse',
            command=lambda: self.browseForFolder(self.
                                                 configFactorioFolderTextbox))
        self.configFactorioFolderBrowse.grid(row=1, column=1, sticky=W, padx=2)

    def browseForFolder(self, outputBox):
        folder_selected = filedialog.askdirectory()
        outputBox.delete(0.0, END)
        outputBox.insert(END, folder_selected)

    def changeFrame(self, fname):
        global frames
        for i in frames:
            if i == fname:
                frames[i].grid(row=0, column=1, sticky=W)
                frames[i].grid_propagate(0)
            else:
                frames[i].grid_forget()

        if fname == 'base':
            #List relevant files
            print('tbd')
Beispiel #29
0
class SearchWindow(Frame):
    def __init__(self, parent) -> None:
        Frame.__init__(self, parent)
        self.parent = parent

        self.initUI()

    def initUI(self) -> None:
        """Постоение окна поиска"""

        w = 1500
        h = 500

        sw = self.parent.winfo_screenwidth()
        sh = self.parent.winfo_screenheight()

        x = (sw - w) / 2 + 100
        y = (sh - h) / 2 - 50

        self.parent.geometry("%dx%d+%d+%d" % (w, h, x, y))
        self.parent.title("Военная кафедра - поиск по представлениям")

        self.place_search_label("оборудование")

        self.place_back_button()
        self.place_main_frame()
        self.place_choose_buttons()
        self.place_search_entry()

        self.pack(fill=BOTH, expand=1)

    def place_back_button(self) -> None:
        """Создание и расположение кнопки "назад" """

        btn_filter = Button(
            self, text="Назад", font=("Arial Bold", 10), width=10, command=self.back
        )
        btn_filter.place(x=500, y=400)

    def place_main_frame(self) -> None:
        """ " Создание фреймов для размещения таблиц"""

        self.role = get_role()

        self.main_frame = Frame(self, height=200, width=900)
        self.main_frame.configure(
            height=self.main_frame["height"], width=self.main_frame["width"]
        )
        self.main_frame.grid_propagate(0)

        self.main_frame.place(x=20, y=20)

        self.tree = ttk.Treeview(
            self.main_frame, column=("c1", "c2", "c3", "c4"), show="headings"
        )

        self.scroll = ttk.Scrollbar(
            self.main_frame, orient="horizontal", command=self.tree.xview
        )

    def place_choose_buttons(self) -> None:
        if self.role == "Студент":
            btn_subjects = Button(
                self,
                text="Предметы",
                font=("Arial Bold", 10),
                width=10,
                command=self.place_subjects,
            )
            btn_subjects.place(x=100, y=320)

        elif self.role == "Преподаватель":
            btn_student = Button(
                self,
                text="Студенты",
                font=("Arial Bold", 10),
                width=10,
                command=self.place_students,
            )
            btn_student.place(x=100, y=250)

            btn_teacher = Button(
                self,
                text="Преподаватели",
                font=("Arial Bold", 10),
                width=10,
                command=self.place_teachers,
            )
            btn_teacher.place(x=100, y=320)

            btn_subjects = Button(
                self,
                text="Предметы",
                font=("Arial Bold", 10),
                width=10,
                command=self.place_subjects,
            )
            btn_subjects.place(x=100, y=390)

            btn_equipment = Button(
                self,
                text="Оборудование",
                font=("Arial Bold", 10),
                width=10,
                command=self.place_equipment,
            )
            btn_equipment.place(x=100, y=460)

        else:
            btn_student = Button(
                self,
                text="Студенты",
                font=("Arial Bold", 10),
                width=10,
                command=self.place_students,
            )
            btn_student.place(x=100, y=250)

            btn_teacher = Button(
                self,
                text="Преподаватели",
                font=("Arial Bold", 10),
                width=10,
                command=self.place_teachers,
            )
            btn_teacher.place(x=100, y=320)

            btn_subjects = Button(
                self,
                text="Предметы",
                font=("Arial Bold", 10),
                width=10,
                command=self.place_subjects,
            )
            btn_subjects.place(x=100, y=390)

    def place_subjects(self) -> None:
        """Создание и расположение представления предметов"""

        self.main_label.destroy()
        self.place_search_label("предметы")

        self.tree.destroy()
        self.scroll.destroy()

        self.tree = ttk.Treeview(
            self.main_frame, column=("c1", "c2", "c3", "c4"), show="headings"
        )
        self.tree.pack(side="left", fill="y")
        self.tree.column("#1", anchor=CENTER, minwidth=0, width=130)
        self.tree.heading("#1", text="ПРЕДМЕТ")
        self.tree.column("#2", anchor=CENTER, minwidth=0, width=150)
        self.tree.heading("#2", text="ГОД ОБУЧЕНИЯ")
        self.tree.column("#3", anchor=CENTER, minwidth=0, width=140)
        self.tree.heading("#3", text="СЕМЕСТР ОБУЧЕНИЯ")
        self.tree.column("#4", anchor=CENTER, minwidth=0, width=150)
        self.tree.heading("#4", text="ВЗВОД")

        if (
            self.role != "Студент"
            and self.role != "Преподаватель"
            and self.role != "Начальник ВУЦ"
        ):
            self.tree.bind("<<TreeviewSelect>>", self.update_subject)

        self.tree.pack(fill=BOTH, expand=1)

        self.fill_table_subject()

    def place_students(self) -> None:
        """Создание и расположение представления студентов"""

        self.main_label.destroy()
        self.place_search_label("студент")

        self.tree.destroy()
        self.scroll.destroy()

        self.tree = ttk.Treeview(
            self.main_frame,
            column=("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10"),
            show="headings",
        )

        self.scroll = ttk.Scrollbar(
            self.main_frame, orient="horizontal", command=self.tree.xview
        )

        self.tree.column("#1", minwidth=0, width=90, anchor=CENTER)
        self.tree.heading("#1", text="ИМЯ")
        self.tree.column("#2", minwidth=0, width=120, anchor=CENTER)
        self.tree.heading("#2", text="ФАМИЛИЯ")
        self.tree.column("#3", minwidth=0, width=150, anchor=CENTER)
        self.tree.heading("#3", text="ДАТА РОЖДЕНИЯ")
        self.tree.column("#4", minwidth=0, width=150, anchor=CENTER)
        self.tree.heading("#4", text="НОМЕР ПАССПОРТА")
        self.tree.column("#5", minwidth=0, width=150, anchor=CENTER)
        self.tree.heading("#5", text="ДАТА ВЫДАЧИ")
        self.tree.column("#6", minwidth=0, width=90, anchor=CENTER)
        self.tree.heading("#6", text="КЕМ ВЫДАН")
        self.tree.column("#7", minwidth=0, width=90, anchor=CENTER)
        self.tree.heading("#7", text="ИНН")
        self.tree.column("#8", minwidth=0, width=210, anchor=CENTER)
        self.tree.heading("#8", text="ВЗВОД")
        self.tree.column("#9", minwidth=0, width=250, anchor=CENTER)
        self.tree.heading("#9", text="АДРЕС")
        self.tree.column("#10", minwidth=0, width=130, anchor=CENTER)
        self.tree.heading("#10", text="НОМЕР ТЕЛЕФОНА")

        if (
            self.role != "Студент"
            and self.role != "Преподаватель"
            and self.role != "Начальник ВУЦ"
        ):
            self.tree.bind("<<TreeviewSelect>>", self.update_student)

        self.tree.pack(fill=BOTH, expand=True, side=TOP)

        self.scroll.pack(side=BOTTOM, fill=X)
        self.tree.configure(xscrollcommand=self.scroll.set)

        self.fill_table_student()

    def place_teachers(self) -> None:
        """Создание и расположение представления преподавателей"""

        self.main_label.destroy()
        self.place_search_label("преподаватель")

        self.tree.destroy()
        self.scroll.destroy()

        self.tree = ttk.Treeview(
            self.main_frame,
            column=(
                "c1",
                "c2",
                "c3",
                "c4",
                "c5",
                "c6",
                "c7",
                "c8",
                "c9",
                "c10",
                "c11",
                "c12",
            ),
            show="headings",
        )

        self.scroll = ttk.Scrollbar(
            self.main_frame, orient="horizontal", command=self.tree.xview
        )

        self.tree.column("#1", minwidth=0, width=90, anchor=CENTER)
        self.tree.heading("#1", text="ИМЯ")
        self.tree.column("#2", minwidth=0, width=120, anchor=CENTER)
        self.tree.heading("#2", text="ФАМИЛИЯ")
        self.tree.column("#3", minwidth=0, width=110, anchor=CENTER)
        self.tree.heading("#3", text="ДАТА РОЖДЕНИЯ")
        self.tree.column("#4", minwidth=0, width=170, anchor=CENTER)
        self.tree.heading("#4", text="НАЧАЛО ПРЕПОДАВАНИЯ")
        self.tree.column("#5", minwidth=0, width=120, anchor=CENTER)
        self.tree.heading("#5", text="НОМЕР ПАССПОРТА")
        self.tree.column("#6", minwidth=0, width=120, anchor=CENTER)
        self.tree.heading("#6", text="ДАТА ВЫДАЧИ")
        self.tree.column("#7", minwidth=0, width=90, anchor=CENTER)
        self.tree.heading("#7", text="КЕМ ВЫДАН")
        self.tree.column("#8", minwidth=0, width=90, anchor=CENTER)
        self.tree.heading("#8", text="ИНН")
        self.tree.column("#9", minwidth=0, width=80, anchor=CENTER)
        self.tree.heading("#9", text="ЗВАНИЕ")
        self.tree.column("#10", minwidth=0, width=140, anchor=CENTER)
        self.tree.heading("#10", text="ОСНОВНОЙ ПРЕДМЕТ")
        self.tree.column("#11", minwidth=0, width=250, anchor=CENTER)
        self.tree.heading("#11", text="АДРЕС")
        self.tree.column("#12", minwidth=0, width=120, anchor=CENTER)
        self.tree.heading("#12", text="НОМЕР ТЕЛЕФОНА")

        if self.role != "Студент" and self.role != "Преподаватель":
            self.tree.bind("<<TreeviewSelect>>", self.update_teacher)

        self.tree.pack(fill=BOTH, expand=True, side=TOP)

        self.scroll.pack(side=BOTTOM, fill=X)
        self.tree.configure(xscrollcommand=self.scroll.set)

        self.fill_table_teacher()

    def place_equipment(self) -> None:
        """Создание и расположение представления оборудования"""

        self.main_label.destroy()
        self.place_search_label("оборудование")

        self.tree.destroy()
        self.scroll.destroy()

        self.tree = ttk.Treeview(self.main_frame, column=("c1", "c2"), show="headings")
        self.tree.column("#1", minwidth=0, width=200, anchor=CENTER)
        self.tree.heading("#1", text="ОБОРУДОВАНИЕ")
        self.tree.column("#2", minwidth=0, width=200, anchor=CENTER)
        self.tree.heading("#2", text="ПРЕДМЕТ")

        if self.role != "Студент":
            self.tree.bind("<<TreeviewSelect>>", self.update_equipment)

        self.tree.pack(fill=BOTH, expand=1)

        self.fill_table_equipment()

    def place_search_entry(self) -> None:

        self.main_entry = Entry(self, width=30, font=("Arial Bold", 10))
        self.main_entry.place(x=500, y=300)

    def place_search_label(self, table: str) -> None:

        if table == "студент" or table == "преподаватель":
            textt = "Фамилия"
        else:
            textt = "Название предмета"

        self.main_label = Label(self, text=textt, font=("Arial Bold", 10))
        self.main_label.place(x=300, y=300)

    def fill_table_student(self) -> None:
        """Заполнение таблицы "student" """

        import sys

        sys.path.append("..")

        from db.search import search_student

        text = self.main_entry.get()
        if text == "":
            text = "none"

        records = search_student(text)

        for record in records:
            self.tree.insert("", END, values=record)

    def fill_table_subject(self) -> None:
        """Заполнение таблицы "subject" """

        import sys

        sys.path.append("..")

        from db.search import search_subject

        text = self.main_entry.get()
        if text == "":
            text = "none"

        records = search_subject(text)

        for record in records:
            self.tree.insert("", END, values=record)

    def fill_table_equipment(self) -> None:
        """Заполнение таблицы "equipment" """

        import sys

        sys.path.append("..")

        from db.search import search_equipment

        text = self.main_entry.get()
        if text == "":
            text = "none"

        records = search_equipment(text)

        for record in records:
            self.tree.insert("", END, values=record)

    def fill_table_teacher(self) -> None:
        """Заполнение таблицы "teacher" """

        import sys

        sys.path.append("..")

        from db.search import search_teacher

        text = self.main_entry.get()
        if text == "":
            text = "none"

        records = search_teacher(text)

        for record in records:
            self.tree.insert("", END, values=record)

    def update_subject(self, event):
        from tkinter import Tk
        from .update.subject import UpdateWindow

        new_window = Tk()
        UpdateWindow(new_window, self.tree)

    def update_student(self, event):
        from tkinter import Tk
        from .update.student import UpdateWindow

        new_window = Tk()
        UpdateWindow(new_window, self.tree)

    def update_teacher(self, event):
        from tkinter import Tk
        from .update.teacher import UpdateWindow

        new_window = Tk()
        UpdateWindow(new_window, self.tree)

    def update_equipment(self, event):
        from tkinter import Tk
        from .update.equipment import UpdateWindow

        new_window = Tk()
        UpdateWindow(new_window, self.tree)

    def back(self) -> None:
        """Возвращает в меню выбора действия"""

        from .main_window import MainWindow

        self.remove_window()
        MainWindow(self.parent)

    def remove_window(self) -> None:
        """Удаляет все обьекты родительского окна"""

        self.destroy()
def visualize_eis_data(frame):

    eis_data_frame = tk.Toplevel(frame)
    eis_data_frame.title("EIS Data-Library")
    eis_data_frame.geometry("{}x{}".format(800, 600))
    eis_data_frame.maxsize(800, 600)
    eis_data_frame.config(bg="blue")
    eis_data_frame.iconbitmap('zbt_logo.ico')

    #eis_data_frame.rowconfigure(0, weight=1)

    #eis_data_frame.rowconfigure(1, weight=1)

    top_eis_data_frame = Frame(eis_data_frame,
                               bg='green',
                               width=800,
                               height=50)
    # bot_eis_data_frame = Frame(eis_data_frame, bg='grey', width=800, height=700)
    top_eis_data_frame.grid_propagate(0)
    # bot_eis_data_frame.grid_propagate(0)

    top_eis_data_frame.grid(row=0, column=2)
    # bot_eis_data_frame.grid(row=1)

    rootpath = pathlib.Path(__file__).parent.absolute()
    filelist = [
        fname[:-4]
        for fname in os.listdir(str(rootpath) + '/EIS_data/CSV_data/')
        if fname.endswith('.csv')
    ]

    # set startvalue and define optionmenu
    var = tk.StringVar(top_eis_data_frame)

    var.set(filelist[0])

    option = tk.OptionMenu(
        top_eis_data_frame,
        var,
        *filelist,
        command=lambda _: eis_plotter(var.get(), eis_canvas, fig_ax1))

    option.grid(row=0, column=0, sticky='ew', padx=(10, 10))
    #option.pack()

    fig = Figure(figsize=(50, 50))
    grid = fig.add_gridspec(13, 18)

    fig_ax1 = fig.add_subplot(grid[:13, :18])
    fig_ax1.set_title('EIS-Data Comparison',
                      pad=10,
                      fontdict=dict(fontsize=16, weight='bold'))

    # fig_ax1.set_xlim([0, 20])
    # fig_ax1.set_ylim([0, 400])

    eis_canvas = FigureCanvasTkAgg(fig, master=eis_data_frame)
    #eis_canvas.get_tk_widget().grid(row=1, column=0)

    #eis_canvas.get_tk_widget().pack()

    eis_data_frame.mainloop()