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)
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
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)
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
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)
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() )
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()
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)
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)
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"))
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 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
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)
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)
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")
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))
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',
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')
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()