def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.root = self.winfo_toplevel() self.root.option_add("*Font", "serif 10 bold") self.root.title(" ".join((APPNAME, VERSION, "| Main"))) self.root.resizable(0,0) self.root.bind('<Key>', self.__keys) # Menu menubar = Menu(self.root) self.windowsmenu = Menu(menubar, tearoff=0) self.windowsmenu.add_command(label="[ ] Report window", command=self.__toggle_report) self.windowsmenu.add_command(label="Plot current model", command=self.__plot) self.windowsmenu.add_separator() self.windowsmenu.add_command(label="Quit", command=self.destroy) menubar.add_cascade(label="Windows", menu=self.windowsmenu) settingsmenu = Menu(menubar, tearoff=0) settingsmenu.add_command(label="Spectrum range") settingsmenu.add_command(label="Color scheme") menubar.add_cascade(label="Settings", menu=settingsmenu) helpmenu = Menu(menubar, tearoff=0) helpmenu.add_command(label="Help", command=self.__help) helpmenu.add_separator() helpmenu.add_command(label="About", command=self.__about) menubar.add_cascade(label="Help", menu=helpmenu) self.root.config(menu=menubar) # disabled menu items settingsmenu.entryconfig(0, state='disabled') settingsmenu.entryconfig(1, state='disabled') helpmenu.entryconfig(0, state='disabled') # Scale ctrls = Labelframe(self, text='Control', relief='ridge') self.e = Scale(ctrls, from_=E_MIN, to=E_MAX, label='Links', bd=1, width=7, length=150, orient='horizontal') self.d = Scale(ctrls, from_=D_MIN, to=D_MAX, label='Pages', bd=1, width=7, length=150, orient='horizontal') self.e.set(E) self.d.set(D) self.e.config(command=self.__refresh) self.d.config(command=self.__refresh) self.e.pack(side='left') self.d.pack(side='right') self.r_win = False ctrls.pack(side='top', anchor='e', padx=7, pady=5) # initialize model self.generate_model() self.c = GraphViewer(self, D, self.edge_counts, self.pagerank) self.c.pack() # open windows self.__toggle_report()
rightFrame = Frame(win) rightFrame.pack(side='right') rightFrame.config(width=600, height=470, background="green") panedwindow.add(leftFrame) panedwindow.add(rightFrame) bottomFrame = Frame(win) bottomFrame.pack(side='bottom') bottomFrame.config(width=800, height=30, background="blue") # leftFrame에 Entry 위젯 추가 label_frame = Labelframe(leftFrame, text='기본 정보 입력') label_frame.pack() lbl_name = Label(label_frame, text="성명:") lbl_phone = Label(label_frame, text="전화번호:") lbl_email = Label(label_frame, text="이메일:") entry_name = Entry(label_frame) entry_phone = Entry(label_frame) entry_email = Entry(label_frame) lbl_name.grid(row=0, column=0) entry_name.grid(row=0, column=1, padx=5, pady=5) lbl_phone.grid(row=1, column=0) entry_phone.grid(row=1, column=1, padx=5, pady=5) lbl_email.grid(row=2, column=0) entry_email.grid(row=2, column=1, padx=5, pady=5)
class MainView(Frame): def __init__(self, root, model: Model): super().__init__(root) root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) self.model = model self.__init_components() self.grid(sticky='nsew') self.__bind_action_events() def __init_components(self): # Instanciar widgets self.panel_form = Labelframe(self, text='Tarea') self.panel_tasks = Labelframe(self, text='Tareas por hacer') self.panel_complete_tasks = Labelframe(self, text='Tareas completas') self.label_name = Label(self.panel_form, text='Nombre:') self.label_description = Label(self.panel_form, text='Descripción:') self.entry_name = Entry(self.panel_form) self.entry_description = Entry(self.panel_form) self.btn_modify_task = Button(self.panel_form, text='Editar tarea', state=DISABLED, command=self.__modify_task) self.btn_new_task = Button(self.panel_form, text='Nueva tarea', command=self.__new_task) self.btn_delete_task = Button(self.panel_form, text='Eliminar tarea', state=DISABLED, command=self.__delete_task) self.btn_clear_form = Button(self.panel_form, text='Limpiar campos', command=self.__clear_form) self.btn_complete_task = Button(self.panel_form, text='Completar tarea', state=DISABLED, command=self.__complete_task) self.scroll_tasks = Scrollbar(self.panel_tasks, orient=VERTICAL) self.scroll_complete_tasks = Scrollbar(self.panel_complete_tasks, orient=VERTICAL) self.list_tasks = Listbox(self.panel_tasks, selectmode=SINGLE, height=10, width=25, yscrollcommand=self.scroll_tasks.set) self.list_complete_tasks = Listbox( self.panel_complete_tasks, selectmode=SINGLE, height=10, width=25, yscrollcommand=self.scroll_complete_tasks.set) # Posicionar los widgets # Panel de formulario de tareas self.panel_form.pack(fill='both', expand='yes', padx=10, pady=5, ipadx=5, ipady=5) self.panel_form.columnconfigure(0, weight=1) self.panel_form.rowconfigure(0, weight=1) self.label_name.grid(row=0, column=0, padx=5, sticky='w') self.entry_name.grid(row=0, column=1, padx=5, sticky='w') self.label_description.grid(row=1, column=0, padx=5, pady=5, sticky='w') self.entry_description.grid(row=1, column=1, padx=5, pady=10, sticky='w') # Botones self.btn_modify_task.grid(row=2, column=0, ipady=4, sticky='we') self.btn_new_task.grid(row=2, column=1, ipady=4, sticky='we') self.btn_delete_task.grid(row=3, column=0, ipady=4, sticky='we') self.btn_clear_form.grid(row=3, column=1, ipady=4, sticky='we') self.btn_complete_task.grid(row=4, column=0, columnspan=2, ipady=4, sticky='we') config_list = { 'fill': 'both', 'expand': 'yes', 'padx': 10, 'pady': 5, 'ipadx': 5, 'ipady': 5 } # Panel de lista de tareas pendientes self.panel_tasks.pack(config_list) self.panel_tasks.columnconfigure(0, weight=20) self.panel_tasks.columnconfigure(1, weight=1) self.list_tasks.grid(row=0, column=0, sticky='we') self.scroll_tasks.configure(command=self.list_tasks.yview) self.scroll_tasks.grid(row=0, column=1, sticky='ns') # Panel de lista de tareas completas self.panel_complete_tasks.pack(config_list) self.panel_complete_tasks.columnconfigure(0, weight=20) self.panel_complete_tasks.columnconfigure(1, weight=1) self.list_complete_tasks.grid(row=0, column=0, sticky='we') self.scroll_complete_tasks.configure( command=self.list_complete_tasks.yview) self.scroll_complete_tasks.grid(row=0, column=1, sticky='ns') def __bind_action_events(self): # self.btn_new_task.bind('<Button>', self.__new_task) # self.btn_modify_task.bind('<Button>', self.__modify_task) # self.btn_delete_task.bind('<Button>', self.__delete_task) # self.btn_complete_task.bind('<Button>', self.__complete_task) self.list_tasks.bind('<<ListboxSelect>>', self.__select_task) def __new_task(self): log_info('Botón {} pulsado'.format( self.btn_new_task.config('text')[-1])) name_value = self.entry_name.get() description_value = self.entry_description.get() if name_value: self.model.new_task(name_value, description_value) self.update_tables() else: messagebox.showwarning('AVISO', 'Complete el campo de nombre') def __modify_task(self): index = self.__selected_task() name_value = self.entry_name.get() description_value = self.entry_description.get() if index != -1: task = self.model.get_task(self.model.tasks[index].get_id()) complete = self.model.modify_task(task.get_id(), name_value, description_value) if complete: messagebox.showinfo('Aviso', 'Tarea: {} editada'.format(task.name)) self.update_tables() def __delete_task(self): index = self.__selected_task() if index != -1: task = self.model.get_task(self.model.tasks[index].get_id()) self.model.delete_task(task.get_id()) self.update_tables() def __complete_task(self): index = self.__selected_task() if index != -1: task = self.model.get_task(self.model.tasks[index].get_id()) task.close_todo() complete = self.model.modify_task(task.get_id(), task.name, task.description) if complete: messagebox.showinfo('Aviso', 'Tarea: {} completa'.format(task.name)) self.update_tables() def __clear_form(self): self.clear_form() self.__change_state_btn(DISABLED) def __select_task(self, event): self.clear_form() index = self.__selected_task() if index != -1: task = self.model.get_task(self.model.tasks[index].get_id()) self.set_form(task) self.__change_state_btn(NORMAL) def __change_state_btn(self, state: str): self.btn_new_task.config( state=NORMAL if state == DISABLED else DISABLED) self.btn_delete_task.config(state=state) self.btn_modify_task.config(state=state) self.btn_complete_task.config(state=state) def __selected_task(self): try: return self.list_tasks.curselection()[0] except IndexError: self.__change_state_btn(DISABLED) self.list_complete_tasks.activate(-1) return -1 def update_tables(self): log_info('Actualizando tablas') self.list_tasks.delete(0, END) self.list_complete_tasks.delete(0, END) for index in range(len(self.model.tasks)): self.list_tasks.insert(index, self.model.tasks[index].name) for index in range(len(self.model.complete_tasks)): self.list_complete_tasks.insert( index, self.model.complete_tasks[index].name) def clear_form(self): self.entry_name.delete(0, END) self.entry_description.delete(0, END) def set_form(self, task: Task): if task is not None: self.entry_name.insert(0, task.name) self.entry_description.insert(0, task.description) else: log_error('No se encontró la tarea seleccionada')
def start(self): """Called when initialised to create test widgets.""" # Initialise timer variables to None. (no need to clear canvas yet!) self.vtimer = self.htimer = self.atimer = None Label(self, text="WARNING: The delta will contain x and y components, " "even if that function is only called on changes to one axis!\n" "WARNING 2: Smoothing not included").pack() # Horizontal movement horiz_frame = Labelframe(self, text="Horizontal") horiz_frame.pack(side="left", padx=10, pady=10) # Canvas for previewing delta movement. self.hcanvas = Canvas(horiz_frame, width=200, height=200) self.hcanvas.create_oval(110, 110, 90, 90, fill=self.hcol, outline=self.hcol) self.hcanvas.pack() # Label for dragging from. l = Label(horiz_frame, text="DRAG ME", relief="ridge") l.pack(ipadx=10, ipady=10, padx=20, pady=20) # Create button to reset canvas. Button(horiz_frame, text="Reset", command=lambda: self.hcanvas.delete("delta")).pack(padx=3, pady=3) # Motion input (the actual thing being tested!) m = MotionInput(l) m.bind("<Motion-X>", self.on_horiz_mov) # Vertical movement vert_frame = Labelframe(self, text="Vertical") vert_frame.pack(side="left", padx=10, pady=10) # Canvas for previewing delta movement. self.vcanvas = Canvas(vert_frame, width=200, height=200) self.vcanvas.create_oval(110, 110, 90, 90, fill=self.vcol, outline=self.vcol) self.vcanvas.pack() # Label for dragging from. l = Label(vert_frame, text="DRAG ME", relief="ridge") l.pack(ipadx=10, ipady=10, padx=20, pady=20) # Create button to reset canvas. Button(vert_frame, text="Reset", command=lambda: self.vcanvas.delete("delta")).pack(padx=3, pady=3) # Motion input (the actual thing being tested!) m = MotionInput(l) m.bind("<Motion-Y>", self.on_vert_mov) # Any movement any_frame = Labelframe(self, text="Any Direction") any_frame.pack(side="left", padx=10, pady=10) # Canvas for previewing delta movement. self.acanvas = Canvas(any_frame, width=200, height=200) self.acanvas.create_oval(110, 110, 90, 90, fill=self.acol, outline=self.acol) self.acanvas.pack() # Label for dragging from. l = Label(any_frame, text="DRAG ME", relief="ridge") l.pack(ipadx=10, ipady=10, padx=20, pady=20) # Create button to reset canvas. Button(any_frame, text="Reset", command=lambda: self.acanvas.delete("delta")).pack(padx=3, pady=3) # Motion input (the actual thing being tested!) m = MotionInput(l) m.bind("<Motion-XY>", self.on_any_mov)
from tkinter import Tk, StringVar from tkinter.ttk import Entry, Style, Label, Labelframe root = Tk() style = Style() style.theme_use('default') style.configure('brown.TLabelframe', background='#C9B99B') style.configure('brown.TLabelframe.Label', background='#EDEF77') style.configure('brown.TLabel', background='#EDEF77') style.configure('lowr.TLabel', background='lightblue') style.configure('upr.TLabel', background='red') LFTEXT = 'Beer Strength % v/v' lf0 = Labelframe(root, text=LFTEXT, style='brown.TLabelframe') lf0.pack(padx=10, pady=10) L_LIMIT = 0.0 U_LIMIT = 10.0 ulab = Label(lf0, text=str(U_LIMIT) + " upper limit", style='brown.TLabel') ulab.grid(row=0, column=1, padx=10) llab = Label(lf0, text=str(L_LIMIT) + " lower limit", style='brown.TLabel') llab.grid(row=2, column=1, padx=10) def end_input(evt): """limit on float Parameters ---------- evt : str
def open_config_window(self): config_window = Toplevel(self) config_window.iconbitmap(r'data\app.ico') config_window.minsize(500, 350) config_frame = Labelframe(config_window) config_frame.config(text="App Configuration", relief='groove', borderwidth=5) config_frame.pack(expand=1, fill='both', padx=5, pady=5) offset_title = Label(config_frame) offset_title.config(text='Numbering offset (Default 0)') offset_title.pack(anchor='nw', padx=5, pady=5) offset_entry = Entry(config_frame) offset_entry.config( width=10, exportselection=0, validate='key', validatecommand=(offset_entry.register(validate_config_entry), '%P')) offset_entry.pack(anchor='nw', padx=5, pady=5) battle_value_frame = Labelframe(config_frame) battle_value_frame.config(text='Battle weighting', relief='groove', borderwidth=5) battle_value_frame.pack(anchor='nw', fill='both', expand=1, padx=5, pady=5) descriptor_frame = Frame(battle_value_frame) descriptor_frame.pack(side='left', fill='both', expand=1) entry_frame = Frame(battle_value_frame) entry_frame.pack(side='left', fill='both', expand=1) skirmish_title = Label(descriptor_frame) skirmish_title.config(text='Skirmish weighting (Default = 1):') skirmish_title.pack(anchor='nw', padx=5, pady=7) skirmish_entry = Entry(entry_frame) skirmish_entry.config( width=10, exportselection=0, validate='key', validatecommand=(skirmish_entry.register(validate_config_entry), '%P')) skirmish_entry.pack(anchor='nw', padx=5, pady=5) advance_title = Label(descriptor_frame) advance_title.config(text='Advance weighting (Default = 1):') advance_title.pack(anchor='nw', padx=5, pady=10) advance_entry = Entry(entry_frame) advance_entry.config( width=10, exportselection=0, validate='key', validatecommand=(advance_entry.register(validate_config_entry), '%P')) advance_entry.pack(anchor='nw', padx=5, pady=5) clan_war_title = Label(descriptor_frame) clan_war_title.config(text='Clan War weighting (Default = 3):') clan_war_title.pack(anchor='nw', padx=5, pady=6) clan_war_entry = Entry(entry_frame) clan_war_entry.config( width=10, exportselection=0, validate='key', validatecommand=(clan_war_entry.register(validate_config_entry), '%P')) clan_war_entry.pack(anchor='nw', padx=5, pady=5) buttons_frame = Frame(config_frame) buttons_frame.pack(anchor='sw', fill='both', expand=0) apply_button = Button(buttons_frame) apply_button.config(text='Apply', command=partial(self.config_apply, offset_entry, skirmish_entry, advance_entry, clan_war_entry)) apply_button.pack(side='right', padx=5, pady=5) cancel_button = Button(buttons_frame) cancel_button.config(text='Cancel', command=lambda: config_window.destroy()) cancel_button.pack(side='right', padx=5, pady=5) ok_button = Button(buttons_frame) ok_button.config(text='OK', style='OK.TButton', command=partial(self.config_ok, offset_entry, skirmish_entry, advance_entry, clan_war_entry, config_window)) ok_button.pack(side='right', padx=5, pady=5) offset_entry.insert('end', self.offset) skirmish_entry.insert('end', self.skirmish_value) advance_entry.insert('end', self.advance_value) clan_war_entry.insert('end', self.clan_war_value)
class FindingWindow(): def __init__(self, master, finding=None): self.master = master self.finding = finding self.master.geometry("400x300+300+300") self.master.title("Finding-Selector") self.proof_selectors = dict() self.proof_count = 0 self.init_ui() if self.finding: self.fill_finding() self.proof_selectors[self.proof_count] = ProofSelector( self.frame_proofs) super().__init__() def init_ui(self): self.frame = Frame(self.master) self.frame.pack(fill=X, padx=20, pady=20) self.frame_proofs = Labelframe(self.master, text='Proofs') self.frame_proofs.pack(side=TOP, fill=BOTH, expand=True, padx=20) self.frame_proofs_footer = Frame(self.frame_proofs) self.frame_proofs_footer.pack(side=BOTTOM, anchor=E) self.frame_footer = Frame(self.master) self.frame_footer.pack(side=BOTTOM) self.entry_name_text = StringVar() self.entry_description_text = StringVar() row = 1 first_column_width = 15 second_column_width = 40 lbl_name = Label(self.frame, text="Name", width=first_column_width) lbl_name.grid(row=row, column=0, padx=10) self.entry_name = Entry(self.frame, text=self.entry_name_text, width=second_column_width) self.entry_name.grid(row=row, column=1) row += 1 lbl_description = Label(self.frame, text="Description", width=first_column_width) lbl_description.grid(row=row, column=0, padx=10) self.entry_description = Entry(self.frame, text=self.entry_description_text, width=second_column_width) self.entry_description.grid(row=row, column=1) bttn_add_more_proof = Button(self.frame_proofs_footer, text="AddProof", command=self.add_more_proof) bttn_add_more_proof.pack(padx=5, pady=5) if self.finding: bttn_create_finding_text = "Update" else: bttn_create_finding_text = "Create" bttn_create_finding = Button(self.frame_footer, text=bttn_create_finding_text, command=self.commit_incidence) bttn_create_finding.pack(side=BOTTOM, padx=5, pady=5) def fill_finding(self): print(self.finding) self.entry_name_text.set(self.finding.name) self.entry_description_text.set(self.finding.description) for proof in self.finding.proofs: print(proof) self.add_more_proof(proof) def add_more_proof(self, proof=None): self.proof_count += 1 self.proof_selectors[self.proof_count] = ProofSelector( self.frame_proofs, proof) def commit_incidence(self): active_proofs = list() for proof_key in self.proof_selectors.keys(): if self.proof_selectors[proof_key].active and self.proof_selectors[ proof_key].proof: active_proofs.append(self.proof_selectors[proof_key].proof) print("this is the active proofs") print(active_proofs) if not self.finding: new_finding = Finding(name=self.entry_name.get(), description=self.entry_description.get(), proofs=active_proofs) project.findings.append(new_finding) else: self.finding.name = self.entry_name.get() self.finding.description = self.entry_description.get() self.finding.proofs.extend(active_proofs) print("finding already existing, updated?") db.commit_changes() global app app.update_findings() self.master.destroy()
class TestprogramPane(Labelframe): ''' classdocs ''' def __init__(self, master, tp=None, name='No TP Loaded'): ''' Constructor ''' Labelframe.__init__(self, master) self.name = name self.tp = tp self.tree = Treeview(self) self.tree.pack(fill=BOTH, expand=True) self.config(width=200, height=200, relief=RIDGE, text='Test Program', padding=10) self.tree.bind('<<TreeviewSelect>>', self.show_params) self.param_view = Labelframe(self) self.pins_view = Labelframe(self) self.params = {} self.pins = {} self.load() def load(self): self.tree.delete(*self.tree.get_children()) if (self.tp == None): self.tree.insert("", 'end', 'Default', text=self.name) else: self.populate(self.tp.testtree) def show_params(self, event): self.param_view.destroy() if (self.params.get(self.tree.selection()[0], None) != None): self.param_view = Labelframe(self) self.load_params(self.param_view, self.tree.selection()[0]) self.param_view.config(text='Test Parameters') self.param_view.pack(fill=BOTH, expand=True) def populate(self, tp): for element in tp.iter(): if (element.tag == 'TestRef'): self.tree.insert("", 'end', element.get("name"), text=element.get("name"), open=True) else: self.tree.insert(element.getparent().get("name"), 'end', element.get("name"), text=element.get("name"), open=True) if (element.tag == 'Test'): self.params[element.get("name")] = { 'delay': element.get('delay'), 'force': element.get('force'), 'lolim': element.get('lolim'), 'hilim': element.get('hilim'), 'pinref': element.get('pinref'), 'testtype': element.get('testtype') } def fetch_pins(self, tp, pinref): for element in tp.iter(): if (element.get("name") == pinref): self.pins[element.get("name")] = { 'pintype': element.get("pintype"), 'pins': [] } else: if (element.tag == 'Pin' and element.getparent().get("name") == pinref): self.pins[pinref].get('pins').append(element.get("name")) # def load_params(self, master, test): master.config(text=test) self.param_tree = Treeview(master) self.param_tree.pack(fill=BOTH, expand=True) self.param_tree.heading('#0', text='Parameter') self.param_tree.config(columns=('value')) self.param_tree.column('value', width=100) self.param_tree.heading('value', text='Value') self.param_tree.insert('', 'end', 'delay', text='DELAY', values=self.params.get(test).get('delay')) self.param_tree.insert('', 'end', 'force', text='FORCE', values=self.params.get(test).get('force')) self.param_tree.insert('', 'end', 'lolim', text='LOLIM', values=self.params.get(test).get('lolim')) self.param_tree.insert('', 'end', 'hilim', text='HILIM', values=self.params.get(test).get('hilim')) self.param_tree.insert('', 'end', 'pinref', text='PINREF', values=self.params.get(test).get('pinref')) self.param_tree.insert('', 'end', 'testtype', text='TESTTYPE', values=self.params.get(test).get('testtype')) if self.pins_view: self.pins_view.destroy() self.pins_view = Labelframe(self) self.param_tree.bind('<<TreeviewSelect>>', self.show_pins) def show_pins(self, event): self.pins_view.destroy() self.pins_view = Labelframe(self) pinref = self.param_tree.item(self.param_tree.selection()[0], "value")[0] self.fetch_pins(self.tp.pintree, pinref) if (self.pins.get(pinref, None) != None): self.pins_view = Labelframe(self) self.load_pins(self.pins_view, pinref) self.pins_view.config(text='Pin Parameters') self.pins_view.pack(fill=BOTH, expand=True) def load_pins(self, master, pinref): pins_tree = Treeview(master) pins_tree.pack(fill=BOTH, expand=True) pins_tree.heading('#0', text=(next(iter(self.pins)), ' PinType: ', self.pins.get(pinref).get('pintype'))) for p in self.pins.get(pinref).get('pins'): pins_tree.insert('', 'end', p, text=p)
config.set('exposureTime', parseInt(self.vExposureTime.get())) config.set('startingExposureTime', parseInt(self.vStartingExposureTime.get())) config.set('startingLayers', parseInt(self.vStartingLayers.get())) config.set('postPause', parseInt(self.vPostPause.get())) config.set('retractDistance', parseFloat(self.vRetractDistance.get())) config.set('retractSpeed', parseInt(self.vRetractSpeed.get())) config.set('returnSpeed', parseInt(self.vReturnSpeed.get())) config.set('prePause', parseInt(self.vPrePause.get())) handler.bind('next-layer', printNextLayer) handler.bind('start', printStarted) fileFrame = Labelframe(root, text="File") fileFrame.pack(expand=True, fill=X, anchor=N, side=TOP, padx = 10, pady = 10) filenameLabel = Label(fileFrame, text="No file selected") filenameLabel.pack(side=LEFT) selectFileButton = Button(fileFrame, text = 'Select File', command = load_file) selectFileButton.pack(side=RIGHT, padx=5) bodyFrame = Frame(root, width = 600, height=400) bodyFrame.pack(expand=True, fill=X, padx=10, anchor=W) view3DFrame = Frame(width=300, height=300) viewLayerFrame = LayerPreview(root, width=300, height=300) viewFrame = Notebook(bodyFrame) #viewFrame.add(view3DFrame, text="3D View")
def __init__(self, *args, **kwargs): Tk.__init__(self, *args, **kwargs) self.constraints = [] self.gf = None self.solver = None self.table = None # Left of the GUI self.frameLeft = Frame(self, borderwidth=0, relief=GROOVE) self.frameLeft.pack(side="left") frameTop = Frame(self.frameLeft, borderwidth=0, relief=GROOVE) frameTop.pack(side="top") frameModification = Labelframe(frameTop, borderwidth=0, relief=GROOVE,text="Modification de la Contrainte") Label(frameModification, text='Nom de la contrainte').grid(row=1, column=1, columnspan=2, padx=10, pady=5) Label(frameModification, text='Affichage constrainte').grid(row=2, column=1, columnspan=2, padx=10, pady=5) m = Button(frameModification, text='Modifier') m.grid(row=3, column=1, columnspan=2, padx=10, pady=5) m.bind('<Button-1>', self.buttonModifier) Button(frameModification, text='Supprimer').grid(row=7, column=1, columnspan=2, padx=10, pady=5) frameModification.pack(side="left", padx=5, pady=5) # Bottom of the GUI self.frameBottom = Frame(self.frameLeft, borderwidth=0, relief=GROOVE) self.frameBottom.pack(side="top") frameButtons = Frame(self.frameBottom, borderwidth=0, relief=GROOVE) solve = Button(frameButtons, text='Lancer la résolution') solve.pack(side="bottom", padx=5, pady=5) solve.bind('<Button-1>', self.solve) f = Button(frameButtons, text='Fonction objectif') f.bind('<Button-1>', self.buttonGF) f.pack(side="bottom", padx=5, pady=5) b = Button(frameButtons, text='Ajouter une Contrainte') b.pack(side="bottom", padx=5, pady=5) frameButtons.pack(side="left", padx=0, pady=0) frameConstraints = Labelframe(self.frameBottom, borderwidth=0, relief=GROOVE, text="Constraintes") self.listConstraints = Listbox(frameConstraints) self.listConstraints.pack() frameConstraints.pack(side="left", padx=5, pady=5) frameResults = Labelframe(self.frameLeft, borderwidth=0, relief=GROOVE, text="Résultat") labelResults = Label(frameResults, text="Résultats", bg="white") labelResults.pack() frameResults.pack(side="top", padx=5, pady=5) frameTable = LabelFrame(self.frameLeft, borderwidth=0, relief=GROOVE, text="Tableau") for ligne in range(5): for colonne in range(5): Label(frameTable, text='L%s-C%s' % (ligne, colonne), relief=GROOVE, borderwidth=5).grid(row=ligne, column=colonne) frameTable.pack(side="top", padx=5, pady=5) # Tkinter loop self.mainloop()