def __init__(self, master): super().__init__(master, relief='flat', borderwidth=40) self.business_logic = MLLogic() self.radio_btn_var = IntVar() self.master.title(self.business_logic.title) self.pack(fill=None, expand=False) Label(self, text="Select the type of appliances you want to buy").grid( row=1, columnspan=2, sticky='NW') for index, appliance_type in enumerate( self.business_logic.appliance_choices): rdo_btn = Radiobutton(self, text=appliance_type, variable=self.radio_btn_var, value=index, command=self.get_appliances) rdo_btn.select() rdo_btn.grid(row=index + 2, column=2) Label(self, text="Preferences").grid(row=7, columnspan=2, sticky='NW') self.item_lst_box = Listbox(self, selectmode='multiple') self.item_lst_box.delete(0, 'end') self.item_lst_box.grid(row=7, column=2) self.recommend_btn = Button(self, text='Recommend', command=self.on_recommend_btn_click) self.recommend_btn.grid(row=9, column=2, sticky='NW') self.recommend_btn.configure(state=DISABLED)
def __init__(self, root, switch_mode): self.choosing_frame = Frame \ (root, height=60, width=100, bg='lightblue') self.var = IntVar() rbutton1 = Radiobutton(self.choosing_frame, text='PvE', variable=self.var, value=1, bg='lightblue') rbutton2 = Radiobutton(self.choosing_frame, text='PvP', variable=self.var, value=2, bg='lightblue') rbutton3 = Radiobutton(self.choosing_frame, text='EvE', variable=self.var, value=3, bg='lightblue') button = Button(self.choosing_frame, text='Ok', bg='lightblue') rbutton1.select() rbutton1.pack(side='left') rbutton2.pack(side='left') rbutton3.pack(side='left') button.pack(side='left') button.bind('<1>', switch_mode)
def radio_buttons(root, elements): """Creates and positions radio buttons for task selection.""" button_var = IntVar() path_button = Radiobutton(root, variable=button_var, value=PATH, background='gray') textbox_button = Radiobutton(root, variable=button_var, value=TEXT, background='gray') path_button.grid(row=0, sticky=W) textbox_button.grid(row=2, sticky=W) path_button.select() elements["path_button"] = path_button elements["textbox_button"] = textbox_button elements["button_var"] = button_var return elements
def __init__(self, root, func): self.choosing_frame = Frame \ (root, height=60, width=100, bg='lightblue') self.var = IntVar() rbutton1 = Radiobutton(self.choosing_frame, text='Easy', variable=self.var, value=1, bg='lightblue') rbutton2 = Radiobutton(self.choosing_frame, text='Hard', variable=self.var, value=2, bg='lightblue') rbutton3 = Radiobutton(self.choosing_frame, text='Random', variable=self.var, value=3, bg='lightblue') button1 = Button(self.choosing_frame, text='Ok', bg='lightblue') rbutton1.select() rbutton1.pack(side='left') rbutton2.pack(side='left') rbutton3.pack(side='left') button1.pack(side='left') button1.bind('<1>', lambda e: func())
def __init__(self, master): """:type master: Tk""" # super constructeur Frame.__init__(self, master) # attributs self.playing = False self.firstClick = True self.difficulty = Difficulty.EASY self.board = [] self.bombsPos = [] self.flagsPos = [] self.casesState = [] # False normal, True appuyé self.nbBombs = 0 self.boxSize = 25 # constante self.nbcols = 0 self.nbrows = 0 # images et sauvegardes des refs (necessaire pour avoir l'affichage des images correctement) self.imgNewGameButton = PhotoImage(file="img/smiley_normal.png") self.imgDef = PhotoImage(file="img/default.png") self.imgBomb = PhotoImage(file="img/mine.png") self.imgFlag = PhotoImage(file="img/flag.png") self.imgNumbers = [PhotoImage(file="img/%d.png" % i) for i in range(7)] # composants self.diffChoice = Frame(self) easy = Radiobutton(self.diffChoice, variable=0, text="débutant", value=0, command=lambda: self.changeDifficulty(Difficulty.EASY)) medium = Radiobutton(self.diffChoice, variable=0, text="intermediaire", value=1, command=lambda: self.changeDifficulty(Difficulty.NORMAL)) hard = Radiobutton(self.diffChoice, variable=0, text="expert", value=2, command=lambda: self.changeDifficulty(Difficulty.HARD)) self.nbBombDisplayer = Label(self, text=0) self.newGameButton = Button(self, image=self.imgNewGameButton, command=self.reinitialisation) self.time = Label(self, text="00:00") self.cnv = Canvas(self) # placement self.diffChoice.grid(row=0, column=0) easy.pack(anchor="w") medium.pack(anchor="w") hard.pack(anchor="w") self.nbBombDisplayer.grid(row=0, column=1) self.newGameButton.grid(row=0, column=2) self.time.grid(row=0, column=3) self.cnv.grid(row=1, column=0, columnspan=4) # events self.cnv.bind("<Button-1>", self.handlerLeftClick) self.cnv.bind("<Button-3>", self.handlerRightClick) # réglages self.reinitialisation() easy.select()
def create_other_buttons(self): "Fill frame with buttons tied to other options." frame = self.make_frame("Direction")[0] var = self.engine.backvar others = [(1, 'Up'), (0, 'Down')] for val, label in others: btn = Radiobutton(frame, anchor="w", variable=var, value=val, text=label) btn.pack(side="left", fill="both") #print(var.get(), val, label) if var.get() == val: btn.select() return frame, others # for test
def _build(self): self._input = Frame(master=self, width=450, height=250) option1 = Radiobutton(master=self._input, text=lang['gen_true'], variable=self._variable, value=1) option1.place(in_=self._input, x=10, y=10) option2 = Radiobutton(master=self._input, text=lang['gen_false'], variable=self._variable, value=0) option2.place(in_=self._input, x=10, y=40) if self._value is True: option1.select() pass else: option2.select() pass super()._build() pass
def create_other_buttons(self): """Return (frame, others) for testing. Others is a list of value, label pairs. A gridded frame from make_frame is filled with radio buttons. """ frame = self.make_frame("Direction")[0] var = self.engine.backvar others = [(1, "Up"), (0, "Down")] for val, label in others: btn = Radiobutton(frame, anchor="w", variable=var, value=val, text=label) btn.pack(side="left", fill="both") if var.get() == val: btn.select() return frame, others
def create_other_buttons(self): "Fill frame with buttons tied to other options." f = self.make_frame("Direction") btn = Radiobutton(f, anchor="w", variable=self.engine.backvar, value=1, text="Up") btn.pack(side="left", fill="both") if self.engine.isback(): btn.select() btn = Radiobutton(f, anchor="w", variable=self.engine.backvar, value=0, text="Down") btn.pack(side="left", fill="both") if not self.engine.isback(): btn.select()
def create_other_buttons(self): '''Return (frame, others) for testing. Others is a list of value, label pairs. A gridded frame from make_frame is filled with radio buttons. ''' frame = self.make_frame("Direction")[0] var = self.engine.backvar others = [(1, 'Up'), (0, 'Down')] for val, label in others: btn = Radiobutton(frame, anchor="w", variable=var, value=val, text=label) btn.pack(side="left", fill="both") if var.get() == val: btn.select() return frame, others
def radio_buttons(root, elements): """Creates and positions radio buttons for task selection.""" button_var = IntVar() path_button = Radiobutton(root, variable = button_var, value = PATH, background = 'gray') textbox_button = Radiobutton(root, variable = button_var, value = TEXT, background = 'gray') path_button.grid(row = 0, sticky = W) textbox_button.grid(row = 2, sticky = W) path_button.select() elements["path_button"] = path_button elements["textbox_button"] = textbox_button elements["button_var"] = button_var return elements
def __init__(self, tkobj, *args, **kwargs): super().__init__(tkobj, *args, **kwargs) #radiobutton engl/dt #self.EntrySpr = ttk.Frame(tkobj) #self.EntrySpr.grid(column=0, row=20, sticky=N) #self.lblSprache = Label(self.EntrySpr, text='Sprachausgabe PDF', font=13) #self.lblSprache.grid(column=0, row=0, pady=5, padx=5, sticky=NW) self.LangVar = IntVar() rad1 = Radiobutton(self, text='deutsch', value=0, variable=self.LangVar) rad2 = Radiobutton(self, text='englisch', value=1, variable=self.LangVar) rad1.grid(column=1, row=0, sticky=W) rad2.grid(column=2, row=0, sticky=W) rad1.select() rad1.invoke() # triggered to set default language
def __init__(self, master, labelNode, possible_labels): self.master = master self.group = master.frame_group self.possible_labels = possible_labels self.frame = Frame(master, width=600, height=400, padx=20, pady=30) self.frame.pack() self.selected = StringVar() self.labelNode = labelNode infoText = Message(self.frame, width=400, text=labelNode.node_info).pack(pady=50) for label in possible_labels: b = Radiobutton(self.frame, text=label, variable=self.selected, value=label, height=1, width=15, indicatoron=0, command=lambda: self.set_label()) b.pack(side=TOP, pady=5) if label == labelNode.label_out: b.select() self.back = Button(self.frame, text="<", command=lambda: self.group.back()).pack(side=LEFT, pady=50) self.next = Button(self.frame, text=">", command=lambda: self.group.next()).pack(side=RIGHT, pady=50)
class Ventana(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.canvas = None self.input_tam = None self.barra = None self.barra_normal = None self.barra_soldado = None self.barra_reina = None self.label_probabilidades = None self.tiempo_vida = 100 self.cuadros = None self.matriz = None self.tam = 100 self.tam_cuadro = 10 self.hormigas = list() self.pausa = True self.distribucion = .05 self.mi_var = IntVar() self.mi_var.set(1) self.radio1 = None self.radio2 = None self.radio3 = None self.tiempo = 0 self.contador = [0, 0, 0] self.nom_archivo = "{}.csv".format(self.obtener_hora()) self.archivo = None self.probabilidades = [.9, .08, .02] def init_ui(self): self.parent.title("Hormiga de Lagnton") self.pack(fill=tk.BOTH, expand=1) self.canvas = Canvas(self, relief='raised', width=1000, height=1000) scroll = Scrollbar(self, orient=tk.VERTICAL) scroll.pack(side=tk.RIGHT, fill=tk.Y) scroll.config(command=self.canvas.yview) self.canvas.config(yscrollcommand=scroll.set) self.canvas.pack(side=tk.LEFT) Label(self, text="Tamaño:", font=(20, )).pack(side=tk.TOP) self.input_tam = Entry(self, fg="black", bg="white") self.input_tam.insert(10, "100") self.input_tam.pack(side=tk.TOP) Label(self, text="Porcentaje de hormigas", font=(20, )).pack(side=tk.TOP) self.barra = Scale(self, from_=0, to=100, orient=tk.HORIZONTAL, tickinterval=50) self.barra.set(5) self.barra.pack(side=tk.TOP) Label(self, text="Tipo de hormiga:", font=(20, )).pack(side=tk.TOP) self.radio1 = Radiobutton(self, text="Obrera", variable=self.mi_var, value=1, command=self.seleccion, indicatoron=False, selectcolor="white", font=(20, ), fg="black") self.radio2 = Radiobutton(self, text="Soldado", variable=self.mi_var, value=2, command=self.seleccion, indicatoron=False, selectcolor="orange", font=(20, ), fg="black") self.radio3 = Radiobutton(self, text="Reina", variable=self.mi_var, value=3, command=self.seleccion, indicatoron=False, selectcolor="purple", font=(20, ), fg="black") self.radio1.pack(side=tk.TOP) self.radio2.pack(side=tk.TOP) self.radio3.pack(side=tk.TOP) self.radio1.select() self.radio2.deselect() self.radio3.deselect() self.label_probabilidades = Label(self, text="Suma de probailidades: 100%", font=(20, )) self.label_probabilidades.pack(side=tk.TOP) Label(self, text="Probabilidad de hormigas normales:", font=(20, )).pack(side=tk.TOP) valor1 = StringVar(self) valor1.set("90") self.barra_normal = Spinbox(self, from_=0, to=100, command=self.mover_spinner, textvariable=valor1) self.barra_normal.pack(side=tk.TOP) Label(self, text="Probabilidad de hormigas soldado:", font=(20, )).pack(side=tk.TOP) valor2 = StringVar(self) valor2.set("8") self.barra_soldado = Spinbox(self, from_=0, to=100, command=self.mover_spinner, textvariable=valor2) self.barra_soldado.pack(side=tk.TOP) Label(self, text="Probabilidad de hormigas reina:", font=(20, )).pack(side=tk.TOP) valor3 = StringVar(self) valor3.set("2") self.barra_reina = Spinbox(self, from_=0, to=100, command=self.mover_spinner, textvariable=valor3) self.barra_reina.pack(side=tk.TOP) btn_iniciar = Button(self, text="Iniciar/Reiniciar", command=self.iniciar, font=(20, )) btn_iniciar.pack(side=tk.TOP) btn_pausa = Button(self, text="Reanudar/Pausa", command=self.empezar_detener, font=(20, )) btn_pausa.pack(side=tk.TOP) Label(self, text="Relación de colores y \n posicion de las hormiga:", font=(20, )).pack(side=tk.TOP) Label(self, text="Abajo", bg="blue", font=(20, )).pack(side=tk.TOP) Label(self, text="Arriba", bg="red", font=(20, )).pack(side=tk.TOP) Label(self, text="Izquierda", bg="green", font=(20, )).pack(side=tk.TOP) Label(self, text="Derecha", bg="yellow", fg="black", font=(20, )).pack(side=tk.TOP) def mover_spinner(self): print("moviendo normal") aux1 = int(self.barra_normal.get()) aux2 = int(self.barra_soldado.get()) aux3 = int(self.barra_reina.get()) self.probabilidades[0] = aux1 / 100 self.probabilidades[1] = aux2 / 100 self.probabilidades[2] = aux3 / 100 valor = aux1 + aux2 + aux3 texto = "Suma de probabilidades {} %".format(valor) self.label_probabilidades.configure(text=texto) def iniciar(self): print("iniciar") self.nom_archivo = "{}.csv".format(self.obtener_hora()) self.archivo = open(self.nom_archivo, "w") self.archivo.close() self.contador[:] = [0, 0, 0] self.tiempo = 0 self.hormigas[:] = [] self.canvas.delete('all') self.update_idletasks() self.tam = int(self.input_tam.get()) self.tam_cuadro = 0 while self.tam_cuadro * self.tam < 1000: self.tam_cuadro += 1 if self.tam_cuadro * self.tam > 1000: self.tam_cuadro -= 1 self.distribucion = self.barra.get() / 100 self.probabilidades[0] = int(self.barra_normal.get()) / 100 self.probabilidades[1] = int(self.barra_soldado.get()) / 100 self.probabilidades[2] = int(self.barra_reina.get()) / 100 self.pausa = True self.cuadros = np.zeros(shape=(self.tam, self.tam), dtype=int) self.matriz = np.random.choice( [1, 0], size=(self.tam, self.tam), p=[self.distribucion, 1 - self.distribucion]) self.redibujar() def seleccion(self): print(str(self.mi_var.get())) def crear_hormiga(self, j, i): tipo = np.random.choice([1, 2, 3], p=self.probabilidades) if tipo == 1: hormiga = Hormiga(j, i, self.tam) self.contador[0] += 1 elif tipo == 2: hormiga = Soldado(j, i, self.tam) self.contador[1] += 1 else: hormiga = Reina(j, i, self.tam) self.contador[2] += 1 hormiga.orientacion = np.random.choice(['N', 'S', 'E', 'O']) return hormiga @staticmethod def obtener_hora(): return datetime.datetime.fromtimestamp( time.time()).strftime('%Y-%m-%d_%H:%M:%S') def redibujar(self): print("redibujar") for i in range(self.tam): for j in range(self.tam): if self.matriz[i, j] == 1: self.matriz[i, j] = 0 hormiga = self.crear_hormiga(j, i) self.cuadros[i, j] = self.canvas.create_rectangle( 0 + (j * self.tam_cuadro), 0 + (i * self.tam_cuadro), self.tam_cuadro + (j * self.tam_cuadro), self.tam_cuadro + (i * self.tam_cuadro), fill=hormiga.color, width=0, tag="btncuadrito") self.hormigas.append(hormiga) else: self.cuadros[i, j] = self.canvas.create_rectangle( 0 + (j * self.tam_cuadro), 0 + (i * self.tam_cuadro), self.tam_cuadro + (j * self.tam_cuadro), self.tam_cuadro + (i * self.tam_cuadro), fill="black", width=0, tag="btncuadrito") self.canvas.tag_bind("btncuadrito", "<Button-1>", self.pulsar_cuadrito) self.canvas.tag_bind("btncuadrito", "<Button-3>", self.borrar_cuadrito) self.update_idletasks() print(self.contador) def borrar_cuadrito(self, event): print("borrar_cuadrito") item = self.canvas.find_closest(event.x, event.y)[0] y, x = np.where(self.cuadros == item) contador = 0 for hormiga in self.hormigas: if hormiga.x == x and hormiga.y == y: self.contador[hormiga.tipo - 1] -= 1 if self.matriz[hormiga.y, hormiga.x] == 1: self.canvas.itemconfig(item, fill="white") else: self.canvas.itemconfig(item, fill="black") break contador += 1 if contador < len(self.hormigas): self.hormigas.pop(contador) def pulsar_cuadrito(self, event): print("pulsar_cuadrito") item = self.canvas.find_closest(event.x, event.y)[0] y, x = np.where(self.cuadros == item) crear = True for hormiga in self.hormigas: if hormiga.x == x and hormiga.y == y: hormiga.cambiar() crear = False self.canvas.itemconfig(item, fill=colores_dict[hormiga.orientacion]) break if crear: if self.mi_var.get() == 1: hormiga = Hormiga(x[0], y[0], self.tam) self.contador[0] += 1 elif self.mi_var.get() == 2: hormiga = Soldado(x[0], y[0], self.tam) self.contador[1] += 1 else: hormiga = Reina(x[0], y[0], self.tam) self.contador[2] += 1 self.hormigas.append(hormiga) self.canvas.itemconfig(item, fill=colores_dict[hormiga.orientacion]) def animacion(self): if not self.pausa: archivo = open(self.nom_archivo, "a") archivo.write("{},{},{},{}\n".format(self.tiempo, self.contador[0], self.contador[1], self.contador[2])) archivo.close() reinas = list() soldados = list() cont = 0 print("primer for") for hormiga in self.hormigas: if hormiga.tipo == tipos_dict["reina"]: reinas.append(cont) elif hormiga.tipo == tipos_dict["soldado"]: soldados.append(cont) cont += 1 print("Segundo for") for i in reinas: for j in soldados: if self.hormigas[i].x == self.hormigas[ j].x and self.hormigas[i].y == self.hormigas[j].y: self.hormigas.append( self.crear_hormiga(self.hormigas[i].x, self.hormigas[i].y)) conjunto = set() print("Tercer for") for hormiga in self.hormigas: if hormiga.vida == self.tiempo_vida: self.contador[hormiga.tipo - 1] -= 1 self.hormigas.remove(hormiga) continue if self.matriz[hormiga.y, hormiga.x] == 0: if (hormiga.y, hormiga.x) not in conjunto: self.matriz[hormiga.y, hormiga.x] = 1 conjunto.add((hormiga.y, hormiga.x)) self.canvas.itemconfig(self.cuadros[hormiga.y, hormiga.x], fill=hormiga.color) hormiga.mover(0) else: if (hormiga.y, hormiga.x) not in conjunto: self.matriz[hormiga.y, hormiga.x] = 0 conjunto.add((hormiga.y, hormiga.x)) self.canvas.itemconfig(self.cuadros[hormiga.y, hormiga.x], fill="black") hormiga.mover(1) self.canvas.itemconfig(self.cuadros[hormiga.y, hormiga.x], fill=colores_dict[hormiga.orientacion]) self.update_idletasks() self.after(100, self.animacion) self.tiempo += 1 def empezar_detener(self): print("empezar_detener") self.pausa = not self.pausa self.animacion()
class fen_info(Tk): """ Fenêtre permettant de saisir les informations sur les joueurs """ def __init__(self): super().__init__() # Initialisation des pions à la valeur initiale. self.pion1 = "X" self.pion2 = "O" # Titre de la fenêtre self.title("Ultimate TIC-TAC-TOE") # Pour changer taille minimum de fenêtre et taille centrer, # changer variable self.width_fen, self.height_fen. self.width_fen, self.height_fen = 430, 500 # Taille minimum de la fenêtre self.minsize(self.width_fen, self.height_fen) # Centrer la fenêtre. centreFen(self, self.width_fen, self.height_fen) # Création d'un canvas avec l'image "logo.gif" canvas = Canvas(self, width=280, height=100) self.img = PhotoImage(file="logo.gif") canvas.create_image(280, 100, anchor=SE, image=self.img) canvas.grid(row=0, columnspan=5, pady=10) # Libellé - Nouvelle Partie Label(self, text="Nouvelle partie", font=("Arial", 16), fg="#0080FF", justify=CENTER).grid(row=1, columnspan=5, padx=20, pady=5) separateur(20).grid(row=10, columnspan=5) # Sélection du type de partie avec bouton radio self.choixJoueur = IntVar() r1 = Radiobutton(self, text="Jouer avec l'ordinateur", variable=self.choixJoueur, value=1, command=self.define_choix) r1.select() r1.grid(row=20, column=0) r2 = Radiobutton(self, text="Jouer avec un autre joueur", variable=self.choixJoueur, value=2, command=self.define_choix) r2.grid(row=20, column=1) # Saisie du nom du joueur 1. f_j1 = Frame(self, borderwidth=1, padx=5, pady=5, relief=SUNKEN) f_j1.grid(row=30, columnspan=5, padx=5, pady=5) Label(f_j1, text="Nom joueur 1:").grid(row=1, column=0, sticky=E, padx=5, pady=5) self.nom_joueur1 = Entry(f_j1) self.nom_joueur1.grid(row=1, column=1) # Sélection du pion joueur 1. Le pion restant est automatiquement attribué au joueur 2. Label(f_j1, text="Choix de pion:").grid(row=1, column=2, padx=5) self.sel_pion = IntVar() p1 = Radiobutton(f_j1, indicatoron=0, width=5, text="X", variable=self.sel_pion, value=1, command=self.choix_pion) p1.grid(row=1, column=3, padx=2) p1.select() Radiobutton(f_j1, indicatoron=0, width=5, text="O", variable=self.sel_pion, value=2, command=self.choix_pion).grid(row=1, column=4, padx=2) # Saisie du nom du joueur 2. Apparaît seulement si on sélection 2 joueurs. Voir define_choix self.f_j2 = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) Label(self.f_j2, text="Nom joueur 2").grid(row=1, column=0, sticky=E, padx=5, pady=5) self.nom_joueur2 = Entry(self.f_j2, state="disabled") self.nom_joueur2.grid(row=1, column=1) self.label_pion2 = Label(self.f_j2, text="Pion Joueur 2 = O") self.label_pion2.grid(row=1, column=2, padx=5) # Information sur l'ordinateur. Disparaît si on choisi 2 joueurs. self.f_ordi = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) self.f_ordi.grid(row=40, columnspan=5, padx=5, pady=5) Label(self.f_ordi, text="Ordinateur = Colosse", font=("Arial", 12), fg="#0080FF")\ .grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.pion_ordi = Label(self.f_ordi, text="| Pion de l'ordinateur = O", font=("Arial", 12), fg="#0080FF") self.pion_ordi.grid(row=1, column=2) separateur(20).grid(row=50, columnspan=5) # Sélection de la force de l'ordinateur self.choixForce = IntVar() self.f1 = Radiobutton(self, indicatoron=0, width=20, padx=20, text="Facile", variable=self.choixForce, value=1, command=self.define_choix) self.f1.select() self.f1.grid(row=60, columnspan=5) self.f2 = Radiobutton(self, indicatoron=0, width=20, padx=20, text="Moyen", variable=self.choixForce, value=2, command=self.define_choix) self.f2.grid(row=61, columnspan=5) self.f3 = Radiobutton(self, indicatoron=0, width=20, padx=20, text="Difficile", variable=self.choixForce, value=3, command=self.define_choix) self.f3.grid(row=62, columnspan=5) separateur(40).grid(row=70, column=0) #Button pour démarrer la partie self.bt_start = Button(text="Démarrer", font=("Arial", 12), fg="green", command=self.demarrer_jeu) self.bt_start.grid(row=80, columnspan=5) def define_choix(self): """ Fonction qui active ou désactive le nom du joueur 2 selon si on joue contre l'ordinateur ou contre un autre joueur """ if self.choixJoueur.get() == 1: self.nom_joueur2.delete(0, END) self.nom_joueur2["state"] = "disabled" self.f1["state"] = "normal" self.f2["state"] = "normal" self.f3["state"] = "normal" self.f_j2.grid_remove() self.f_ordi.grid(row=40, columnspan=5, padx=5, pady=5) elif self.choixJoueur.get() == 2: self.nom_joueur2["state"] = "normal" self.f1["state"] = "disabled" self.f2["state"] = "disabled" self.f3["state"] = "disabled" self.f_j2.grid(row=40, columnspan=5, padx=5, pady=5) self.f_ordi.grid_remove() def choix_pion(self): # Définition des pions if self.sel_pion.get() == 1: self.pion1 = "X" self.pion2 = "O" self.label_pion2["text"] = "Pion Joueur 2 = {}".format(self.pion2) self.pion_ordi["text"] = "| Pion de l'ordinateur = {}".format( self.pion2) else: self.pion1 = "O" self.pion2 = "X" self.label_pion2["text"] = "Pion Joueur 2 = {}".format(self.pion2) self.pion_ordi["text"] = "| Pion de l'ordinateur = {}".format( self.pion2) def demarrer_jeu(self): """ Démarrer la partie avec les informations saisie. Afficher le plateau """ if self.choixJoueur.get() == 1: type2 = "Ordinateur" if self.nom_joueur1.get() != '': j1 = self.nom_joueur1.get() j2 = "Colosse" else: j1 = "Joueur 1" j2 = "Colosse" elif self.choixJoueur.get() == 2: type2 = "Personne" if self.nom_joueur1.get() != '' and self.nom_joueur2.get() != '': j1 = self.nom_joueur1.get() j2 = self.nom_joueur2.get() elif self.nom_joueur1.get() == '': j1 = "Joueur 1" if self.nom_joueur2.get() == '': j2 = "Joueur 2" else: j2 = self.nom_joueur2.get() else: j1 = self.nom_joueur1.get() if self.nom_joueur2.get() == '': j2 = "Joueur 2" else: j2 = self.nom_joueur2.get() p1 = self.pion1 p2 = self.pion2 force = self.choixForce.get() self.destroy() ma_fenetre = Fenetre(j1, j2, type2, p1, p2, force) ma_fenetre.mainloop()
def __init__(self): super().__init__() # Initialisation des pions à la valeur initiale. self.pion1 = "X" self.pion2 = "O" # Titre de la fenêtre self.title("Ultimate TIC-TAC-TOE") # Pour changer taille minimum de fenêtre et taille centrer, # changer variable self.width_fen, self.height_fen. self.width_fen, self.height_fen = 430, 500 # Taille minimum de la fenêtre self.minsize(self.width_fen, self.height_fen) # Centrer la fenêtre. centreFen(self, self.width_fen, self.height_fen) # Création d'un canvas avec l'image "logo.gif" canvas = Canvas(self, width=280, height=100) self.img = PhotoImage(file="logo.gif") canvas.create_image(280, 100, anchor=SE, image=self.img) canvas.grid(row=0, columnspan=5, pady=10) # Libellé - Nouvelle Partie Label(self, text="Nouvelle partie", font=("Arial", 16), fg="#0080FF", justify=CENTER).grid(row=1, columnspan=5, padx=20, pady=5) separateur(20).grid(row=10, columnspan=5) # Sélection du type de partie avec bouton radio self.choixJoueur = IntVar() r1 = Radiobutton(self, text="Jouer avec l'ordinateur", variable=self.choixJoueur, value=1, command=self.define_choix) r1.select() r1.grid(row=20, column=0) r2 = Radiobutton(self, text="Jouer avec un autre joueur", variable=self.choixJoueur, value=2, command=self.define_choix) r2.grid(row=20, column=1) # Saisie du nom du joueur 1. f_j1 = Frame(self, borderwidth=1, padx=5, pady=5, relief=SUNKEN) f_j1.grid(row=30, columnspan=5, padx=5, pady=5) Label(f_j1, text="Nom joueur 1:").grid(row=1, column=0, sticky=E, padx=5, pady=5) self.nom_joueur1 = Entry(f_j1) self.nom_joueur1.grid(row=1, column=1) # Sélection du pion joueur 1. Le pion restant est automatiquement attribué au joueur 2. Label(f_j1, text="Choix de pion:").grid(row=1, column=2, padx=5) self.sel_pion = IntVar() p1 = Radiobutton(f_j1, indicatoron=0, width=5, text="X", variable=self.sel_pion, value=1, command=self.choix_pion) p1.grid(row=1, column=3, padx=2) p1.select() Radiobutton(f_j1, indicatoron=0, width=5, text="O", variable=self.sel_pion, value=2, command=self.choix_pion).grid(row=1, column=4, padx=2) # Saisie du nom du joueur 2. Apparaît seulement si on sélection 2 joueurs. Voir define_choix self.f_j2 = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) Label(self.f_j2, text="Nom joueur 2").grid(row=1, column=0, sticky=E, padx=5, pady=5) self.nom_joueur2 = Entry(self.f_j2, state="disabled") self.nom_joueur2.grid(row=1, column=1) self.label_pion2 = Label(self.f_j2, text="Pion Joueur 2 = O") self.label_pion2.grid(row=1, column=2, padx=5) # Information sur l'ordinateur. Disparaît si on choisi 2 joueurs. self.f_ordi = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) self.f_ordi.grid(row=40, columnspan=5, padx=5, pady=5) Label(self.f_ordi, text="Ordinateur = Colosse", font=("Arial", 12), fg="#0080FF")\ .grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.pion_ordi = Label(self.f_ordi, text="| Pion de l'ordinateur = O", font=("Arial", 12), fg="#0080FF") self.pion_ordi.grid(row=1, column=2) separateur(20).grid(row=50, columnspan=5) # Sélection de la force de l'ordinateur self.choixForce = IntVar() self.f1 = Radiobutton(self, indicatoron=0, width=20, padx=20, text="Facile", variable=self.choixForce, value=1, command=self.define_choix) self.f1.select() self.f1.grid(row=60, columnspan=5) self.f2 = Radiobutton(self, indicatoron=0, width=20, padx=20, text="Moyen", variable=self.choixForce, value=2, command=self.define_choix) self.f2.grid(row=61, columnspan=5) self.f3 = Radiobutton(self, indicatoron=0, width=20, padx=20, text="Difficile", variable=self.choixForce, value=3, command=self.define_choix) self.f3.grid(row=62, columnspan=5) separateur(40).grid(row=70, column=0) #Button pour démarrer la partie self.bt_start = Button(text="Démarrer", font=("Arial", 12), fg="green", command=self.demarrer_jeu) self.bt_start.grid(row=80, columnspan=5)
def __queryDB(self): y = datetime.now().year m = datetime.now().month d = datetime.now().day today = "{:0>2d}".format(d) + '/' + "{:0>2d}".format(m) + '/' + str(y) self.query_dict = { 'cgi': None, 'tec': '234', 'date': { 'first': '01/01/2013', 'last': today, 'd_all': False }, 'pol': { 'cp': None, 'loc': None, 'con': None, 'dis': None }, 'fis': { 'form': None, 'lat': None, 'lon': None, 'lat2': None, 'lon2': None, 'radius': None }, 'kmz': { 'ico_or_pol': None, 'n': 338, 'scale': 1, 'color': "orange", 'radius': None, 'alt': 35, 'amp': 110 } } # MAIN WINDOW ######################################################### # --- Theme configuration --------------------------------------------- bg = "gray25" fg = "dark orange" font = ("Helvetica", "10", "bold") self.style.theme_use("vladimir") tfs = ttk.Style() tfs.configure("TFrame", background="#404040") # --- Toplevel -------------------------------------------------------- tl = Toplevel(self.master) #tl.geometry("410x420") tl.geometry("530x420") tl.configure(borderwidth=5, bg=bg) tl.title("Pesquisar Base de Dados") icons = os.getcwd() + os.sep + "icons" + os.sep # path to icons icon = icons + "maps.ico" tl.iconbitmap(icon) tl.resizable(width=FALSE, height=FALSE) # --- Base Frame ------------------------------------------------------ f1 = Frame(tl, bg=bg) f1.pack_propagate(0) # don't shrink f1.pack(side=BOTTOM, padx=0, pady=0, expand=TRUE, fill=BOTH) # --- Notebook -------------------------------------------------------- nf = fontTK.Font(root=tl, family='helvetica', size='12', weight='bold') s = ttk.Style() s.configure('.', font=nf) n = ttk.Notebook(f1) n.pack(side=TOP) # --- Messages / Log Frame -------------------------------------------- self.msg = StringVar() self.msg.set("Log...\nMensagens do programa...") l1 = Message(f1, bg=fg, bd=5, fg=bg, textvariable=self.msg, font=("Helvetica", "10", "bold italic"), width=500) l1.pack_propagate(0) l1.pack(expand=TRUE, fill=BOTH, pady=5) # --- Pesquisar Button ------------------------------------------------ b = Button(f1, text="Pesquisar", command=self.__queryDB_button, width=10, bg="forest green", fg="white smoke", font=("Helvetica", "8", "bold")) b.pack(side=BOTTOM, anchor=E) # CGI TAB ############################################################# # --- Main Frame ------------------------------------------------------ tab_cgi = ttk.Frame(n) n.add(tab_cgi, text='CGI') # --- inside Frame ---------------------------------------------------- f_cgi = ttk.Frame(tab_cgi) f_cgi.pack_propagate(0) f_cgi.pack(padx=16, pady=33) # --- Labels ---------------------------------------------------------- cgi_l1 = Label(f_cgi, text=None, bg=bg) cgi_l2 = Label(f_cgi, text="Operadora", bg=bg, fg=fg, width=7, justify=RIGHT) cgi_l3 = Label(f_cgi, text="LAC", bg=bg, fg=fg, width=7, justify=RIGHT) cgi_l4 = Label(f_cgi, text="CID", bg=bg, fg=fg, width=7, justify=RIGHT) cgi_l5 = Label(f_cgi, text="CGI", bg=bg, fg=fg) cgi_l1.grid(row=0, pady=0) cgi_l2.grid(row=1, column=0, padx=5, pady=5) cgi_l3.grid(row=1, column=2, pady=5) cgi_l4.grid(row=1, column=4, pady=5) cgi_l5.grid(row=4, pady=5, padx=5) # --- Entries --------------------------------------------------------- self.cgi_e1 = Entry(f_cgi, width=2) self.cgi_e2 = Entry(f_cgi, width=4) self.cgi_e3 = Entry(f_cgi, width=6) self.cgi_e4 = Entry(f_cgi, width=25) self.cgi_e1.grid(row=1, column=1, pady=5) self.cgi_e2.grid(row=1, column=3, pady=5) self.cgi_e3.grid(row=1, column=5, pady=5) self.cgi_e4.grid(row=4, column=1, columnspan=4, pady=5) # --- Separator ------------------------------------------------------- cgi_s = ttk.Separator(f_cgi, orient=HORIZONTAL) cgi_s.grid(row=3, column=0, columnspan=6, sticky=EW, padx=5, pady=5) # TECNOLOGIA TAB ###################################################### # --- Main Frame ------------------------------------------------------ tab_tec = ttk.Frame(n) n.add(tab_tec, text='Tecnologia') # --- inside Frame ---------------------------------------------------- f_tec = ttk.Frame(tab_tec) f_tec.pack_propagate(0) f_tec.pack(padx=40, pady=45) # --- variables ------------------------------------------------------- self.tec_2g = IntVar() self.tec_3g = IntVar() self.tec_4g = IntVar() # --- Checkbuttons ---------------------------------------------------- tec_cb1 = Checkbutton(f_tec, text="2G", onvalue=2, variable=self.tec_2g, bg=bg, fg=fg) tec_cb2 = Checkbutton(f_tec, text="3G", onvalue=3, variable=self.tec_3g, bg=bg, fg=fg) tec_cb3 = Checkbutton(f_tec, text="4G", onvalue=4, variable=self.tec_4g, bg=bg, fg=fg) tec_cb1.grid(row=1, pady=5, padx=5) tec_cb2.grid(row=2, pady=5, padx=5) tec_cb3.grid(row=3, pady=5, padx=5) # --- Labels ---------------------------------------------------------- tec_l1 = Label(f_tec, text="(GSM)", bg=bg, fg=fg) tec_l2 = Label(f_tec, text="(WCDMA, HSPA, UMTS)", bg=bg, fg=fg) tec_l3 = Label(f_tec, text="(WIMAX, LTE)", bg=bg, fg=fg) tec_l1.grid(row=1, column=1, pady=5, sticky=W) tec_l2.grid(row=2, column=1, pady=5) tec_l3.grid(row=3, column=1, pady=5, sticky=W) # DATA TAB ############################################################ # --- Main Frame ------------------------------------------------------ tab_dat = ttk.Frame(n) n.add(tab_dat, text='Data') # --- inside Frame ---------------------------------------------------- f_dat = ttk.Frame(tab_dat) f_dat.pack_propagate(0) f_dat.pack(padx=0, pady=55) # --- variables ------------------------------------------------------- days = ["{:0>2d}".format(n + 1) for n in range(31)] months = [ 'JAN', 'FEV', 'MAR', 'ABR', 'MAI', 'JUN', 'JUL', 'AGO', 'SET', 'OUT', 'NOV', 'DEC' ] years = [n + 1 for n in range(2012, datetime.now().year)] self.date_all = IntVar() # --- Labels ---------------------------------------------------------- dat_l1 = Label(f_dat, text="De", bg=bg, fg=fg) dat_l2 = Label(f_dat, text="/", bg=bg, fg=fg) dat_l3 = Label(f_dat, text="/", bg=bg, fg=fg) dat_l4 = Label(f_dat, text="a", bg=bg, fg=fg) dat_l5 = Label(f_dat, text="/", bg=bg, fg=fg) dat_l6 = Label(f_dat, text="/", bg=bg, fg=fg) dat_l7 = Label(f_dat, text=" ", bg=bg, fg=fg) dat_l1.grid(row=1, column=0, pady=5, padx=5) dat_l2.grid(row=1, column=2, pady=5, padx=0) dat_l3.grid(row=1, column=4, pady=5, padx=0) dat_l4.grid(row=1, column=6, pady=5, padx=2) dat_l5.grid(row=1, column=8, pady=5, padx=0) dat_l6.grid(row=1, column=10, pady=5, padx=0) dat_l7.grid(row=1, column=12, pady=5, padx=0) # --- Comboboxes ------------------------------------------------------ self.dat_cb1 = ttk.Combobox(f_dat, width=3, textvariable=None, values=days) self.dat_cb2 = ttk.Combobox(f_dat, width=5, textvariable=None, values=months) self.dat_cb3 = ttk.Combobox(f_dat, width=4, textvariable=None, values=years) self.dat_cb4 = ttk.Combobox(f_dat, width=3, textvariable=None, values=days) self.dat_cb5 = ttk.Combobox(f_dat, width=5, textvariable=None, values=months) self.dat_cb6 = ttk.Combobox(f_dat, width=4, textvariable=None, values=years) self.dat_cb1.grid(row=1, column=1, padx=0) self.dat_cb2.grid(row=1, column=3, padx=0) self.dat_cb3.grid(row=1, column=5, padx=0) self.dat_cb4.grid(row=1, column=7, padx=0) self.dat_cb5.grid(row=1, column=9, padx=0) self.dat_cb6.grid(row=1, column=11, padx=0) # --- Separator ------------------------------------------------------- dat_s = ttk.Separator(f_dat, orient=HORIZONTAL) dat_s.grid(row=2, columnspan=13, sticky=EW, pady=5, padx=5) # --- Radiobuttons ---------------------------------------------------- dat_rb1 = Radiobutton(f_dat, text='Todas', variable=self.date_all, value=1, bg=bg, fg=fg) dat_rb1.grid(row=3, column=0, columnspan=6, pady=5, padx=5) dat_rb2 = Radiobutton(f_dat, text='Mais Recentes', variable=self.date_all, value=0, bg=bg, fg=fg) dat_rb2.grid(row=3, column=6, columnspan=5, pady=5, padx=5) dat_rb1.deselect() dat_rb2.select() # LOCALIZAÇÃO ADMINISTRATIVA TAB ###################################### # --- Main Frame ------------------------------------------------------ tab_pol = ttk.Frame(n) n.add(tab_pol, text='Localização Administrativa') # --- inside Frame ---------------------------------------------------- f_pol = ttk.Frame(tab_pol) f_pol.pack_propagate(0) f_pol.pack(padx=0, pady=40) # --- Labels ---------------------------------------------------------- pol_l1 = Label(f_pol, text="Cod Postal", bg=bg, fg=fg) pol_l2 = Label(f_pol, text="Localidade", bg=bg, fg=fg) pol_l3 = Label(f_pol, text="Concelho", bg=bg, fg=fg) pol_l4 = Label(f_pol, text="Distrito", bg=bg, fg=fg) pol_l1.grid(row=2, column=0, padx=5, pady=5) pol_l2.grid(row=3, column=0, padx=5, pady=5) pol_l3.grid(row=4, column=0, padx=5, pady=5) pol_l4.grid(row=5, column=0, padx=5, pady=5) # --- Entries --------------------------------------------------------- self.pol_e1 = Entry(f_pol) self.pol_e2 = Entry(f_pol) self.pol_e3 = Entry(f_pol) self.pol_e4 = Entry(f_pol) self.pol_e1.grid(row=2, column=1) self.pol_e2.grid(row=3, column=1) self.pol_e3.grid(row=4, column=1) self.pol_e4.grid(row=5, column=1) # LOCALIZAÃÇÃO FÍSICA TAB ############################################# # --- Main Frame ------------------------------------------------------ tab_fis = ttk.Frame(n) n.add(tab_fis, text='Localização Física') # --- inside Frame ---------------------------------------------------- f_fis = ttk.Frame(tab_fis) f_fis.pack_propagate(0) f_fis.pack(padx=5, pady=10) # --- Labels ---------------------------------------------------------- fis_l1 = Label(f_fis, text="Círculo", bg=bg, fg=fg, font=font) fis_l2 = Label(f_fis, text="Latitude", bg=bg, fg=fg) fis_l3 = Label(f_fis, text="Longitude", bg=bg, fg=fg) fis_l4 = Label(f_fis, text="Raio (Kms)", bg=bg, fg=fg) fis_l5 = Label(f_fis, text="Quadrado", bg=bg, fg=fg, font=font) fis_l6 = Label(f_fis, text="Latitude 1", bg=bg, fg=fg) fis_l7 = Label(f_fis, text="Longitude 1", bg=bg, fg=fg) fis_l8 = Label(f_fis, text="Latitude 2", bg=bg, fg=fg) fis_l9 = Label(f_fis, text="Longitude 2", bg=bg, fg=fg) fis_l1.grid(row=1, column=0, columnspan=4, padx=5, pady=0) fis_l2.grid(row=2, column=0, padx=5, pady=5) fis_l3.grid(row=2, column=2, padx=5, pady=5) fis_l4.grid(row=3, column=0, padx=5, pady=5) fis_l5.grid(row=5, column=0, columnspan=4, padx=5, pady=0) fis_l6.grid(row=6, column=0, padx=5, pady=5) fis_l7.grid(row=6, column=2, padx=5, pady=5) fis_l8.grid(row=7, column=0, padx=5, pady=5) fis_l9.grid(row=7, column=2, padx=5, pady=5) # --- Entries --------------------------------------------------------- self.fis_e1 = Entry(f_fis, width=18) self.fis_e2 = Entry(f_fis, width=18) self.fis_e3 = Entry(f_fis, width=18) self.fis_e4 = Entry(f_fis, width=18) self.fis_e5 = Entry(f_fis, width=18) self.fis_e6 = Entry(f_fis, width=18) self.fis_e7 = Entry(f_fis, width=18) self.fis_e1.grid(row=2, column=1) self.fis_e2.grid(row=2, column=3) self.fis_e3.grid(row=3, column=1) self.fis_e4.grid(row=6, column=1) self.fis_e5.grid(row=6, column=3) self.fis_e6.grid(row=7, column=1) self.fis_e7.grid(row=7, column=3) # --- Separator ------------------------------------------------------- fis_s = ttk.Separator(f_fis, orient=HORIZONTAL) fis_s.grid(row=4, columnspan=4, sticky=EW, pady=5, padx=5) # EXCEL KMZ READY TAB ################################################# # --- Main Frame ------------------------------------------------------ tab_kmz = ttk.Frame(n) n.add(tab_kmz, text='Excel KMZ') # --- inside Frame ---------------------------------------------------- f_kmz = ttk.Frame(tab_kmz) f_kmz.pack_propagate(0) f_kmz.pack(padx=25, pady=25) # --- Labels ---------------------------------------------------------- kmz_l1 = Label(f_kmz, text="Icons", bg=bg, fg=fg, font=font) kmz_l2 = Label(f_kmz, text="Nº Icon", bg=bg, fg=fg) kmz_l3 = Label(f_kmz, text="Escala", bg=bg, fg=fg) kmz_l4 = Label(f_kmz, text="Cor", bg=bg, fg=fg) kmz_l5 = Label(f_kmz, text=" ", bg=bg, fg=fg) kmz_l6 = Label(f_kmz, text="Polígonos", bg=bg, fg=fg, font=font) kmz_l7 = Label(f_kmz, text="Raio", bg=bg, fg=fg) kmz_l8 = Label(f_kmz, text="Altitude", bg=bg, fg=fg) kmz_l9 = Label(f_kmz, text="Cor", bg=bg, fg=fg) kmz_l1.grid(row=1, column=0, columnspan=6, padx=5, pady=5) kmz_l2.grid(row=2, column=0, padx=5, pady=5) kmz_l3.grid(row=2, column=2, padx=5, pady=5) kmz_l4.grid(row=2, column=4, padx=5, pady=5) kmz_l5.grid(row=2, column=6, padx=5, pady=5) kmz_l6.grid(row=5, column=0, columnspan=6, padx=5, pady=5) kmz_l7.grid(row=6, column=0, padx=5, pady=5) kmz_l8.grid(row=6, column=2, padx=5, pady=5) kmz_l9.grid(row=6, column=4, padx=5, pady=5) # --- Entries --------------------------------------------------------- self.kmz_e1 = Entry(f_kmz, width=3) self.kmz_e2 = Entry(f_kmz, width=3) self.kmz_e3 = Entry(f_kmz) self.kmz_e4 = Entry(f_kmz, width=3) self.kmz_e5 = Entry(f_kmz, width=3) self.kmz_e6 = Entry(f_kmz) self.kmz_e1.grid(row=2, column=1) self.kmz_e2.grid(row=2, column=3) self.kmz_e3.grid(row=2, column=5) self.kmz_e4.grid(row=6, column=1) self.kmz_e5.grid(row=6, column=3) self.kmz_e6.grid(row=6, column=5) # --- Separator ------------------------------------------------------- kmz_s = ttk.Separator(f_kmz, orient=HORIZONTAL) kmz_s.grid(row=4, columnspan=7, sticky=EW, pady=5, padx=5)
class Spremnik: def __init__(self,root,frame): self.root=root self.frame=frame self.oblik = IntVar() self.boja = IntVar() self.masa_min = IntVar() self.masa_max = IntVar() Label(frame, text="OBLICI").grid(row=0, column=0) Label(frame, text="BOJA").grid(row=0, column=1) Label(frame, text="MASA").grid(row=0, column=2) self.toggle_btn_oblik = Button(frame, text="OFF", bg='red', command=self.ToggleOblik, width=TOG_WIDTH) self.toggle_btn_oblik.grid(row=1, column=0) self.toggle_btn_boja = Button(frame, text="OFF", bg='red', command=self.ToggleBoja, width=TOG_WIDTH) self.toggle_btn_boja.grid(row=1, column=1) self.toggle_btn_masa = Button(frame, text="OFF", bg='red', command=self.ToggleMasa, width=TOG_WIDTH) self.toggle_btn_masa.grid(row=1, column=2) self.radio_btn_kugla = Radiobutton(frame, variable=self.oblik, value=1, text='kugla', state=DISABLED, width=RB_WIDTH, height=RB_HEIGHT, anchor=W, font=(None, RB_FONT_SIZE)) self.radio_btn_kugla.grid(row=2, column=0) self.radio_btn_kocka = Radiobutton(frame, variable=self.oblik, value=2, text='kocka', state=DISABLED, width=RB_WIDTH, height=RB_HEIGHT, anchor=W, font=(None, RB_FONT_SIZE)) self.radio_btn_kocka.grid(row=3, column=0) self.radio_btn_piramida = Radiobutton(frame, variable=self.oblik, value=3, text='piramida', state=DISABLED, width=RB_WIDTH, height=RB_HEIGHT, anchor=W, font=(None, RB_FONT_SIZE)) self.radio_btn_piramida.grid(row=4, column=0) self.radio_btn_zelena = Radiobutton(frame, variable=self.boja, value=1, text='zelena', state=DISABLED, width=RB_WIDTH, height=RB_HEIGHT, anchor=W, font=(None, RB_FONT_SIZE)) self.radio_btn_zelena.grid(row=2, column=1) self.radio_btn_crvena = Radiobutton(frame, variable=self.boja, value=2, text='crvena', state=DISABLED, width=RB_WIDTH, height=RB_HEIGHT, anchor=W, font=(None, RB_FONT_SIZE)) self.radio_btn_crvena.grid(row=3, column=1) self.radio_btn_plava = Radiobutton(frame, variable=self.boja, value=3, text='plava', state=DISABLED, width=RB_WIDTH, height=RB_HEIGHT, anchor=W, font=(None, RB_FONT_SIZE)) self.radio_btn_plava.grid(row=4, column=1) self.radio_btn_zuta = Radiobutton(frame, variable=self.boja, value=4, text='zuta', state=DISABLED, width=RB_WIDTH, height=RB_HEIGHT, anchor=W, font=(None, RB_FONT_SIZE)) self.radio_btn_zuta.grid(row=5, column=1) self.label_masa_min = Label(frame, text=" MIN", fg="grey") self.label_masa_min.grid(row=2, column=2, sticky=W) self.entry_masa_min = Entry(frame, width=5, state=DISABLED) self.entry_masa_min.grid(row=2, column=2, columnspan=2, sticky=E) self.label_masa_max = Label(frame, text=" MAX", fg="grey") self.label_masa_max.grid(row=3, column=2, sticky=W) self.entry_masa_max = Entry(frame, width=5, state=DISABLED) self.entry_masa_max.grid(row=3, column=2, sticky=E) self.entry_masa_min.bind("<Button-1>",self.Numpad_Show_Min) self.entry_masa_max.bind("<Button-1>",self.Numpad_Show_Max) self._oblikState=False self._bojaState=False self._masaState=False def ToggleOblik(self): self._oblikState = not self._oblikState #print(self._oblikState) if self._oblikState == True: self.toggle_btn_oblik.config(bg='light green') self.toggle_btn_oblik.config(text='ON') self.radio_btn_kugla.config(state=NORMAL) self.radio_btn_kocka.config(state=NORMAL) self.radio_btn_piramida.config(state=NORMAL) self.radio_btn_kugla.select() elif self._oblikState == False: self.toggle_btn_oblik.config(bg='red') self.toggle_btn_oblik.config(text='OFF') self.radio_btn_kugla.config(state=DISABLED) self.radio_btn_kocka.config(state=DISABLED) self.radio_btn_piramida.config(state=DISABLED) self.oblik.set(0) def ToggleBoja(self): self._bojaState = not self._bojaState if self._bojaState == True: self.toggle_btn_boja.config(bg='light green') self.toggle_btn_boja.config(text='ON') self.radio_btn_crvena.config(state=NORMAL) self.radio_btn_plava.config(state=NORMAL) self.radio_btn_zelena.config(state=NORMAL) self.radio_btn_zuta.config(state=NORMAL) self.radio_btn_zelena.select() elif self._bojaState == False: self.toggle_btn_boja.config(bg='red') self.toggle_btn_boja.config(text='OFF') self.radio_btn_crvena.config(state=DISABLED) self.radio_btn_plava.config(state=DISABLED) self.radio_btn_zuta.config(state=DISABLED) self.radio_btn_zelena.config(state=DISABLED) self.boja.set(0) def ToggleMasa(self): self._masaState = not self._masaState if self._masaState == True: self.toggle_btn_masa.config(bg='light green') self.toggle_btn_masa.config(text='ON') self.entry_masa_max.config(state=NORMAL) self.entry_masa_min.config(state=NORMAL) self.label_masa_min.config(fg='black') self.label_masa_max.config(fg='black') self.masa_min.set(0) self.masa_max.set(1000) self.entry_masa_min.insert(0, 0) self.entry_masa_max.insert(0, 1000) elif self._masaState == False: self.toggle_btn_masa.config(bg='red') self.toggle_btn_masa.config(text='OFF') self.entry_masa_min.delete(0, END) self.entry_masa_max.delete(0, END) self.entry_masa_max.config(state=DISABLED) self.entry_masa_min.config(state=DISABLED) self.label_masa_min.config(fg='grey') self.label_masa_max.config(fg='grey') self.masa_min.set(0) self.masa_max.set(0) def Numpad_Show_Min(self,arg): if self._masaState == True: new = NumPad(self.root, self, "min") def Numpad_Show_Max(self,arg): if self._masaState == True: self.masa_max.set(0) new = NumPad(self.root, self, "max")
class MainWindow: image_index = 0 ImageCount = 0 canvas = None lock = False Image_list = [] x1, x2, y1, y2 = (0, 0, 0, 0) def autoPositing(self): if self.isInnerCircle == True: #------------------------ cw = self.img_org.size[0] // 2 #width ch = self.img_org.size[1] // 2 r = 90 box = (cw - r, ch - r, cw + r * 2, ch + r) img_center = self.img_org.crop(box) #self.canvas.create_rectangle(box) img_center = img_center.filter(ImageFilter.MedianFilter(5)) img_center = img_center.convert("L") #img_center.show() w = img_center.size[0] #x h = img_center.size[1] #y img_center = np.array(img_center) small = 640 * 255 small_x = 0 small_y = 0 for i in range(h): s = sum(img_center[i, :]) if s < small: small = s small_y = i small = 640 * 255 for j in range(w): s = sum(img_center[:, j]) if s < small: small = s small_x = j #------------------------ small_x += cw - r small_y += ch - r self.inner_x.set(small_x) self.inner_y.set(small_y) #print(small,small_x,small_y) #----------------------------- self.updateInterface(innercironly=True) else: self.dr = self.outside_d.get() - self.inner_d.get() self.outside_d.set(self.inner_d.get() + self.dr) self.outside_x.set(self.inner_x.get()) self.outside_y.set(self.inner_y.get()) self.recovercox() self._DrawCircle(moving=False, update=True) def recovercox(self): if self.isInnerCircle == True: self.x1 = self.inner_x.get() - self.inner_d.get() // 2 self.y1 = self.inner_y.get() - self.inner_d.get() // 2 self.x2 = self.inner_x.get() + self.inner_d.get() // 2 self.y2 = self.inner_y.get() + self.inner_d.get() // 2 else: self.x1 = self.outside_x.get() - self.outside_d.get() // 2 self.y1 = self.outside_y.get() - self.outside_d.get() // 2 self.x2 = self.outside_x.get() + self.outside_d.get() // 2 self.y2 = self.outside_y.get() + self.outside_d.get() // 2 def updateInterface(self, block=None, innercironly=False): self.lock = False index = 0 if block != None: for vi in self.variable_list[1:]: vi.set(block[index]) index += 1 self.isInnerCircle = True self.recovercox() self._DrawCircle(moving=False, update=True) if innercironly == False: self.isInnerCircle = False self.recovercox() self._DrawCircle(moving=False, update=True) self.canvas.update() #--------------------- self.processChooseInner() def autoTurn(self): data = 'start' count = -1 pic_num = self.myio.len_filelist while (data != None and count < pic_num): count += 1 self.processRButton() data = self.myio.pickoneDB(self.filename) print(("You have finished %d pictures") % (count)) def processRButton(self): #print("RButton") self.lock = False self.filename = self.myio.nextfilename() self.showPicture(self.filename) self.currentfile.set(self.filename) data = self.myio.pickoneDB(self.filename) #print(data) if data != None: self.updateInterface(data[1:]) else: self.processChooseInner() self.autoPositing() def unknownError(self): tkinter.messagebox.showerror("unknownError", "Please resetart this script!!!") def processLButton(self): print("LButton") self.lock = False filename = self.myio.lastfilename() self.showPicture(filename) self.currentfile.set(filename) data = self.myio.pickoneDB(filename) if data != None: self.updateInterface(data[1:]) def processChooseInner(self): self.radio_innerCircle.select() self.radio_outsideCircle.deselect() self.isInnerCircle = True self.recovercox() def processChooseOutside(self): self.radio_innerCircle.deselect() self.radio_outsideCircle.select() self.isInnerCircle = False self.autoPositing() def processSave(self): filename = self.currentfile.get() block = [vi.get() for vi in self.variable_list[1:]] self.myio.processSaveDB(filename, block) #--------------draw a circle------- idraw = ImageDraw.Draw(self.img_org) r = block[0] // 2 x = block[1] y = block[2] innercirobx = [x - r, y - r, x + r, y + r] r = block[3] // 2 x = block[4] y = block[5] outsidecirobx = [x - r, y - r, x + r, y + r] for i in range(2): idraw.ellipse(innercirobx, outline='white') innercirobx = self.inc_r(innercirobx) idraw.ellipse(outsidecirobx, outline='white') outsidecirobx = self.inc_r(outsidecirobx) outputname = 'output_image/' + os.path.split( self.currentfile.get())[-1] #print(outputname) self.img_org.save(outputname) #---------------------------------- self.processRButton() def Press(self, event): self.x1 = event.x self.y1 = event.y def showPicture(self, filename): self.img_org = Image.open(filename) self.h = self.img_org.height self.w = self.img_org.width if self.isContrastEnh: box = (0, 0, self.w, self.h) img = self.img_org.crop(box) contrast = ImageEnhance.Contrast(img) contrast_img = contrast.enhance(2.0) self.img = ImageTk.PhotoImage(contrast_img) else: self.img = ImageTk.PhotoImage(self.img_org) if self.canvas.find_withtag('img'): self.canvas.delete('img') self.canvas.create_image(self.w // 2, self.h // 2, image=self.img) self.canvas.update() def _DrawCircle(self, moving=True, update=False): ch = 'inner' if self.isInnerCircle == False: ch = 'outside' if update: self.canvas.delete(ch) d = self.x2 - self.x1 if not self.canvas.find_withtag(ch): self.canvas.create_oval(self.x1, self.y1, self.x1 + d, self.y1 + d, outline='white', tags=ch, width=2) elif moving: self.canvas.delete(ch) if self.isInnerCircle: self.inner_d.set(d) self.inner_x.set(self.x1 + d // 2) self.inner_y.set(self.y1 + d // 2) else: self.outside_d.set(d) self.outside_x.set(self.x1 + d // 2) self.outside_y.set(self.y1 + d // 2) def Release(self, event): self._DrawCircle(moving=False, update=True) def Draw(self, event): self.x2 = event.x self.y2 = event.y self._DrawCircle() def PressKey(self, event): key = event.keysym if self.lock == False: self.lock = True self.recovercox() if key == 'w': self.y1 -= 2 self.y2 -= 2 elif key == 's': self.y1 += 2 self.y2 += 2 elif key == 'a': self.x1 -= 2 self.x2 -= 2 elif key == 'd': self.x1 += 2 self.x2 += 2 elif key == 'q': self.x2 -= 2 self.y2 -= 2 elif key == 'e': self.x2 += 2 self.y2 += 2 elif key == 'space': if self.isInnerCircle == True: self.processChooseOutside() else: self.processSave() self._DrawCircle(moving=False, update=True) def openFolder(self): filenameforReading = askdirectory() self.myio = MyIO(filenameforReading) #self.processRButton() self.autoTurn() def openCsv(self): tkinter.messagebox.showerror("error", "under construction") def openDatabase(self): filenameforReading = askopenfilename() print(filenameforReading) if self.myio != None: self.myio.setdb_path(filenameforReading) self.autoTurn() def outputcsv(self): data = self.myio.pickallDB() outputname = 'data.csv' with open(outputname, 'a+') as csvfile: f_csv = csv.writer(csvfile) for row in data: f_csv.writerow(row) def inc_r(self, box): r = [-1, -1, 1, 1] for i in range(4): box[i] += r[i] return box def outputpic(self): data = self.myio.pickallDB() names = self.myio.pickallDB(True) name_set = set(names) index = 0 for row in data: #--------------draw a circle------- filename = self.myio.filelist[index] pic_name = os.path.split(filename)[-1] if pic_name not in name_set: index += 1 continue self.img_org = Image.open(filename) idraw = ImageDraw.Draw(self.img_org) r = row[1] // 2 x = row[2] y = row[3] innercirobx = [x - r, y - r, x + r, y + r] r = row[4] // 2 x = row[5] y = row[6] outsidecirobx = [x - r, y - r, x + r, y + r] for i in range(2): idraw.ellipse(innercirobx, outline='white') innercirobx = self.inc_r(innercirobx) idraw.ellipse(outsidecirobx, outline='white') outsidecirobx = self.inc_r(outsidecirobx) outputname = 'output_image/' + os.path.split(row[0])[-1] print(outputname) self.img_org.save(outputname) index += 1 #---------------------------------- def AlterDBFName(self): self.myio.alterAllFNameDB() def ContrastEnh(self): if self.isContrastEnh == False: self.isContrastEnh = True else: self.isContrastEnh = False self.showPicture(self.currentfile.get()) def __init__(self): self.myio = None self.isContrastEnh = False window = Tk() window.title("Assist Tool") leftICO = PhotoImage(file="ICO/left.gif") rightICO = PhotoImage(file="ICO/right.gif") SaveICO = PhotoImage(file="ICO/Save.gif") self.inner_x = IntVar() self.inner_y = IntVar() self.inner_d = IntVar() self.outside_x = IntVar() self.outside_y = IntVar() self.outside_d = IntVar() self.currentfile = StringVar() self.variable_list = [ self.currentfile, self.inner_d, self.inner_x, self.inner_y, self.outside_d, self.outside_x, self.outside_y ] self.h = 480 self.w = 640 self.isInnerCircle = BooleanVar() self.isInnerCircle.set(True) frame_left = Frame(window) frame_left.grid(row=1, column=1) frame_right = Frame(window) frame_right.grid(row=1, column=2) frame_bottom = Frame(window) frame_bottom.grid(row=2, column=1) frame_right_1 = Frame(frame_right) frame_right_1.grid(row=1, column=1) frame_right_2 = Frame(frame_right) frame_right_2.grid(row=2, column=1) frame_right_3 = Frame(frame_right) frame_right_3.grid(row=3, column=1) frame_right_4 = Frame(frame_right) frame_right_4.grid(row=4, column=1) frame_right_5 = Frame(frame_right) frame_right_5.grid(row=5, column=1) #------------------banging--------- self.canvas = Canvas(frame_left) self.canvas["width"] = self.w self.canvas["height"] = self.h self.canvas.pack() self.canvas.bind('<Button-1>', self.Press) self.canvas.bind('<B1-Motion>', self.Draw) self.canvas.bind('<ButtonRelease-1>', self.Release) window.bind('<Key>', self.PressKey) #-------------show background picture----- self.currentfile.set("ICO/rabbit640480.jpg") self.showPicture("ICO/rabbit640480.jpg") #--------------show filename self.label_filename = Label(frame_bottom, textvariable=self.currentfile) self.label_filename.pack() #-------------control button Button(frame_right_2, image=leftICO, command=self.processLButton).pack(side=LEFT) Button(frame_right_2, image=rightICO, command=self.processRButton).pack(side=LEFT) #-------------show info of inner circle self.radio_innerCircle = Radiobutton(frame_right_3, text="Inner Circle", command=self.processChooseInner, variable=self.isInnerCircle, value=True) self.radio_innerCircle.grid(row=1, column=2) Label(frame_right_3, text="d").grid(row=2, column=1) self.inner_d.set(70) self.dr = 102 self.entry_inner_d = Entry(frame_right_3, textvariable=self.inner_d) self.entry_inner_d.grid(row=2, column=2) Label(frame_right_3, text="x").grid(row=3, column=1) self.entry_inner_x = Entry(frame_right_3, textvariable=self.inner_x) self.entry_inner_x.grid(row=3, column=2) Label(frame_right_3, text="y").grid(row=4, column=1) self.entry_inner_y = Entry(frame_right_3, textvariable=self.inner_y) self.entry_inner_y.grid(row=4, column=2) #------------show info of outside circle self.radio_outsideCircle = Radiobutton( frame_right_4, text="Outside Circle", command=self.processChooseOutside, variable=self.isInnerCircle, value=False) self.radio_outsideCircle.grid(row=1, column=2) Label(frame_right_4, text="d").grid(row=2, column=1) self.entry_outside_d = Entry(frame_right_4, textvariable=self.outside_d) self.entry_outside_d.grid(row=2, column=2) Label(frame_right_4, text="x").grid(row=3, column=1) self.entry_outside_x = Entry(frame_right_4, textvariable=self.outside_x) self.entry_outside_x.grid(row=3, column=2) Label(frame_right_4, text="y").grid(row=4, column=1) self.entry_outside_y = Entry(frame_right_4, textvariable=self.outside_y) self.entry_outside_y.grid(row=4, column=2) #-------------Save button self.radio_isContrastEnh = Checkbutton( frame_right_5, text="Contrast Enhance", command=self.ContrastEnh).pack() #self.radio_isContrastEnh.deselect() Button(frame_right_5, image=SaveICO, command=self.processSave).pack() #--------------menubar menubar = Menu(window) window.config(menu=menubar) openMenu = Menu(menubar, tearoff=0) menubar.add_cascade(label="Open", menu=openMenu) openMenu.add_command(label="Folder", command=self.openFolder) openMenu.add_command(label="sqlite3 database", command=self.openDatabase) openMenu.add_command(label="csv file", command=self.openCsv) AlterMenu = Menu(menubar, tearoff=0) menubar.add_cascade(label="Alter", menu=AlterMenu) AlterMenu.add_command(label="Alter db fName", command=self.AlterDBFName) outputMenu = Menu(menubar, tearoff=0) menubar.add_cascade(label="Output", menu=outputMenu) outputMenu.add_command(label="csv file", command=self.outputcsv) outputMenu.add_command(label="picture", command=self.outputpic) #-------------finally--------- self.radio_innerCircle.select() if os.path.exists('output_image') == False: os.mkdir('output_image') window.mainloop()
def customer_detail(self): self.main_frame_forget(self) # Create labelframe in root frame = LabelFrame(self.master, text='Customer Debt', font=('Consolas',15)) frame.pack(fill='both', expand=1, padx=10, pady=10) back_button = Button(frame, text='Back', command=lambda:self.current_frame_forget(self, frame), font=('Verdana',10)) back_button.pack(pady=10,padx=15, anchor='nw', side='top') # search frame for search and delete search_frame = Frame(frame) search_frame.pack() check_var = StringVar() # search label search_label = Label(search_frame, text='Search', font=('Consolas')) search_label.grid(column=1, row=1, pady=10, padx=10) # search entry self.search_entry = Entry(search_frame, font=('Consolas',15)) self.search_entry.grid(column=2, row=1, pady=10, padx=10) # by name check button check_name = Radiobutton(search_frame, text='by Name', variable=check_var, value='name', font=('Consolas')) check_name.grid(column=3, row=1, pady=10,padx=10) # by phone check button check_phone = Radiobutton(search_frame, text='by Phone', variable=check_var, value='phone', font=('Consolas')) check_phone.grid(column=4, row=1, pady=10, padx=10) # by description check button check_phone = Radiobutton(search_frame, text='by Description', variable=check_var, value='description', font=('Consolas')) check_phone.grid(column=5, row=1, pady=10,padx=10) check_name.select() delete_row_label = Label(search_frame, text=' Delete Record', font=('Consolas')) delete_row_label.grid(column=6, row=1, pady=10,padx=10) delete_row_entry = Entry(search_frame, font=('Consolas',15), width=5) delete_row_entry.grid(column=7, row=1, pady=10,padx=10) delete_row_entry.bind('<Return>', lambda extra, :self.delete_customer_record(delete_row_entry)) # Customer data in tree view area=('#', 'Customer Name', 'Phone', 'Cashier Name', 'Description', 'Total', 'Received', 'Debt', 'Date', 'Time') style = ttk.Style() style.configure("mystyle.Treeview", highlightthickness=0, bd=3, font=('Consolas', 12, 'bold'), rowheight=30) # Modify the font of the body style.configure("mystyle.Treeview.Heading", font=('Consolas', 13)) # Modify the font of the headings tv = ttk.Treeview(frame, columns=('0','1','2','3','4','5','6','7','8','9'), show='headings', height=10, style="mystyle.Treeview") tv.pack(padx=10, pady=10) tv.column('0', width='30', anchor='e') tv.column('1', width='150', anchor='c') tv.column('2', width='70', anchor='c') tv.column('3', width='150', anchor='c') tv.column('4', width='150', anchor='c') tv.column('5', width='70', anchor='c') tv.column('6', width='100', anchor='c') tv.column('7', width='70', anchor='c') tv.column('8', width='100', anchor='c') tv.column('9', width='100', anchor='c') tv.heading('0', text=area[0]) tv.heading('1', text=area[1]) tv.heading('2', text=area[2]) tv.heading('3', text=area[3]) tv.heading('4', text=area[4]) tv.heading('5', text=area[5]) tv.heading('6', text=area[6]) tv.heading('7', text=area[7]) tv.heading('8', text=area[8]) tv.heading('9', text=area[9]) frame1 = LabelFrame(frame, text='Customer Total', font=('Consolas',15)) frame1.pack(padx=10, pady=10) # create total labels, variables and entrys total_qty_var = StringVar() total_debt_var = StringVar() total_qty_label = Label(frame1, text='Qty ', font=('Consolas',13)) total_qty_label.grid(column=0, row=1, padx=10, pady=10) total_debt_label = Label(frame1, text='Total Debt ', font=('Consolas',13)) total_debt_label.grid(column=0, row=2, padx=10, pady=10) total_qty_entry = Label(frame1, textvariable=total_qty_var, font=('Consolas',13)) total_qty_entry.grid(column=1, row=1, padx=10, pady=10) total_debt_entry = Label(frame1, textvariable=total_debt_var, font=('Consolas',13)) total_debt_entry.grid(column=1, row=2, padx=10, pady=10) self.search_entry.bind('<Return>', lambda a:self.customer_detail_search(check_var.get(),self.search_entry.get(), tv, total_qty_var, total_debt_var)) self.customer_detail_insert(self, tv, total_qty_var, total_debt_var)
def row_1(self, action=None): """ Name : USERS cols : 1 """ if action == "construct": # -- CREATE ROW -- # self.grid.row(width=self.width, height=150, padx=0, pady=0, bg="#ffffff") # -- CREATE COLS -- # self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) elif action == "fill": if self.w_avatars_fill is not True: # Get texts for this row txt = self.json_script.get("row_1") user_counter = 0 free_space = 0 while user_counter != len(self.users): user = self.users[user_counter] # -- COLUMN 1 : USER AVATAR IMAGE -- # img = Image.open("frontend/images/avatars/{}.png".format( user.get("user_avatar_name"))) img_resize = img.resize((75, 75), Image.ANTIALIAS) img_tkinter = ImageTk.PhotoImage(img_resize) w_avatar_icon = Label( self.grid.col_frames[1][user_counter], image=img_tkinter, borderwidth=0, bg="#ffffff") w_avatar_icon.image = img_tkinter w_avatar_icon.pack(fill='both', expand=True) # -- COLUMN 1 : USER AVATAR NAME -- # w_avatar_name = Label( self.grid.col_frames[1][user_counter], text="{}".format(user.get("user_name")), anchor="n", bg="#ffffff", pady=10, ) w_avatar_name.pack(fill='both', expand=True) # -- COLUMN 1 : USER AVATAR RADIO -- # w_user_radio = Radiobutton( self.grid.col_frames[1][user_counter], variable=self.var_user_id, value=user.get("user_id"), bg="#ffffff") w_user_radio.pack(fill='both', expand=True) if user_counter == 0: w_user_radio.select() self.w_avatar_icons.append(w_avatar_icon) self.w_avatar_names.append(w_avatar_name) self.w_user_radios.append(w_user_radio) user_counter += 1 free_space = 6 - user_counter free_counter = 0 while free_counter != free_space: # -- COLUMN 1 : USER AVATAR IMAGE -- # img = Image.open( "frontend/images/avatars/empty.png").convert("RGBA") img_resize = img.resize((75, 75), Image.ANTIALIAS) img_tkinter = ImageTk.PhotoImage(img_resize) w_avatar_icon = Label( self.grid.col_frames[1][user_counter], image=img_tkinter, bg="#ffffff") w_avatar_icon.image = img_tkinter w_avatar_icon.pack(fill="both", expand=True) # -- COLUMN 1 : USER AVATAR NAME -- # w_avatar_name = Label( self.grid.col_frames[1][user_counter], text=txt.get("user_empty"), anchor="n", bg="#ffffff", pady=10, ) w_avatar_name.pack(fill='both', expand=True) # -- COLUMN 1 : FREE USER SUBSCRIBE BUTTON -- # w_subscribe_button = Button( self.grid.col_frames[1][user_counter], text=txt.get("user_empty_button"), borderwidth=0, font="Helvetica 8 bold", bg="#7dd2f0", fg="#ffffff", activebackground="#71bdd8", activeforeground="#ffffff", command=self.display_create_user) w_subscribe_button.pack(fill='both', expand=True) self.w_avatar_icons.append(w_avatar_icon) self.w_avatar_names.append(w_avatar_name) self.w_subscribe_buttons.append(w_subscribe_button) user_counter += 1 free_counter += 1 self.w_avatars_fill = True elif action == "refresh": """ Refresh this row. """ for w_avatar_icon in self.w_avatar_icons: w_avatar_icon.pack_forget() for w_avatar_name in self.w_avatar_names: w_avatar_name.pack_forget() for w_user_radio in self.w_user_radios: w_user_radio.pack_forget() for w_subscribe_button in self.w_subscribe_buttons: w_subscribe_button.pack_forget() self.w_subscribe_buttons = [] self.w_avatar_icons = [] self.w_avatar_names = [] self.w_user_radios = [] self.w_avatars_fill = False
class UpdateLanguages(): def __init__(self, container=None, displayer=None, session=None): """ 'container' (Obj ): instance of Container. 'displayer' (obj ): instance of Displayer. 'session,' (obj ): instance of Session. 'grid' (Obj ): instance of Grid. 'f_container' (Frame): container frame. 'm_frame' (Frame): master frame of view. 'name' (str ): name of view. 'json_script' (dict ): json dict of script. 'width' (int ): view width. 'height' (int ): view height. 'padx' (int ): view 'pady' (int ): view 'bg' (str ): view bg. """ # Instances self.container = container self.displayer = displayer self.session = session self.grid = None # Frames self.f_container = self.container.f_container self.m_frame = None # Informations self.name = None # Script self.json_script = None # Style Sheet self.width = self.container.width self.height = self.container.height self.padx = 0 self.pady = 0 self.bg = "#ffffff" # Tk control variables self.var_notification = StringVar() self.var_language = StringVar() # Widgets row 0 self.w_title = None # Widgets row 1 self.w_en_flag = None self.w_en_name = None self.w_en_check = None self.w_fr_flag = None self.w_fr_name = None self.w_fr_check = None self.w_de_flag = None self.w_de_name = None self.w_de_check = None # Widgets row 2 self.w_it_flag = None self.w_it_name = None self.w_it_check = None self.w_es_flag = None self.w_es_name = None self.w_es_check = None self.w_nl_flag = None self.w_nl_name = None self.w_nl_check = None # Widgets row 3 self.w_previous_button = None self.w_submit_button = None # Fill status self.fill_status = False # -- Displayer initialisation -- # self.construct() def construct(self, **kwargs): """ Construt view. 'displayer' (Bool): to not create the view \ during initialization. """ # 2. Create new grid in page container. self.grid = Grid(frame=self.f_container, width=self.width, height=self.height, padx=self.padx, pady=self.pady, bg=self.bg) # 3. Get view frame for displayer function self.m_frame = self.grid.master_frame self.row_0(action="construct") self.row_1(action="construct") self.row_2(action="construct") self.row_3(action="construct") def fill(self, **kwargs): # 1. Get the script. self.json_script = self.session.get_script(package_name="update", file_name="languages") self.name = self.json_script.get("view_name") self.var_notification.set(" ") # 3. Refresh rows. if self.fill_status is True: self.row_0(action="refresh") self.row_1(action="refresh") self.row_2(action="refresh") self.row_3(action="refresh") self.row_0(action="fill") self.row_1(action="fill") self.row_2(action="fill") self.row_3(action="fill") self.fill_status = True def display_previous(self): """ Display view 'update_server_conn'. """ self.displayer.display(c_view="update_languages", f_view="update_server_conn") def display_step_3(self): """ Display view 'update_categories'. """ self.displayer.display(c_view="update_languages", f_view="update_categories", language=str(self.var_language.get())) def row_0(self, action=None): """ Name : VIEW TITLE cols : 1 """ if action == "construct": # -- CREATE ROW -- # self.grid.row(width=self.width, height=250, padx=self.padx, pady=self.pady, bg="#ffffff") # -- CREATE COLS -- # self.grid.column(span=12, row=0, width=None, height=None, padx=None, pady=None, bg=None) elif action == "fill": # Get script txt = self.json_script.get("row_0") # -- COLUMN 1/1 : VIEW TITLE -- # if self.w_title is None: self.w_title = Label(self.grid.col_frames[0][0], pady=50, anchor="s", text=txt.get("view_title"), bg="#ffffff", fg="#000000", font="Helvetica 12 bold") self.w_title.pack(fill='both', expand=True) elif action == "refresh": self.w_title.pack_forget() self.w_title = None def row_1(self, action=None): """ Name : LANGAGE 1-3 cols : 3 """ if action == "construct": # -- CREATE ROW -- # self.grid.row(width=self.width, height=150, padx=self.padx, pady=self.pady, bg="#ffffff") # -- CREATE COLS -- # self.grid.column(span=4, row=1, width=None, height=None, padx=None, pady=20, bg=None) self.grid.column(span=4, row=1, width=None, height=None, padx=None, pady=20, bg=None) self.grid.column(span=4, row=1, width=None, height=None, padx=None, pady=20, bg=None) elif action == "fill": # Get script txt = self.json_script.get("row_1") # -- COLUMN 1/3 : ENGLISH LANGUAGE -- # img = Image.open("frontend/images/flags/en.png") imgResize = img.resize((30, 30), Image.ANTIALIAS) imgTkinter = ImageTk.PhotoImage(imgResize) if self.w_en_flag is None: self.w_en_flag = Label(self.grid.col_frames[1][0], image=imgTkinter, borderwidth=0, bg="#ffffff") self.w_en_flag.image = imgTkinter self.w_en_flag.pack(fill='both', expand=True) if self.w_en_name is None: self.w_en_name = Label(self.grid.col_frames[1][0], pady=0, text=txt.get("english_label"), bg="#ffffff", fg="#000000", font="Helvetica 12 bold") self.w_en_name.pack(fill='both', expand=True) if self.w_en_check is None: self.w_en_check = Radiobutton(self.grid.col_frames[1][0], variable=self.var_language, value="en", bg="#ffffff") self.w_en_check.pack(fill='both', expand=True) if self.session.gui_language == "en": self.w_en_check.select() # -- COLUMN 2/3 : FRENCH LANGUAGE -- # img = Image.open("frontend/images/flags/fr.png") imgResize = img.resize((30, 30), Image.ANTIALIAS) imgTkinter = ImageTk.PhotoImage(imgResize) if self.w_fr_flag is None: self.w_fr_flag = Label(self.grid.col_frames[1][1], image=imgTkinter, borderwidth=0, bg="#ffffff") self.w_fr_flag.image = imgTkinter self.w_fr_flag.pack(fill='both', expand=True) if self.w_fr_name is None: self.w_fr_name = Label(self.grid.col_frames[1][1], pady=0, text=txt.get("french_label"), bg="#ffffff", fg="#000000", font="Helvetica 12 bold") self.w_fr_name.pack(fill='both', expand=True) if self.w_fr_check is None: self.w_fr_check = Radiobutton(self.grid.col_frames[1][1], variable=self.var_language, value="fr", bg="#ffffff") self.w_fr_check.pack(fill='both', expand=True) if self.session.gui_language == "fr": self.w_fr_check.select() # -- COLUMN 3/3 : GERMAN LANGUAGE -- # img = Image.open("frontend/images/flags/de.png") imgResize = img.resize((30, 30), Image.ANTIALIAS) imgTkinter = ImageTk.PhotoImage(imgResize) if self.w_de_flag is None: self.w_de_flag = Label(self.grid.col_frames[1][2], image=imgTkinter, borderwidth=0, bg="#ffffff") self.w_de_flag.image = imgTkinter self.w_de_flag.pack(fill='both', expand=True) if self.w_de_name is None: self.w_de_name = Label(self.grid.col_frames[1][2], pady=0, text=txt.get("german_label"), bg="#ffffff", fg="#000000", font="Helvetica 12 bold") self.w_de_name.pack(fill='both', expand=True) if self.w_de_check is None: self.w_de_check = Radiobutton(self.grid.col_frames[1][2], variable=self.var_language, value="de", bg="#ffffff") self.w_de_check.pack(fill='both', expand=True) elif action == "refresh": self.w_en_flag.pack_forget() self.w_en_name.pack_forget() self.w_en_check.pack_forget() self.w_fr_flag.pack_forget() self.w_fr_name.pack_forget() self.w_fr_check.pack_forget() self.w_de_flag.pack_forget() self.w_de_name.pack_forget() self.w_de_check.pack_forget() self.w_en_flag = None self.w_en_name = None self.w_en_check = None self.w_fr_flag = None self.w_fr_name = None self.w_fr_check = None self.w_de_flag = None self.w_de_name = None self.w_de_check = None def row_2(self, action=None): """ Name : LANGAGE 3-6 cols : 3 """ if action == "construct": # -- CREATE ROW -- # self.grid.row(width=self.width, height=140, padx=self.padx, pady=self.pady, bg="#ffffff") # -- CREATE COLS -- # self.grid.column(span=4, row=2, width=None, height=None, padx=None, pady=20, bg=None) self.grid.column(span=4, row=2, width=None, height=None, padx=None, pady=20, bg=None) self.grid.column(span=4, row=2, width=None, height=None, padx=None, pady=20, bg=None) elif action == "fill": # Get script txt = self.json_script.get("row_2") # -- COLUMN 1/3 : ITALIAN LANGUAGE -- # img = Image.open("frontend/images/flags/it.png") imgResize = img.resize((30, 30), Image.ANTIALIAS) imgTkinter = ImageTk.PhotoImage(imgResize) if self.w_it_flag is None: self.w_it_flag = Label(self.grid.col_frames[2][0], image=imgTkinter, borderwidth=0, bg="#ffffff") self.w_it_flag.image = imgTkinter self.w_it_flag.pack(fill='both', expand=True) if self.w_it_name is None: self.w_it_name = Label(self.grid.col_frames[2][0], pady=0, text=txt.get("italian_label"), bg="#ffffff", fg="#000000", font="Helvetica 12 bold") self.w_it_name.pack(fill='both', expand=True) if self.w_it_check is None: self.w_it_check = Radiobutton(self.grid.col_frames[2][0], variable=self.var_language, value="it", bg="#ffffff") self.w_it_check.pack(fill='both', expand=True) # -- COLUMN 2/3 : SPANISH LANGUAGE -- # img = Image.open("frontend/images/flags/es.png") imgResize = img.resize((30, 30), Image.ANTIALIAS) imgTkinter = ImageTk.PhotoImage(imgResize) if self.w_es_flag is None: self.w_es_flag = Label(self.grid.col_frames[2][1], image=imgTkinter, borderwidth=0, bg="#ffffff") self.w_es_flag.image = imgTkinter self.w_es_flag.pack(fill='both', expand=True) if self.w_es_name is None: self.w_es_name = Label(self.grid.col_frames[2][1], pady=0, text=txt.get("spanish_label"), bg="#ffffff", fg="#000000", font="Helvetica 12 bold") self.w_es_name.pack(fill='both', expand=True) if self.w_es_check is None: self.w_es_check = Radiobutton(self.grid.col_frames[2][1], variable=self.var_language, value="es", bg="#ffffff") self.w_es_check.pack(fill='both', expand=True) # -- COLUMN 3/3 : DUTCH LANGUAGE -- # img = Image.open("frontend/images/flags/nl.png") imgResize = img.resize((30, 30), Image.ANTIALIAS) imgTkinter = ImageTk.PhotoImage(imgResize) if self.w_nl_flag is None: self.w_nl_flag = Label(self.grid.col_frames[2][2], image=imgTkinter, borderwidth=0, bg="#ffffff") self.w_nl_flag.image = imgTkinter self.w_nl_flag.pack(fill='both', expand=True) if self.w_nl_name is None: self.w_nl_name = Label(self.grid.col_frames[2][2], pady=0, text=txt.get("dutch_label"), bg="#ffffff", fg="#000000", font="Helvetica 12 bold") self.w_nl_name.pack(fill='both', expand=True) if self.w_nl_check is None: self.w_nl_check = Radiobutton(self.grid.col_frames[2][2], variable=self.var_language, value="nl", bg="#ffffff") self.w_nl_check.pack(fill='both', expand=True) elif action == "refresh": self.w_it_flag.pack_forget() self.w_it_name.pack_forget() self.w_it_check.pack_forget() self.w_es_flag.pack_forget() self.w_es_name.pack_forget() self.w_es_check.pack_forget() self.w_nl_flag.pack_forget() self.w_nl_name.pack_forget() self.w_nl_check.pack_forget() self.w_it_flag = None self.w_it_name = None self.w_it_check = None self.w_es_flag = None self.w_es_name = None self.w_es_check = None self.w_nl_flag = None self.w_nl_name = None self.w_nl_check = None def row_3(self, action=None): """ Name : SUBMIT BUTTON cols : 4 """ if action == "construct": # -- CREATE ROW -- # self.grid.row(width=self.width, height=60, padx=self.padx, pady=self.pady, bg="#ffffff") # -- CREATE COLS -- # self.grid.column(span=2, row=3, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=4, row=3, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=4, row=3, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=3, width=None, height=None, padx=None, pady=None, bg=None) elif action == "fill": txt = self.json_script.get("row_3") # -- COLUMN 1/4 : EMPTY -- # # -- COLUMN 2/4 : SUBMIT BUTTON -- # if self.w_previous_button is None: self.w_previous_button = Button( self.grid.col_frames[3][1], text=txt.get("previous_button"), fg="#ffffff", bg="#7A57EC", activeforeground="#ffffff", activebackground="#845EFF", command=self.display_previous) self.w_previous_button.pack(side=BOTTOM, fill=X) # -- COLUMN 3/4 : SUBMIT BUTTON -- # if self.w_submit_button is None: self.w_submit_button = Button(self.grid.col_frames[3][2], text=txt.get("submit_button"), fg="#ffffff", bg="#7A57EC", activeforeground="#ffffff", activebackground="#845EFF", command=self.display_step_3) self.w_submit_button.pack(side=BOTTOM, fill=X) # -- COLUMN 3/3 : EMPTY -- # elif action == "refresh": self.w_previous_button.pack_forget() self.w_submit_button.pack_forget() self.w_previous_button = None self.w_submit_button = None
def rest_review(): def main_action(): flag=True res_id=ip.get().lower() if(param.get()==1): if(res_id not in rest_id_dict.keys()): flag=False else: name=rest_id_dict[res_id] else: if(res_id not in rest_id_dict.values()): flag=False else: name=res_id if(flag): label6.config(state=NORMAL) label7.config(state=NORMAL) label8.config(state=NORMAL) label6.delete('1.0', END) label7.delete('1.0', END) label8.delete('1.0', END) positive_reviews, negative_reviews, insufficient_data_to_classify,indexWiseScore = classifyReviewsOf(rest_index_dict[name]) positive=len(positive_reviews) negative=len(negative_reviews) neutral=len(insufficient_data_to_classify) total=positive+negative+neutral positive_percentage=(positive*100)//total negative_percentage=(negative*100)//total neutral_percentage=(neutral*100)//total label6.insert(INSERT,str(positive_percentage)+"%") label7.insert(INSERT,str(neutral_percentage)+"%") label8.insert(INSERT,str(negative_percentage)+"%") label6.config(state=DISABLED) label7.config(state=DISABLED) label8.config(state=DISABLED) else: messagebox.showinfo("Error", "Invalid Restaurant. No such restaurant found.") def radio(): if(param.get()==1): label2.config(text="Enter ID:") else: label2.config(text="Enter Name:") newwin = Toplevel(root) newwin.resizable(False, False) newwin.title("Restaurant Review") newwin.geometry("310x389") newwin.grid_columnconfigure(0, weight=1, uniform="fred") newwin.grid_columnconfigure(1, weight=1, uniform="fred") C = Canvas(newwin, bg="blue", height=389, width=310) filename = PhotoImage(file = "bg.png") background_label = Label(newwin, image=filename) background_label.place(x=0, y=0, relwidth=1, relheight=1) param=IntVar() label1=Label(newwin,text="Search by:",bg='#ffae93') label1.grid(column=0,row=0,pady=(120,0)) rb1=Radiobutton(newwin,text="Restauant ID",bg='#ffae93',padx = 10,variable=param,value=1,command=radio) rb1.grid(column=1,row=0,pady=(120,0),sticky=W) rb2=Radiobutton(newwin,text="Restauant Name",bg='#ffae93',padx = 10,variable=param,value=2,command=radio) rb2.grid(column=1,row=1,sticky=W) rb1.select() rb2.deselect() label2=Label(newwin,text="Enter ID:",bg='#ffae93') label2.grid(column=0,row=2,pady=(10,10)) ip=Entry(newwin,width=20) ip.grid(column=1,row=2,pady=(10,10),sticky=W) button1 =Button(newwin, text ="View Ratings", command =main_action) button1.grid(columnspan=2,row=3,pady=(5,0)) up=PhotoImage(file="thumbsup.png") down=PhotoImage(file="thumbsdown.png") nuetral=PhotoImage(file="nuetralthumb.png") label3=Label(newwin,image=up) label3.grid(column=0,row=4,pady=2,sticky=E,padx=30) label4=Label(newwin,image=nuetral) label4.grid(column=0,row=5,pady=2,sticky=E,padx=30) label5=Label(newwin,image=down) label5.grid(column=0,row=6,pady=2,padx=30,sticky=E) label6=Text(newwin,font=("Helvetica", 24),fg="green",width=5,height=1) label6.grid(column=1,row=4,pady=2,sticky=W) label7=Text(newwin,font=("Helvetica", 24),fg="yellow",width=5,height=1) label7.grid(column=1,row=5,pady=2,sticky=W) label8=Text(newwin,font=("Helvetica", 24),fg="red",width=5,height=1) label8.grid(column=1,row=6,pady=2,sticky=W) label6.config(state=DISABLED) label7.config(state=DISABLED) label8.config(state=DISABLED) C.grid() newwin.mainloop()
from tkinter import ( Tk, IntVar, Label, Radiobutton, W ) def sel(): selection = "You select the Option " + str(selectVar.get()) label.config(text=selection) layar=Tk() layar.title("Radio Button") selectVar = IntVar() R1 = Radiobutton(master=layar, text="Option 1", variable=selectVar, value=1, command=sel) R1.pack(anchor=W) R2 = Radiobutton(master=layar, text="Option 2", variable=selectVar, value=2, command=sel) R2.pack(anchor=W) R3 = Radiobutton(master=layar, text="Option 3", variable=selectVar, value=3, command=sel) R3.pack(anchor=W) label = Label(master=layar) label.pack() R1.select() layar.mainloop()
def row_1(self, action=None): """ Name : AVATAR LIST 0 -6 cols : 6 """ if action == "construct": # -- CREATE ROW -- # self.grid.row(width=self.width, height=150, padx=self.padx, pady=self.pady, bg="#ffffff") # -- CREATE COLS -- # self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=None, bg=None) elif action == "fill": if self.w_avatar_fill is not True: # -- COLUMN 1/1 : TITLE -- # count = 0 for avatar in self.avatars[0:6]: # -- COLUMN 1 : AVATAR IMAGE -- # img = Image.open( "frontend/images/avatars/{}.png".format(avatar)) img_resize = img.resize((50, 50), Image.ANTIALIAS) img_tkinter = ImageTk.PhotoImage(img_resize) w_img_avatar = Label(self.grid.col_frames[1][count], image=img_tkinter, borderwidth=0, bg="#ffffff") w_img_avatar.image = img_tkinter w_img_avatar.pack(fill='both', expand=True) # -- COLUMN 1 : AVATAR NAME -- # w_avatar_name = Label(self.grid.col_frames[1][count], text=avatar, bg="#ffffff") w_avatar_name.pack() # -- COLUMN 1 : AVATAR RADIO -- # w_avatar_radio = Radiobutton( self.grid.col_frames[1][count], variable=self.var_avatar, value=avatar, bg="#ffffff") w_avatar_radio.pack() if count == 0: w_avatar_radio.select() self.w_img_avatars.append(w_img_avatar) self.w_avatar_names.append(w_avatar_name) self.w_avatar_radios.append(w_avatar_radio) count += 1 elif action == "refresh": pass
class MyFirstGUI(): def __init__(self, master): self.master = master "----------------------------Constant---------------------------------" Classeur = r'C:\Users\jlaqueyr\Documents\MyNoteBook\ScriptPython\BorneDefaut\Feuille.xlsx' FeuilleDefaut = r'Liste des saisies' LBL_Z_INFO = 'Information générale' LARGEUR_FRAME = 485 TITRE = 'Borne défaut' DIMENSION_FENETRE = '500x350+30+30' LBL_SFC = 'SFC' LBL_OPERATEUR = 'Nom' LBL_Z_LIGNE = 'Sur quel ligne est apparu le défaut ?' LBL_Z_DEF = 'Description du défaut' LBL_Z_DEF_INT = 'Intégration' LBL_Z_DEF_UFT = 'UFT et CADS' LBL_Z_DEF_ETI = 'Etiquettes' LBL_Z_DEF_CHOIX = "Choisir le défaut" NOM_LIGNE1 = 'Ligne Principale' NOM_LIGNE2 = 'Ligne Secondaire' PADX_INFO = 5 PADX_LBL_INFO = 5 PADY_INFO = 20 PADX_BTN_LIGNE = 40 PADY_BTN_LIGNE = 15 PADX_ZN_DEF = 5 PADY_ZN_DEF = 10 MSG_SAUV_TITRE = "Ticket sauvegardé" MSG_SAUV_CONTENU = "Ticket défaut sauvegardé" VAL_DEF_CHOIX = 'Choix X' nomOperateur = StringVar(master) sfc = StringVar(master) master.title(TITRE) master.geometry(DIMENSION_FENETRE) "---------------------------Fonction----------------------------------" def callback(*args): print("tkvar changed") popupMenu2.configure(state='disable') popupMenu3.configure(state='disable') def callback2(*args): print("tkvar changed 1") popupMenu1.configure(state='disable') popupMenu3.configure(state='disable') def callback3(*args): print("tkvar changed 2") popupMenu1.configure(state='disable') popupMenu2.configure(state='disable') def testDefaut(listeDefaut, valDefaut): breakpoint() defaut = "" for defaut in listeDefaut: if defaut != valDefaut: defFinal = defaut break else: pass return defFinal def RecupValeur(): ListeInfo = [] print(self.txtSfc.get(), self.txtNomOperateur.get(), Ligne1Var.get(), Ligne2Var.get(), self.tkvar.get()) listeLigne = [Ligne1Var.get(), Ligne2Var.get()] resultatLigne = testLigne(listeLigne, 'off') resultatSfc, ErrSfc = testSfc(sfc.get()) breakpoint() self.listeDef = [ self.tkvar.get(), self.tkvar1.get(), self.tkvar2.get() ] resultatDefaut = testDefaut(self.listeDef, VAL_DEF_CHOIX) ListeInfo = [ resultatSfc, self.txtNomOperateur.get(), resultatLigne, resultatDefaut ] sauvDonnee(Classeur, ListeInfo, FeuilleDefaut) self.txtSfc.delete(0, 'end') self.txtNomOperateur.delete(0, 'end') self.btnLigne1.deselect() self.btnLigne2.deselect() popupMenu1.configure(state='active') popupMenu1.selection_clear() popupMenu2.configure(state='active') popupMenu2.selection_clear() popupMenu3.configure(state='active') popupMenu3.selection_clear() messagebox.showinfo(MSG_SAUV_TITRE, MSG_SAUV_CONTENU) "------------------Information sur le produit-------------------------" self.ZoneInfoGen = LabelFrame(master, text=LBL_Z_INFO, width=LARGEUR_FRAME, height=80) self.ZoneInfoGen.grid(row=0, column=1, sticky=N + S + W + E) self.ZoneInfoGen.grid_propagate(0) self.lblSfc = Label(self.ZoneInfoGen, text=LBL_SFC) self.txtSfc = Entry(self.ZoneInfoGen, textvariable=sfc) self.txtSfc.focus_set() self.lblNomOperateur = Label(self.ZoneInfoGen, text=LBL_OPERATEUR) self.txtNomOperateur = Entry(self.ZoneInfoGen, textvariable=nomOperateur) self.lblSfc.grid(row=0, column=1, padx=PADX_LBL_INFO, pady=PADY_INFO) self.txtSfc.grid(row=0, column=2, ipadx=25, padx=PADX_INFO, pady=PADY_INFO) self.lblNomOperateur.grid(row=0, column=3, padx=PADX_LBL_INFO, pady=PADY_INFO) self.txtNomOperateur.grid(row=0, column=4, ipadx=25, padx=PADX_INFO, pady=PADY_INFO) "----------Information sur la ligne qui a produit le défaut-----------" self.ZoneLigne = LabelFrame(master, text=LBL_Z_LIGNE, width=LARGEUR_FRAME, height=80) self.ZoneLigne.grid(row=1, column=1) self.ZoneLigne.grid_propagate(0) Ligne1Var = StringVar(value="off") self.btnLigne1 = Radiobutton(self.ZoneLigne, text=NOM_LIGNE1, variable=Ligne1Var, indicatoron=False, value="Ligne1") Ligne2Var = StringVar(value="off") self.btnLigne2 = Radiobutton(self.ZoneLigne, text=NOM_LIGNE2, variable=Ligne2Var, indicatoron=False, value="Ligne2") self.btnLigne1.grid(row=0, column=1, ipadx=30, padx=PADX_BTN_LIGNE, pady=PADY_BTN_LIGNE) self.btnLigne2.grid(row=0, column=3, ipadx=30, padx=PADX_BTN_LIGNE, pady=PADY_BTN_LIGNE) if self.btnLigne2.state(): print(self.btnLigne2.state) if not self.btnLigne1.select(): print(self.btnLigne1.get()) "------------------Information sur le type de défaut-------------------" self.ZoneDefaut = LabelFrame(master, text=LBL_Z_DEF, width=LARGEUR_FRAME, height=130) self.ZoneDefaut.grid(row=2, column=1, sticky='NW') self.ZoneDefaut.grid_propagate(0) self.ZoneDefautInt = LabelFrame(self.ZoneDefaut, text=LBL_Z_DEF_INT, height=80, width=150) self.ZoneDefautInt.grid(row='0', column='1', padx=PADX_ZN_DEF, pady=PADY_ZN_DEF) self.ZoneDefautInt.grid_propagate(0) self.tkvar = StringVar(master) choices = {'Choix 1', 'Choix 2', 'Choix 3', 'Choix 4', 'Choix 5'} self.tkvar.set(VAL_DEF_CHOIX) popupMenu1 = OptionMenu(self.ZoneDefautInt, self.tkvar, *choices) Label(self.ZoneDefautInt, text=LBL_Z_DEF_CHOIX).grid(row=1, column=1) popupMenu1.grid(row=2, column=1, ipadx=30) self.ZoneDefautUFT = LabelFrame(self.ZoneDefaut, text=LBL_Z_DEF_UFT, height=80, width=150) self.ZoneDefautUFT.grid(row='0', column='2', padx=PADX_ZN_DEF, pady=PADY_ZN_DEF) self.ZoneDefautUFT.grid_propagate(0) self.tkvar1 = StringVar(master) choices = {'Choix 1', 'Choix 2', 'Choix 3', 'Choix 4', 'Choix 5'} self.tkvar1.set(VAL_DEF_CHOIX) popupMenu2 = OptionMenu(self.ZoneDefautUFT, self.tkvar1, *choices) Label(self.ZoneDefautUFT, text=LBL_Z_DEF_CHOIX).grid(row=1, column=1) popupMenu2.grid(row=2, column=1, ipadx=30) self.ZoneDefautEti = LabelFrame(self.ZoneDefaut, text=LBL_Z_DEF_ETI, height=80, width=150) self.ZoneDefautEti.grid(row='0', column='3', padx=PADX_ZN_DEF, pady=PADY_ZN_DEF) self.ZoneDefautEti.grid_propagate(0) self.tkvar2 = StringVar(master) choices = {'Choix 1', 'Choix 2', 'Choix 3', 'Choix 4', 'Choix 5'} self.tkvar2.set(VAL_DEF_CHOIX) popupMenu3 = OptionMenu(self.ZoneDefautEti, self.tkvar2, *choices) Label(self.ZoneDefautEti, text=LBL_Z_DEF_CHOIX).grid(row=1, column=1) popupMenu3.grid(row=2, column=1, ipadx=30) self.btnValider = Button(master, text="Valider", relief="raised", command=RecupValeur) self.btnValider.grid(row=3, column=1) self.tkvar.trace("w", callback) self.tkvar1.trace('w', callback2) self.tkvar2.trace('w', callback3)
def row_1(self, action=None): """ Name : CATEGORIES cols : 3 """ if action == "construct": # -- CREATE ROW -- # self.grid.row(width=self.width, height=500, padx=self.padx, pady=self.pady, bg="#ffffff") # -- CREATE COLS -- # self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=5, bg=None) self.grid.column(span=6, row=1, width=None, height=None, padx=None, pady=5, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=5, bg=None) self.grid.column(span=2, row=1, width=None, height=None, padx=None, pady=5, bg=None) elif action == "fill": # Get script txt = self.json_script.get("row_1") count = 0 for category in self.paging_categories[0:15]: """# -- COLUMN 1/5 : CATEGORY LANGUAGE -- # img = Image.open( "v2/frontend/resources/images/flags/{}.png" .format(category["language"]) ) imgResize = img.resize((20, 20), Image.ANTIALIAS) imgTkinter = ImageTk.PhotoImage(imgResize) w_language_flag = Label( self.grid.col_frames[2][0], image=imgTkinter, borderwidth=0, bg="#ffffff" ) w_language_flag.image = imgTkinter w_language_flag.pack(fill='both', expand=True)""" w_category_name = Label(self.grid.col_frames[1][1], anchor="w", pady=0, text=category["category_name"], bg="#ffffff", fg="#000000", font="Helvetica 10 bold") w_category_name.pack(fill='both', expand=True) w_category_product = Label(self.grid.col_frames[1][2], pady=0, text=category["category_products"], bg="#ffffff", fg="#000000", font="Helvetica 10 bold") w_category_product.pack(fill='both', expand=True) w_category_radio = Radiobutton(self.grid.col_frames[1][3], variable=self.var_category, value=category["category_id"], bg="#ffffff") w_category_radio.pack(fill='both', expand=True) # For UX DESIGN if count == 0: w_category_radio.select() count += 1 # self.w_language_flags.append(w_language_flag) self.w_category_names.append(w_category_name) self.w_category_products.append(w_category_product) self.w_category_radios.append(w_category_radio) elif action == "refresh": if len(self.w_language_flags) != 0: for tk_widget in self.w_language_flags: tk_widget.pack_forget() if len(self.w_category_names) != 0: for tk_widget in self.w_category_names: tk_widget.pack_forget() if len(self.w_category_products) != 0: for tk_widget in self.w_category_products: tk_widget.pack_forget() if len(self.w_category_radios) != 0: for tk_widget in self.w_category_radios: tk_widget.pack_forget()
def __init__(self, master, player1_var, player2_var): self.master = master self.player1_var = player1_var self.player2_var = player2_var master.title('Welcome to Connect Four') master.configure(background='white') label_player1 = Label(master, text="Player 1: ", font=("Helvetica", 16), background='white', fg='black') player1_manual = Radiobutton(master, text='Manual', variable=player1_var, value=1) player1_manual.select() player1_ai1 = Radiobutton(master, text='Easy AI', variable=player1_var, value=2) player1_ai1.deselect() player1_ai2 = Radiobutton(master, text='Normal AI', variable=player1_var, value=3) player1_ai2.deselect() player1_ai3 = Radiobutton(master, text='Hard AI', variable=player1_var, value=4) player1_ai3.deselect() label_player1.grid(row=0) player1_manual.grid(column=1, row=0) player1_ai1.grid(column=2, row=0) player1_ai2.grid(column=3, row=0) player1_ai3.grid(column=4, row=0) # labeling player 2 menu label_player2 = Label(master, text="Player 2: ", font=("Helvetica", 16), background='white', fg='black') # creating player 2 menu, including player2_manual = Radiobutton(master, text='Manual', variable=player2_var, value=1) player2_manual.select() player2_ai1 = Radiobutton(master, text='Easy AI', variable=player2_var, value=2) player2_ai1.deselect() player2_ai2 = Radiobutton(master, text='Normal AI', variable=player2_var, value=3) player2_ai2.deselect() player2_ai3 = Radiobutton(master, text='Hard AI', variable=player2_var, value=4) player2_ai3.deselect() # player 2 menu locating label_player2.grid(row=1) player2_manual.grid(column=1, row=1) player2_ai1.grid(column=2, row=1) player2_ai2.grid(column=3, row=1) player2_ai3.grid(column=4, row=1) # creating button = Button(master, text="GO!", command=self._start_game) button.grid(row=3)
class fen_info(Tk): """ Fenêtre permettant de saisir les informations sur les joueurs """ def __init__(self): super().__init__() # Initialisation des pions à la valeur initiale. self.pion1 = "X" self.pion2 = "O" # Titre de la fenêtre self.title("Ultimate TIC-TAC-TOE") # Pour changer taille minimum de fenêtre et taille centrer, # changer variable self.width_fen, self.height_fen. self.width_fen, self.height_fen = 430, 500 # Taille minimum de la fenêtre self.minsize(self.width_fen, self.height_fen) # Centrer la fenêtre. centreFen(self, self.width_fen, self.height_fen) # Création d'un canvas avec l'image "logo.gif" canvas = Canvas(self, width=280, height=100) self.img = PhotoImage(file="logo.gif") canvas.create_image(280, 100, anchor=SE, image=self.img) canvas.grid(row=0, columnspan=5, pady=10) # Libellé - Nouvelle Partie Label(self, text="Nouvelle partie", font=("Arial", 16), fg="#0080FF", justify=CENTER).grid( row=1, columnspan=5, padx = 20, pady = 5) separateur(20).grid(row=10,columnspan=5) # Sélection du type de partie avec bouton radio self.choixJoueur = IntVar() r1 = Radiobutton(self, text="Jouer avec l'ordinateur", variable = self.choixJoueur, value = 1, command=self.define_choix) r1.select() r1.grid(row=20, column=0) r2 = Radiobutton(self, text="Jouer avec un autre joueur", variable = self.choixJoueur, value = 2, command=self.define_choix) r2.grid(row=20, column=1) # Saisie du nom du joueur 1. f_j1 = Frame(self, borderwidth=1, padx=5, pady=5, relief=SUNKEN) f_j1.grid(row=30, columnspan=5, padx=5, pady=5) Label(f_j1, text="Nom joueur 1:").grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.nom_joueur1 = Entry(f_j1) self.nom_joueur1.grid(row=1,column=1) # Sélection du pion joueur 1. Le pion restant est automatiquement attribué au joueur 2. Label(f_j1, text="Choix de pion:").grid(row=1, column=2, padx=5) self.sel_pion=IntVar() p1 = Radiobutton(f_j1, indicatoron=0, width=5, text="X", variable=self.sel_pion, value=1, command=self.choix_pion) p1.grid(row=1, column=3, padx=2) p1.select() Radiobutton(f_j1, indicatoron=0, width=5, text="O", variable=self.sel_pion, value=2, command=self.choix_pion).grid(row=1, column=4, padx=2) # Saisie du nom du joueur 2. Apparaît seulement si on sélection 2 joueurs. Voir define_choix self.f_j2 = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) Label(self.f_j2, text="Nom joueur 2").grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.nom_joueur2 = Entry(self.f_j2, state="disabled") self.nom_joueur2.grid(row=1, column=1) self.label_pion2 = Label(self.f_j2, text="Pion Joueur 2 = O") self.label_pion2.grid(row=1, column=2, padx=5) # Information sur l'ordinateur. Disparaît si on choisi 2 joueurs. self.f_ordi = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) self.f_ordi.grid(row=40, columnspan=5, padx=5, pady=5) Label(self.f_ordi, text="Ordinateur = Colosse", font=("Arial", 12), fg="#0080FF")\ .grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.pion_ordi = Label(self.f_ordi, text="| Pion de l'ordinateur = O", font=("Arial", 12), fg="#0080FF") self.pion_ordi.grid(row=1, column=2) separateur(20).grid(row=50,columnspan=5) # Sélection de la force de l'ordinateur self.choixForce = IntVar() self.f1 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Facile", variable=self.choixForce, value=1, command=self.define_choix) self.f1.select() self.f1.grid(row=60, columnspan=5) self.f2 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Moyen", variable=self.choixForce, value=2, command=self.define_choix) self.f2.grid(row=61, columnspan=5) self.f3 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Difficile", variable=self.choixForce, value=3, command=self.define_choix) self.f3.grid(row=62, columnspan=5) separateur(40).grid(row=70, column=0) #Button pour démarrer la partie self.bt_start = Button(text="Démarrer", font=("Arial", 12), fg="green", command=self.demarrer_jeu) self.bt_start.grid(row=80, columnspan=5) def define_choix(self): """ Fonction qui active ou désactive le nom du joueur 2 selon si on joue contre l'ordinateur ou contre un autre joueur """ if self.choixJoueur.get()==1: self.nom_joueur2.delete(0, END) self.nom_joueur2["state"]="disabled" self.f1["state"]="normal" self.f2["state"]="normal" self.f3["state"]="normal" self.f_j2.grid_remove() self.f_ordi.grid(row=40, columnspan=5, padx=5, pady=5) elif self.choixJoueur.get()==2: self.nom_joueur2["state"]="normal" self.f1["state"]="disabled" self.f2["state"]="disabled" self.f3["state"]="disabled" self.f_j2.grid(row=40, columnspan=5, padx=5, pady=5) self.f_ordi.grid_remove() def choix_pion(self): # Définition des pions if self.sel_pion.get()==1: self.pion1="X" self.pion2="O" self.label_pion2["text"]="Pion Joueur 2 = {}".format(self.pion2) self.pion_ordi["text"]="| Pion de l'ordinateur = {}".format(self.pion2) else: self.pion1="O" self.pion2="X" self.label_pion2["text"]="Pion Joueur 2 = {}".format(self.pion2) self.pion_ordi["text"]="| Pion de l'ordinateur = {}".format(self.pion2) def demarrer_jeu(self): """ Démarrer la partie avec les informations saisie. Afficher le plateau """ if self.choixJoueur.get()==1: type2 = "Ordinateur" if self.nom_joueur1.get()!='': j1 = self.nom_joueur1.get() j2 = "Colosse" else: j1 = "Joueur 1" j2 = "Colosse" elif self.choixJoueur.get()==2: type2 = "Personne" if self.nom_joueur1.get()!='' and self.nom_joueur2.get()!='': j1 = self.nom_joueur1.get() j2 = self.nom_joueur2.get() elif self.nom_joueur1.get()=='': j1 = "Joueur 1" if self.nom_joueur2.get()=='': j2 = "Joueur 2" else: j2 = self.nom_joueur2.get() else: j1 = self.nom_joueur1.get() if self.nom_joueur2.get()=='': j2 = "Joueur 2" else: j2 = self.nom_joueur2.get() p1 = self.pion1 p2 = self.pion2 force = self.choixForce.get() self.destroy() ma_fenetre = Fenetre(j1, j2, type2, p1, p2, force) ma_fenetre.mainloop()
class MainWindow(object): """Handles all the configuration and starts flashing window Args: master: Tkinter root window """ def __init__(self, master: Tk): self.master = master master.title('P300 speller configuration') self.p300_window = None # Variables self.usable_images = [] self.image_labels = [] self.flash_sequence = [] self.flash_image = None self.sequence_number = 0 self.lsl_output = None self.config = ConfigParams() # Widget definition self.changeable_widgets = [] self.config_file_label = Label(self.master, text='Config File:') self.config_file_label.grid(row=0, column=0) self.config_file_entry = Entry(self.master, textvariable=self.config.config_file_path) self.config_file_entry.grid(row=0, column=1, sticky=EW) self.changeable_widgets.append(self.config_file_entry) self.open_conf_btn = Button(self.master, text='Open config file', command=lambda: self.open_file_update_entry(self.config.config_file_path)) self.open_conf_btn.grid(row=0, column=2, sticky=EW) self.changeable_widgets.append(self.open_conf_btn) self.use_conf_btn = Button(self.master, text='Apply', command=self.config.read_from_file) self.use_conf_btn.grid(row=0, column=3) self.changeable_widgets.append(self.use_conf_btn) self.save_settings_btn = Button(self.master, text='Save', command=self.config.save_to_file) self.save_settings_btn.grid(row=0, column=4) self.changeable_widgets.append(self.save_settings_btn) self.images_folder_label = Label(self.master, text='Images folder:') self.images_folder_label.grid(row=1, column=0) self.images_folder_entry = Entry(self.master, textvariable=self.config.images_folder_path) self.images_folder_entry.grid(row=1, column=1, sticky=EW) self.changeable_widgets.append(self.images_folder_entry) self.open_images_dir_btn = Button(self.master, text='Open image folder', command=lambda: self.open_folder_update_entry( self.config.images_folder_path)) self.open_images_dir_btn.grid(row=1, column=2, sticky=EW) self.changeable_widgets.append(self.open_images_dir_btn) self.flash_image_label = Label(self.master, text='Flash image:') self.flash_image_label.grid(row=2, column=0) self.flash_image_file_entry = Entry(self.master, textvariable=self.config.flash_image_path) self.flash_image_file_entry.grid(row=2, column=1, sticky=EW) self.changeable_widgets.append(self.flash_image_file_entry) self.open_flash_dir_btn = Button(self.master, text='Open image', command=lambda: self.open_file_update_entry( self.config.flash_image_path)) self.open_flash_dir_btn.grid(row=2, column=2, sticky=EW) self.changeable_widgets.append(self.open_flash_dir_btn) self.imagesize_label = Label(self.master, text='Imagesize (px):') self.imagesize_label.grid(row=3, column=0) self.imagesize_entry = Entry(self.master, textvariable=self.config.imagesize) self.imagesize_entry.grid(row=3, column=1, sticky=W) self.changeable_widgets.append(self.imagesize_entry) self.number_of_rows_label = Label(self.master, text='Number of rows:') self.number_of_rows_label.grid(row=4, column=0) self.number_of_rows_entry = Entry(self.master, textvariable=self.config.number_of_rows) self.number_of_rows_entry.grid(row=4, column=1, sticky=W) self.changeable_widgets.append(self.number_of_rows_entry) self.number_of_columns_label = Label(self.master, text='Number of columns:') self.number_of_columns_label.grid(row=5, column=0) self.number_of_columns_entry = Entry(self.master, textvariable=self.config.number_of_columns) self.number_of_columns_entry.grid(row=5, column=1, sticky=W) self.changeable_widgets.append(self.number_of_columns_entry) self.lsl_streamname_label = Label(self.master, text='LSL Streamname:') self.lsl_streamname_label.grid(row=6, column=0) self.lsl_streamname_entry = Entry(self.master, textvariable=self.config.lsl_streamname) self.lsl_streamname_entry.grid(row=6, column=1, sticky=W) self.changeable_widgets.append(self.lsl_streamname_entry) self.flash_duration_label = Label(self.master, text='Flash duration (ms):') self.flash_duration_label.grid(row=7, column=0) self.flash_duration_entry = Entry(self.master, textvariable=self.config.flash_duration) self.flash_duration_entry.grid(row=7, column=1, sticky=W) self.changeable_widgets.append(self.flash_duration_entry) self.break_duration_label = Label(self.master, text='Break duration (ms):') self.break_duration_label.grid(row=8, column=0) self.break_duration_entry = Entry(self.master, textvariable=self.config.break_duration) self.break_duration_entry.grid(row=8, column=1, sticky=W) self.changeable_widgets.append(self.break_duration_entry) self.flash_mode_label = Label(self.master, text='Flashmode:') self.flash_mode_label.grid(row=9, column=0) self.flash_mode_1_rb = Radiobutton(self.master, text='Rows and Columns (Sequence not pseudorandom yet!)', variable=self.config.flash_mode, value=1) self.flash_mode_1_rb.grid(row=9, column=1, sticky=W) self.changeable_widgets.append(self.flash_mode_1_rb) self.flash_mode_2_rb = Radiobutton(self.master, text='Single images', variable=self.config.flash_mode, value=2) self.flash_mode_2_rb.grid(row=10, column=1, sticky=W) self.changeable_widgets.append(self.flash_mode_2_rb) self.set_flash_mode_rbs() self.text_console = Text(self.master) self.text_console.grid(row=11, column=0, rowspan=4, columnspan=5) self.text_console.configure(state='disabled') self.close_button = Button(self.master, text='Close', command=master.quit) self.close_button.grid(row=15, column=0) self.open_button = Button(self.master, text='Open', command=self.open_p300_window) self.open_button.grid(row=15, column=3) self.changeable_widgets.append(self.open_button) def set_flash_mode_rbs(self): if self.config.flash_mode.get() is 1: self.flash_mode_1_rb.select() else: self.flash_mode_2_rb.select() def open_folder_update_entry(self, entry_var): new_path = filedialog.askdirectory() if new_path is not '': entry_var.set(new_path) def open_file_update_entry(self, entry_var): new_path = filedialog.askopenfilename() if new_path is not '': entry_var.set(new_path) def print_to_console(self, text_to_print): if not isinstance(text_to_print, str): text_to_print = str(text_to_print) self.text_console.configure(state='normal') self.text_console.insert('end', text_to_print + '\n') self.text_console.configure(state='disabled') def disable_all_widgets(self): for widget in self.changeable_widgets: widget.configure(state='disabled') self.master.iconify() def enable_all_widgets(self): for widget in self.changeable_widgets: widget.configure(state='normal') self.master.deiconify() def open_p300_window(self): p300_window_master = Toplevel(self.master) self.p300_window = P300Window(p300_window_master, self, self.config) self.disable_all_widgets()
class TelaPontos(): #================================================================== #= Métodos que envolvem a criação e posicionamento de widgets #= na janela #================================================================== def __init__(self, janela, jAnterior): self.janela = janela self.jAnterior = jAnterior # Essas são as listas onde ficarão todos os pontos que serão # passados para a classe de ajuste de curvas. self.px = [] self.py = [] self.sx = [] self.sy = [] self.opt = IntVar() # Criação de widgets self.texto = Label(self.janela, text="Selecione o modo de entrada dos pontos.", bg="azure2") self.btn_fit = Button(self.janela, text="Ok", command=self.radio_choice, bg="LightSkyBlue4", width=5) self.btn_cancel = Button(self.janela, text="Voltar", command=self.voltar, bg="LightSkyBlue4") self.radio_escolha_arquivo = Radiobutton(self.janela, variable=self.opt, value=1, text="Arquivo", bg="azure2", width=14, anchor="w") self.radio_escolha_texto = Radiobutton(self.janela, variable=self.opt, value=2, text="Copiar do excel", bg="azure2", width=14, anchor="w") self.radio_inserir_pontos = Radiobutton(self.janela, variable=self.opt, value=3, text="Valores", bg="azure2", width=14, anchor="w") self.radio_inserir_pontos.select() self.tip = Label(self.janela, text="?", bg="LightSkyBlue4", width=3) #== Posicionamento de widgets self.redesenhar() ToolTip( self.tip, "Valores: Insere um ponto de cada vez\nArquivo: Lê um arquivo csv.\nCopiar do excel: Lê os valores copiados das tabelas de um arquivo Excel\n\nObs: Todos em todas as opções de entrada os pontos devem ser colocados\nno formato: X, Y, Erro de X, Erro de Y." ) ''' self.frm_upper.pack() self.frm_down.pack(side=BOTTOM) self.frm_radio.pack(side=RIGHT) self.radio_inserir_pontos.grid(row=0, column=3) self.radio_escolha_arquivo.grid(row=1, column=3) self.radio_escolha_texto.grid(row=2, column=3) self.btn_fit.grid(row=4, column=4) self.btn_cancel.grid(row=4, column=0) ''' #================================================================== #=Função para limpar a janela atual e chamar a janela dos gráficos. #=Os pontos lidos são passados para o construtor def proxJanelaGrafico(self): self.limparJanela() TelaGrafico(self.janela, self, self.px, self.sx, self.py, self.sy) #================================================================== def voltar(self): self.limparJanela() self.jAnterior.redesenhar() #================================================================== def redesenhar(self): # Posicionamento de widgets self.janela.geometry("325x300+400+200") self.texto.place(x=13, y=4) self.tip.place(x=287, y=4) tam = 90 self.radio_inserir_pontos.place(x=tam, y=30) self.radio_escolha_arquivo.place(x=tam, y=52) self.radio_escolha_texto.place(x=tam, y=74) self.btn_fit.place(x=161, y=260) self.btn_cancel.place(x=91, y=260) #================================================================== def limparJanela(self): # Limpando os widgets self.texto.place_forget() self.tip.place_forget() self.btn_fit.place_forget() self.btn_cancel.place_forget() self.texto.place_forget() self.radio_escolha_arquivo.place_forget() self.radio_escolha_texto.place_forget() self.radio_inserir_pontos.place_forget() #================================================================== #================================================================== #================================================================== #=Janela da caixa de texto. Nela, existe uma caixa de texto para onde #=os pontos devem ser copiados no formato x - erro x - y - erro y def get_by_text(self): top_txt = Toplevel() top_txt.resizable(False, False) top_txt.title("Pontos") top_txt.configure(background="azure2") #= Criação de widgets txt_entry = Text(top_txt) frm_btn = Frame(top_txt, bd=10, bg="azure2") btn_cancel = Button(frm_btn, text="Cancelar", command=top_txt.destroy, bg="LightSkyBlue4", width=5) #= Posicionamento de widgets txt_entry.pack() frm_btn.pack(side=BOTTOM) btn_cancel.pack(side=LEFT) #================================================================ #= Função que valida o conteúdo da Text Entry e recebe os pontos #= (chamada ao clicar no botão) def get_pontos(): self.txt_pontos = txt_entry.get("1.0", END) try: self.px, self.py, self.sx, self.sy = ler_excel( self.txt_pontos) #método ler_excel do módulo reader top_txt.destroy() self.proxJanelaGrafico() except ValueError: messagebox.showwarning("Erro!", "Valores inseridos incorretamente") #============================== #= Criação & posicionamento Button(frm_btn, text="OK", command=get_pontos, bg="LightSkyBlue4", width=5).pack(side=RIGHT) #================================================================== # Função para criar um novo conjunto de entradas para os pontos e erros def append_labels(self, janela): self.labels.append(Label(janela, text="X", background="azure2")) self.labels[-1].grid(row=self.tam, column=0) self.labels.append(Label(janela, text="Y", background="azure2")) self.labels[-1].grid(row=self.tam, column=2) self.labels.append(Label(janela, text="Erro X", background="azure2")) self.labels[-1].grid(row=self.tam, column=4) self.labels.append(Label(janela, text="Erro Y", background="azure2")) self.labels[-1].grid(row=self.tam, column=6) #================================================== self.inserts.append(Entry(janela, width=10)) self.inserts[-1].grid(row=self.tam, column=1) self.inserts.append(Entry(janela, width=10)) self.inserts[-1].grid(row=self.tam, column=3) self.inserts.append(Entry(janela, width=10)) self.inserts[-1].grid(row=self.tam, column=5) self.inserts.append(Entry(janela, width=10)) self.inserts[-1].grid(row=self.tam, column=7) self.tam += 1 #====================================================== #= Função que itera pelas caixas de texto recebidas #= e passa todos os pontos e erros para as listas #= de pontos e erros def salvar_pontos(self): try: self.px, self.py, self.sx, self.sy = validar_pontos(self.inserts) self.proxJanelaGrafico() self.top_pontos.destroy() except ValueError: messagebox.showwarning("Erro!", "Valores inseridos incorretamente") #self.top_pontos.destroy() #====================================================== #= Janela onde os pontos serão inseridos manualmente def janela_Inserir_Pontos(self): self.top_pontos = Toplevel(bd=10) self.top_pontos.resizable(False, False) self.top_pontos.title("Pontos") self.top_pontos.configure(background="azure2") self.tam = 0 self.labels = [] self.inserts = [] #= Criação de widgets frame_pontos = Frame(self.top_pontos, height=300, width=500, bd=10, background="azure2") btn_add = Button(self.top_pontos, text="Adicionar ponto", bg="LightSkyBlue4") btn_cancel = Button(self.top_pontos, text="Cancelar", command=self.top_pontos.destroy, bg="LightSkyBlue4", width=5) btn_add["command"] = partial(self.append_labels, frame_pontos) btn_ok = Button(self.top_pontos, text="Ok", command=self.salvar_pontos, bg="LightSkyBlue4", width=5) #= Posicionamento de widgets frame_pontos.pack(side=BOTTOM) btn_add.pack(side=RIGHT) btn_ok.pack(side=LEFT) btn_cancel.pack(side=LEFT) #= Cria o primeiro conjunto de entradas self.append_labels(frame_pontos) #================================================================== #= Função que define qual método de inserção será chamado, depenendo #= do radio button selecionado def radio_choice(self): if (self.opt.get() == 1): self.get_File() elif (self.opt.get() == 2): self.get_by_text() elif (self.opt.get() == 3): self.janela_Inserir_Pontos() #================================================================== #= Função para o método através do arquivo csv. Abre uma caixa que #= solicita um arquivo e passa seu caminho para a função ler_csv #= do módulo reader. def get_File(self): filename = filedialog.askopenfilename(filetypes=[("arquivo csv", "*.csv")]) if filename: self.px, self.py, self.sx, self.sy = ler_csv(filename) self.proxJanelaGrafico()
def init_gui(self): """init helper""" #setting up frames top_frame = Frame(self.root) mid_frame = Frame(self.root) radio_frame = Frame(self.root) res_frame = Frame(self.root) msg_frame = Frame(self.root) check_frame = Frame(self.root) history_frame = Frame(self.root) btn_frame = Frame(self.root) rating_frame = Frame(self.root) top_frame.pack(side=TOP, fill=X) mid_frame.pack(side=TOP, fill=X) history_frame.pack(side=TOP, fill=BOTH, expand=True) radio_frame.pack(side=TOP, fill=BOTH, expand=True) rating_frame.pack(side=TOP, fill=BOTH, expand=True) res_frame.pack(side=TOP, fill=BOTH, expand=True) check_frame.pack(side=TOP, fill=BOTH, expand=True) msg_frame.pack(side=TOP, fill=BOTH, expand=True) btn_frame.pack(side=TOP, fill=X) #Message ListBox rightscrollbar = Scrollbar(msg_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(msg_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.lbMessages = Listbox(msg_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white") self.lbMessages.pack(expand=True, fill=BOTH) rightscrollbar.config(command=self.lbMessages.yview) bottomscrollbar.config(command=self.lbMessages.xview) #History ListBoxes rightscrollbar2 = Scrollbar(history_frame) rightscrollbar2.pack(side=RIGHT, fill=Y) bottomscrollbar2 = Scrollbar(history_frame, orient=HORIZONTAL) bottomscrollbar2.pack(side=BOTTOM, fill=X) self.showhistory = Listbox(history_frame, yscrollcommand=rightscrollbar2.set, xscrollcommand=bottomscrollbar2.set, bg="white") self.showhistory.pack(expand=True, fill=BOTH) rightscrollbar2.config(command=self.showhistory.yview) bottomscrollbar2.config(command=self.showhistory.xview) self.showhistory.bind('<Double-Button-1>', self.select_recent_file) self.set_history_window() #status bar self.status = Label(self.root, text="", bd=1, relief=SUNKEN, anchor=W) self.status.pack(side=BOTTOM, fill=X) #labels self.lblRatingLabel = Label(rating_frame, text='Rating:') self.lblRatingLabel.pack(side=LEFT) self.lblRating = Label(rating_frame, textvariable=self.rating) self.lblRating.pack(side=LEFT) Label(mid_frame, text='Recently Used:').pack(side=LEFT) Label(top_frame, text='Module or package').pack(side=LEFT) #file textbox self.txtModule = Entry(top_frame, background='white') self.txtModule.bind('<Return>', self.run_lint) self.txtModule.pack(side=LEFT, expand=True, fill=X) #results box rightscrollbar = Scrollbar(res_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(res_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.results = Listbox(res_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white", font="Courier") self.results.pack(expand=True, fill=BOTH, side=BOTTOM) rightscrollbar.config(command=self.results.yview) bottomscrollbar.config(command=self.results.xview) #buttons Button(top_frame, text='Open', command=self.file_open).pack(side=LEFT) Button(top_frame, text='Open Package', command=(lambda: self.file_open(package=True))).pack(side=LEFT) self.btnRun = Button(top_frame, text='Run', command=self.run_lint) self.btnRun.pack(side=LEFT) Button(btn_frame, text='Quit', command=self.quit).pack(side=BOTTOM) #radio buttons self.information_box = IntVar() self.convention_box = IntVar() self.refactor_box = IntVar() self.warning_box = IntVar() self.error_box = IntVar() self.fatal_box = IntVar() i = Checkbutton(check_frame, text="Information", fg=COLORS['(I)'], variable=self.information_box, command=self.refresh_msg_window) c = Checkbutton(check_frame, text="Convention", fg=COLORS['(C)'], variable=self.convention_box, command=self.refresh_msg_window) r = Checkbutton(check_frame, text="Refactor", fg=COLORS['(R)'], variable=self.refactor_box, command=self.refresh_msg_window) w = Checkbutton(check_frame, text="Warning", fg=COLORS['(W)'], variable=self.warning_box, command=self.refresh_msg_window) e = Checkbutton(check_frame, text="Error", fg=COLORS['(E)'], variable=self.error_box, command=self.refresh_msg_window) f = Checkbutton(check_frame, text="Fatal", fg=COLORS['(F)'], variable=self.fatal_box, command=self.refresh_msg_window) i.select() c.select() r.select() w.select() e.select() f.select() i.pack(side=LEFT) c.pack(side=LEFT) r.pack(side=LEFT) w.pack(side=LEFT) e.pack(side=LEFT) f.pack(side=LEFT) #check boxes self.box = StringVar() # XXX should be generated report = Radiobutton(radio_frame, text="Report", variable=self.box, value="Report", command=self.refresh_results_window) rawMet = Radiobutton(radio_frame, text="Raw metrics", variable=self.box, value="Raw metrics", command=self.refresh_results_window) dup = Radiobutton(radio_frame, text="Duplication", variable=self.box, value="Duplication", command=self.refresh_results_window) ext = Radiobutton(radio_frame, text="External dependencies", variable=self.box, value="External dependencies", command=self.refresh_results_window) stat = Radiobutton(radio_frame, text="Statistics by type", variable=self.box, value="Statistics by type", command=self.refresh_results_window) msgCat = Radiobutton(radio_frame, text="Messages by category", variable=self.box, value="Messages by category", command=self.refresh_results_window) msg = Radiobutton(radio_frame, text="Messages", variable=self.box, value="Messages", command=self.refresh_results_window) report.select() report.grid(column=0, row=0, sticky=W) rawMet.grid(column=1, row=0, sticky=W) dup.grid(column=2, row=0, sticky=W) msg.grid(column=3, row=0, sticky=E) stat.grid(column=0, row=1, sticky=W) msgCat.grid(column=1, row=1, sticky=W) ext.grid(column=2, row=1, columnspan=2, sticky=W) #dictionary for check boxes and associated error term self.msg_type_dict = { 'I': lambda: self.information_box.get() == 1, 'C': lambda: self.convention_box.get() == 1, 'R': lambda: self.refactor_box.get() == 1, 'E': lambda: self.error_box.get() == 1, 'W': lambda: self.warning_box.get() == 1, 'F': lambda: self.fatal_box.get() == 1 } self.txtModule.focus_set()
entrySrcPath = Entry(root, textvariable=srcPath, width=60) entrySrcPath.grid(row=0, column=1, columnspan=2, sticky=E) buttonSrcPath = Button(root, text="目录选择", width=10, command=selectSrcPath) buttonSrcPath.grid(row=0, column=3, sticky=E) labelDesPath = Label(root, text="输出目录:") labelDesPath.grid(row=1, column=0, sticky=W) entryDesPath = Entry(root, textvariable=desPath, width=60) entryDesPath.grid(row=1, column=1, columnspan=2, sticky=E) buttonDesPath = Button(root, text="目录选择", width=10, command=selectDesPath) buttonDesPath.grid(row=1, column=3, sticky=E) RadioYM = Radiobutton( root, text="按月分类", variable=radioVar, value=1) RadioYM.grid(row=2, column=1, sticky=W) RadioYM.select() RadioYMD = Radiobutton( root, text="按天分类", variable=radioVar, value=2) RadioYMD.grid(row=2, column=2, sticky=W) buttonSort = Button(root, text="开始", width=10, command=sort) buttonSort.grid(row=2, column=3, sticky=E) logText = ScrolledText(root) logText.grid(row=3, columnspan=4, sticky=W) logText.insert(END, '\n\n') logText.insert( END, ' ================说明====================\n\n\n\n') logText.insert(END, '1、把待整理目录下所有文件按时间分类,并拷贝到输出目录下按(月/天)分目录保存\n\n') logText.insert(END, '2、如果文件为照片,且带有EXIF信息,则按EXIF中的照片拍摄时间信息进行分类\n')
class ProductFavorite(): def __init__( self, container=None, displayer=None, session=None ): """ 'container' (Obj ): instance of Container. 'displayer' (obj ): instance of Displayer. 'session,' (obj ): instance of Session. 'grid' (Obj ): instance of Grid. 'f_container' (Frame): container frame. 'm_frame' (Frame): master frame of view. 'name' (str ): name of view. 'json_script' (dict ): json dict of script. 'width' (int ): view width. 'height' (int ): view height. 'padx' (int ): view 'pady' (int ): view 'bg' (str ): view bg. """ # Instances self.container = container self.displayer = displayer self.session = session self.grid = None # Frames self.f_container = self.container.f_container self.m_frame = None # Informations self.name = None # Script self.json_script = None # Style Sheet self.width = self.container.width self.height = self.container.height self.padx = 0 self.pady = 0 self.bg = "#ffffff" # Tk control variables self.var_product_id = IntVar() # Widgets row 0 self.var_paging_label = StringVar() self.w_paging_txt = None self.w_paging_previous = None self.w_paging_next = None # Widgets row 1 & 2 self.w_img_products = [] self.w_product_names = [] self.w_product_radios = [] # Widgets row 3 self.w_submit_button = None self.favorites = [] self.favorites_count = 0 # Paging self.page = 0 self.pages = 0 self.p_start = None self.p_stop = None self.favorites = None # Fill status self.fill_status = False # Previous View in **kwargs self.previous_view = None # -- Displayer initialisation -- # self.construct() def construct(self, **kwargs): """ Construt view. to not fill the view during initialization. 'grid' (obj): Instance of Grid. 'm_frame' (Frame): Tkinter master frame of view. """ # 1. Create new grid in page container. self.grid = Grid( frame=self.f_container, width=self.width, height=self.height, padx=self.padx, pady=self.pady, bg=self.bg ) # 2. Get view frame for displayer function self.m_frame = self.grid.master_frame # 3. Construct the view rows self.row_0(action="construct") self.row_1(action="construct") self.row_2(action="construct") self.row_3(action="construct") def fill(self, **kwargs): """ Fill the view rows. 'json_script' (dict): texts for view. 'name' (str): view name. """ for key, value in kwargs.items(): if key == "view": self.previous_view = value # 1. Get the script. self.json_script = self.session.get_script( package_name="product", file_name="favorite" ) # 2. Save name of view for displayer. self.name = self.json_script.get("view_name") self.favorites = self.session.dbmanager.db_user_prod.read( user_id=self.session.user_id ) # Count products self.favorites_count = len(self.favorites) self.page = 0 self.pages = int(self.favorites_count / 6) self.paging_favorites = self.favorites[0:6] # 3. Refresh rows. if self.fill_status is True: self.row_0(action="refresh") self.row_1(action="refresh") self.row_2(action="refresh") self.row_3(action="refresh") # 4. Fill the view rows. self.row_0(action="fill") self.row_1(action="fill") self.row_2(action="fill") self.row_3(action="fill") self.fill_status = True if len(self.favorites) == 0: self.display_empty() return 0 def paging(self, p_action=None): """ 'current_page' (int ): Nunber of current page. 'action' (str ): Next or Previous 'elements_per_page' (int ): Number of element per page. 'list_start' (int ): 'list_stop' (int ): 'list' (list): List to cut. """ # Paging if p_action == "next": self.page = self.page + 1 elif p_action == "previous": self.page = self.page - 1 self.p_start = int( self.page * 6 ) self.p_stop = int( self.p_start + 6 ) self.paging_favorites = self.favorites[self.p_start:self.p_stop] self.row_0(action="refresh") self.row_1(action="refresh") self.row_2(action="refresh") self.row_1(action="fill") self.row_2(action="fill") def paging_next(self): """ Paging. """ test = self.page + 1 if test <= self.pages: self.paging( p_action="next" ) def paging_prev(self): """ Paging. """ test = self.page - 1 if test >= 0: self.paging( p_action="previous" ) def display_previous(self): """ Display previous view. """ self.displayer.display( c_view="product_favorite", f_view=self.previous_view ) def display_product_sheet(self): """ Display product sheet. """ self.product_id = self.var_product_id.get() self.displayer.display( c_view="product_favorite", f_view="product_sheet", product_id=self.product_id ) def display_empty(self): """ Display product sheet. """ self.displayer.display( c_view="product_favorite", f_view="empty", page="search_engine" ) def row_0(self, action=None): """ Name : PAGING cols : 0 """ if action == "construct": # -- CREATE ROW -- # self.grid.row( width=self.width, height=40, padx=self.padx, pady=self.pady, bg="#E3E9ED" ) self.grid.column( span=9, row=0, width=None, height=None, padx=None, pady=None, bg=None ) self.grid.column( span=1, row=0, width=None, height=None, padx=None, pady=None, bg=None ) self.grid.column( span=2, row=0, width=None, height=None, padx=None, pady=None, bg=None ) elif action == "fill": # Get script txt = self.json_script.get("row_0") # -- COLUMN 1/3 : EMPTY -- # if self.w_paging_txt is None: self.var_paging_label.set( "{} {} / {}".format( txt.get("paging_label"), self.page, self.pages ) ) self.w_paging_txt = Label( self.grid.col_frames[0][0], anchor="w", pady=5, padx=5, textvariable=self.var_paging_label, bg="#E3E9ED", fg="#000000", font="Helvetica 10 bold" ) self.w_paging_txt.pack(fill='both', expand=True) # -- COLUMN 2/3 : PAGING BUTTON -- # if self.w_paging_previous is None: self.w_paging_previous = Button( self.grid.col_frames[0][2], text=txt.get("paging_prev"), fg="#ffffff", bg="#6B7379", activeforeground="#ffffff", activebackground="#6B7379", command=self.paging_prev ) self.w_paging_previous.pack(side="left", expand=True) # -- COLUMN 2/3 : PAGING BUTTON -- # if self.w_paging_next is None: self.w_paging_next = Button( self.grid.col_frames[0][2], text=txt.get("paging_next"), fg="#ffffff", bg="#1D262D", activeforeground="#ffffff", activebackground="#1D262D", command=self.paging_next ) self.w_paging_next.pack(side="right", expand=True) elif action == "refresh": # Get script txt = self.json_script.get("row_0") self.var_paging_label.set( "{} {} / {}".format( txt.get("paging_label"), self.page, self.pages ) ) def row_1(self, action=None): """ Name : PRODUCT 0 - 3 cols : 1 """ if action == "construct": # -- CREATE ROW -- # self.grid.row( width=self.width, height=270, padx=self.padx, pady=self.pady, bg="#ffffff" ) # -- CREATE COLS -- # self.grid.column( span=4, row=1, width=None, height=None, padx=None, pady=None, bg=None ) self.grid.column( span=4, row=1, width=None, height=None, padx=None, pady=None, bg=None ) self.grid.column( span=4, row=1, width=None, height=None, padx=None, pady=None, bg=None ) elif action == "fill": # Get texts for this row txt = self.json_script.get("row_1") count = 0 for product in self.paging_favorites[0:3]: # -- COLUMN 1 : PRODUCT IMAGE -- # if product.get("product_img_url") == "empty": img = Image.open( "frontend/images/views/search/no_image.png" ) else: req = requests.get(product.get("product_img_url")) img = Image.open(BytesIO(req.content)) img_resize = img.resize((125, 160), Image.ANTIALIAS) tk_img_product = ImageTk.PhotoImage(img_resize) self.w_img_product = Label( self.grid.col_frames[1][count], image=tk_img_product, bg="#ffffff" ) self.w_img_product.image = tk_img_product self.w_img_product.pack(expand=True) # -- COLUMN 1 : PRODUCT NAME -- # self.w_product_name = Label( self.grid.col_frames[1][count], text="{}".format(product.get("product_name")), anchor="n", bg="#ffffff", font="Helvetica 10 bold" ) self.w_product_name.pack(expand=True) # -- COLUMN 1 : PRODUCT RADIO -- # self.w_product_radio = Radiobutton( self.grid.col_frames[1][count], variable=self.var_product_id, value=product.get("product_id"), bg="#ffffff" ) self.w_product_radio.pack(fill="x", expand=True) # For UX DESIGN if count == 0: self.w_product_radio.select() self.w_img_products.append( self.w_img_product ) self.w_product_names.append( self.w_product_name ) self.w_product_radios.append( self.w_product_radio ) count += 1 elif action == "refresh": if len(self.w_img_products) != 0: for w_img_product in self.w_img_products: w_img_product.pack_forget() if len(self.w_product_names) != 0: for w_product_name in self.w_product_names: w_product_name.pack_forget() if len(self.w_product_radios) != 0: for w_product_radio in self.w_product_radios: w_product_radio.pack_forget() self.w_img_products = [] self.w_product_names = [] self.w_product_radios = [] def row_2(self, action=None): """ Name : PRODUCT 3 - 6 cols : 1 """ if action == "construct": # -- CREATE ROW -- # self.grid.row( width=self.width, height=270, padx=self.padx, pady=self.pady, bg="#ffffff" ) # -- CREATE COLS -- # self.grid.column( span=4, row=2, width=None, height=None, padx=None, pady=None, bg=None ) self.grid.column( span=4, row=2, width=None, height=None, padx=None, pady=None, bg=None ) self.grid.column( span=4, row=2, width=None, height=None, padx=None, pady=None, bg=None ) elif action == "fill": # Get texts for this row txt = self.json_script.get("row_2") count = 0 for product in self.paging_favorites[3:6]: # -- COLUMN 1 : PRODUCT IMAGE -- # if product.get("product_img_url") == "empty": img = Image.open( "frontend/images/views/search/no_image.png" ) else: req = requests.get(product.get("product_img_url")) img = Image.open(BytesIO(req.content)) img_resize = img.resize((125, 160), Image.ANTIALIAS) tk_img_product = ImageTk.PhotoImage(img_resize) self.w_img_product = Label( self.grid.col_frames[2][count], image=tk_img_product, bg="#ffffff" ) self.w_img_product.image = tk_img_product self.w_img_product.pack(expand=True) # -- COLUMN 1 : PRODUCT NAME -- # self.w_product_name = Label( self.grid.col_frames[2][count], text="{}".format(product.get("product_name")), anchor="n", bg="#ffffff", font="Helvetica 10 bold" ) self.w_product_name.pack(expand=True) # -- COLUMN 1 : PRODUCT RADIO -- # self.w_product_radio = Radiobutton( self.grid.col_frames[2][count], variable=self.var_product_id, value=product.get("product_id"), bg="#ffffff" ) self.w_product_radio.pack(fill="x", expand=True) self.w_img_products.append( self.w_img_product ) self.w_product_names.append( self.w_product_name ) self.w_product_radios.append( self.w_product_radio ) count += 1 elif action == "refresh": if len(self.w_img_products) != 0: for w_img_product in self.w_img_products: w_img_product.pack_forget() if len(self.w_product_names) != 0: for w_product_name in self.w_product_names: w_product_name.pack_forget() if len(self.w_product_radios) != 0: for w_product_radio in self.w_product_radios: w_product_radio.pack_forget() self.w_img_products = [] self.w_product_names = [] self.w_product_radios = [] def row_3(self, action=None): """ Name : SUBMIT BUTTON cols : 3 """ if action == "construct": # -- CREATE ROW -- # self.grid.row( width=self.width, height=50, padx=self.padx, pady=self.pady, bg="#ffffff" ) # -- CREATE COLS -- # self.grid.column( span=4, row=3, width=None, height=None, padx=None, pady=None, bg=None ) self.grid.column( span=4, row=3, width=None, height=None, padx=None, pady=None, bg=None ) self.grid.column( span=4, row=3, width=None, height=None, padx=None, pady=None, bg=None ) elif action == "fill": # Get texts for this row txt = self.json_script.get("row_3") # -- COLUMN 1 : SUBMIT BUTTON -- # self.w_submit_button = Button( self.grid.col_frames[3][1], text=txt.get("submit_button"), fg="#ffffff", bg="#7A57EC", activeforeground="#ffffff", activebackground="#845EFF", command=self.display_product_sheet ) self.w_submit_button.pack(side=BOTTOM, fill=X) elif action == "refresh": self.w_submit_button.pack_forget() self.w_submit_button = None
def init_gui(self): """init helper""" # setting up frames top_frame = Frame(self.root) mid_frame = Frame(self.root) radio_frame = Frame(self.root) res_frame = Frame(self.root) msg_frame = Frame(self.root) check_frame = Frame(self.root) history_frame = Frame(self.root) btn_frame = Frame(self.root) rating_frame = Frame(self.root) top_frame.pack(side=TOP, fill=X) mid_frame.pack(side=TOP, fill=X) history_frame.pack(side=TOP, fill=BOTH, expand=True) radio_frame.pack(side=TOP, fill=BOTH, expand=True) rating_frame.pack(side=TOP, fill=BOTH, expand=True) res_frame.pack(side=TOP, fill=BOTH, expand=True) check_frame.pack(side=TOP, fill=BOTH, expand=True) msg_frame.pack(side=TOP, fill=BOTH, expand=True) btn_frame.pack(side=TOP, fill=X) # Message ListBox rightscrollbar = Scrollbar(msg_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(msg_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.lbMessages = Listbox( msg_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white" ) self.lbMessages.pack(expand=True, fill=BOTH) rightscrollbar.config(command=self.lbMessages.yview) bottomscrollbar.config(command=self.lbMessages.xview) # History ListBoxes rightscrollbar2 = Scrollbar(history_frame) rightscrollbar2.pack(side=RIGHT, fill=Y) bottomscrollbar2 = Scrollbar(history_frame, orient=HORIZONTAL) bottomscrollbar2.pack(side=BOTTOM, fill=X) self.showhistory = Listbox( history_frame, yscrollcommand=rightscrollbar2.set, xscrollcommand=bottomscrollbar2.set, bg="white" ) self.showhistory.pack(expand=True, fill=BOTH) rightscrollbar2.config(command=self.showhistory.yview) bottomscrollbar2.config(command=self.showhistory.xview) self.showhistory.bind("<Double-Button-1>", self.select_recent_file) self.set_history_window() # status bar self.status = Label(self.root, text="", bd=1, relief=SUNKEN, anchor=W) self.status.pack(side=BOTTOM, fill=X) # labels self.lblRatingLabel = Label(rating_frame, text="Rating:") self.lblRatingLabel.pack(side=LEFT) self.lblRating = Label(rating_frame, textvariable=self.rating) self.lblRating.pack(side=LEFT) Label(mid_frame, text="Recently Used:").pack(side=LEFT) Label(top_frame, text="Module or package").pack(side=LEFT) # file textbox self.txtModule = Entry(top_frame, background="white") self.txtModule.bind("<Return>", self.run_lint) self.txtModule.pack(side=LEFT, expand=True, fill=X) # results box rightscrollbar = Scrollbar(res_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(res_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.results = Listbox( res_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white", font="Courier" ) self.results.pack(expand=True, fill=BOTH, side=BOTTOM) rightscrollbar.config(command=self.results.yview) bottomscrollbar.config(command=self.results.xview) # buttons Button(top_frame, text="Open", command=self.file_open).pack(side=LEFT) Button(top_frame, text="Open Package", command=(lambda: self.file_open(package=True))).pack(side=LEFT) self.btnRun = Button(top_frame, text="Run", command=self.run_lint) self.btnRun.pack(side=LEFT) Button(btn_frame, text="Quit", command=self.quit).pack(side=BOTTOM) # radio buttons self.information_box = IntVar() self.convention_box = IntVar() self.refactor_box = IntVar() self.warning_box = IntVar() self.error_box = IntVar() self.fatal_box = IntVar() i = Checkbutton( check_frame, text="Information", fg=COLORS["(I)"], variable=self.information_box, command=self.refresh_msg_window, ) c = Checkbutton( check_frame, text="Convention", fg=COLORS["(C)"], variable=self.convention_box, command=self.refresh_msg_window, ) r = Checkbutton( check_frame, text="Refactor", fg=COLORS["(R)"], variable=self.refactor_box, command=self.refresh_msg_window ) w = Checkbutton( check_frame, text="Warning", fg=COLORS["(W)"], variable=self.warning_box, command=self.refresh_msg_window ) e = Checkbutton( check_frame, text="Error", fg=COLORS["(E)"], variable=self.error_box, command=self.refresh_msg_window ) f = Checkbutton( check_frame, text="Fatal", fg=COLORS["(F)"], variable=self.fatal_box, command=self.refresh_msg_window ) i.select() c.select() r.select() w.select() e.select() f.select() i.pack(side=LEFT) c.pack(side=LEFT) r.pack(side=LEFT) w.pack(side=LEFT) e.pack(side=LEFT) f.pack(side=LEFT) # check boxes self.box = StringVar() # XXX should be generated report = Radiobutton( radio_frame, text="Report", variable=self.box, value="Report", command=self.refresh_results_window ) rawMet = Radiobutton( radio_frame, text="Raw metrics", variable=self.box, value="Raw metrics", command=self.refresh_results_window ) dup = Radiobutton( radio_frame, text="Duplication", variable=self.box, value="Duplication", command=self.refresh_results_window ) ext = Radiobutton( radio_frame, text="External dependencies", variable=self.box, value="External dependencies", command=self.refresh_results_window, ) stat = Radiobutton( radio_frame, text="Statistics by type", variable=self.box, value="Statistics by type", command=self.refresh_results_window, ) msgCat = Radiobutton( radio_frame, text="Messages by category", variable=self.box, value="Messages by category", command=self.refresh_results_window, ) msg = Radiobutton( radio_frame, text="Messages", variable=self.box, value="Messages", command=self.refresh_results_window ) report.select() report.grid(column=0, row=0, sticky=W) rawMet.grid(column=1, row=0, sticky=W) dup.grid(column=2, row=0, sticky=W) msg.grid(column=3, row=0, sticky=E) stat.grid(column=0, row=1, sticky=W) msgCat.grid(column=1, row=1, sticky=W) ext.grid(column=2, row=1, columnspan=2, sticky=W) # dictionary for check boxes and associated error term self.msg_type_dict = { "I": lambda: self.information_box.get() == 1, "C": lambda: self.convention_box.get() == 1, "R": lambda: self.refactor_box.get() == 1, "E": lambda: self.error_box.get() == 1, "W": lambda: self.warning_box.get() == 1, "F": lambda: self.fatal_box.get() == 1, } self.txtModule.focus_set()
def __init__(self): super().__init__() # Initialisation des pions à la valeur initiale. self.pion1 = "X" self.pion2 = "O" # Titre de la fenêtre self.title("Ultimate TIC-TAC-TOE") # Pour changer taille minimum de fenêtre et taille centrer, # changer variable self.width_fen, self.height_fen. self.width_fen, self.height_fen = 430, 500 # Taille minimum de la fenêtre self.minsize(self.width_fen, self.height_fen) # Centrer la fenêtre. centreFen(self, self.width_fen, self.height_fen) # Création d'un canvas avec l'image "logo.gif" canvas = Canvas(self, width=280, height=100) self.img = PhotoImage(file="logo.gif") canvas.create_image(280, 100, anchor=SE, image=self.img) canvas.grid(row=0, columnspan=5, pady=10) # Libellé - Nouvelle Partie Label(self, text="Nouvelle partie", font=("Arial", 16), fg="#0080FF", justify=CENTER).grid( row=1, columnspan=5, padx = 20, pady = 5) separateur(20).grid(row=10,columnspan=5) # Sélection du type de partie avec bouton radio self.choixJoueur = IntVar() r1 = Radiobutton(self, text="Jouer avec l'ordinateur", variable = self.choixJoueur, value = 1, command=self.define_choix) r1.select() r1.grid(row=20, column=0) r2 = Radiobutton(self, text="Jouer avec un autre joueur", variable = self.choixJoueur, value = 2, command=self.define_choix) r2.grid(row=20, column=1) # Saisie du nom du joueur 1. f_j1 = Frame(self, borderwidth=1, padx=5, pady=5, relief=SUNKEN) f_j1.grid(row=30, columnspan=5, padx=5, pady=5) Label(f_j1, text="Nom joueur 1:").grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.nom_joueur1 = Entry(f_j1) self.nom_joueur1.grid(row=1,column=1) # Sélection du pion joueur 1. Le pion restant est automatiquement attribué au joueur 2. Label(f_j1, text="Choix de pion:").grid(row=1, column=2, padx=5) self.sel_pion=IntVar() p1 = Radiobutton(f_j1, indicatoron=0, width=5, text="X", variable=self.sel_pion, value=1, command=self.choix_pion) p1.grid(row=1, column=3, padx=2) p1.select() Radiobutton(f_j1, indicatoron=0, width=5, text="O", variable=self.sel_pion, value=2, command=self.choix_pion).grid(row=1, column=4, padx=2) # Saisie du nom du joueur 2. Apparaît seulement si on sélection 2 joueurs. Voir define_choix self.f_j2 = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) Label(self.f_j2, text="Nom joueur 2").grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.nom_joueur2 = Entry(self.f_j2, state="disabled") self.nom_joueur2.grid(row=1, column=1) self.label_pion2 = Label(self.f_j2, text="Pion Joueur 2 = O") self.label_pion2.grid(row=1, column=2, padx=5) # Information sur l'ordinateur. Disparaît si on choisi 2 joueurs. self.f_ordi = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) self.f_ordi.grid(row=40, columnspan=5, padx=5, pady=5) Label(self.f_ordi, text="Ordinateur = Colosse", font=("Arial", 12), fg="#0080FF")\ .grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.pion_ordi = Label(self.f_ordi, text="| Pion de l'ordinateur = O", font=("Arial", 12), fg="#0080FF") self.pion_ordi.grid(row=1, column=2) separateur(20).grid(row=50,columnspan=5) # Sélection de la force de l'ordinateur self.choixForce = IntVar() self.f1 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Facile", variable=self.choixForce, value=1, command=self.define_choix) self.f1.select() self.f1.grid(row=60, columnspan=5) self.f2 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Moyen", variable=self.choixForce, value=2, command=self.define_choix) self.f2.grid(row=61, columnspan=5) self.f3 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Difficile", variable=self.choixForce, value=3, command=self.define_choix) self.f3.grid(row=62, columnspan=5) separateur(40).grid(row=70, column=0) #Button pour démarrer la partie self.bt_start = Button(text="Démarrer", font=("Arial", 12), fg="green", command=self.demarrer_jeu) self.bt_start.grid(row=80, columnspan=5)
class Nim(Tk): def __init__(self): Tk.__init__(self) self.title("Nim") self.kamen = PhotoImage(file = './kamen.ppm') self.nacin = BooleanVar() #0 is ai, 1 is human self.nacin = 0 self.zahtevnost = DoubleVar() #0, 1, 2 are (easy, medium hard) self.vnos_nacina = Entry(self, textvariable = "način") ni = Button(self, text="Nova igra", command=self.nova_igra) ni.grid(column = 2, row = 0) self.platno = Canvas(self, width=700, height = 500, bg='white') self.platno.grid(row= 3, column = 0, columnspan=4) self.vrhovi = [] self.z1 = Radiobutton(self, text = "Skoraj Nepremagljivo!", variable = self.zahtevnost, value=1) self.z2 = Radiobutton(self, text = "Srednje zahtevno ", variable = self.zahtevnost, value=2) self.z3 = Radiobutton(self, text = "Za majhne punčke ", variable = self.zahtevnost, value=3) self.z1.grid(column = 0, row = 0) self.z2.grid(column = 0, row = 1) self.z3.grid(column = 0, row = 2) self.z1.select() self.konec = Label() self.mainloop() def nova_igra(self): # print(self.zahtevnost.get()) if self.vrhovi != []: self.unici_kamne() self.k1.destroy() self.k2.destroy() self.k3.destroy() self.ligralec.destroy() # print(self.vrhovi) self.vrhovi = [randint(1, 5), randint(1, 5), randint(1, 5)] self.kamni = [[],[],[]] self.narisi_kamne(1) self.ligralec = Label(self, text='Na vrsti ste vi!', bg='white', font=("Calibri",21)) self.lracunalnik = Label(self, text='Na vrsti je računalnik', bg='white', font=("Calibri",21)) self.k1 = Label(self, text="Prvi kupček", bg='white') self.k1.place(x = 10, y=220) self.k2 = Label(self, text="Drugi kupček", bg='white') self.k2.place(x = 10, y=330) self.k3 = Label(self, text="Tretji kupček", bg='white') self.k3.place(x = 10, y=440) self.ligralec.place(x=300, y=130) self.konec.destroy() def preveri_zmagovalca(self, igralec): if max(self.vrhovi)<1: self.ligralec.destroy() self.lracunalnik.destroy() if igralec == 0: self.konec = Label(text='Čestitamo, zmagali ste!', bg = 'white', font=("Calibri", 24)) else: self.konec = Label(text = 'Več sreče prihodnjič!', bg = 'white', font=("Calibri",24)) self.konec.place(x=150, y=250) self.k1.destroy() self.k2.destroy() self.k3.destroy() def sestevek(self): s = 0 for i in range(len(self.vrhovi)): s = s^self.vrhovi[i] return s def sestevki(self): return [a^self.X < a for a in self.vrhovi] def naredi_potezo_AI(self): #Ta del kode sem dobil tako, da sem priredil kodo iz wikipedije #vir: http://en.wikipedia.org/wiki/Nim self.X = self.sestevek() S = self.sestevki() odstranjenih = 0 if self.X == 0: if max(self.vrhovi) >1: print("Can't win") for i, vrh in enumerate(self.vrhovi): if vrh>0: izbrani, odstranjenih = i, vrh else: izbrani = S.index(True) odstranjenih = self.vrhovi[izbrani] - (self.vrhovi[izbrani]^self.X) dva_alivec = 0 for i, vrh in enumerate(self.vrhovi): if i == izbrani: if vrh-odstranjenih > 1: dva_alivec += 1 else: if vrh > 1: dva_alivec += 1 if dva_alivec == 0: izbrani = self.vrhovi.index(max(self.vrhovi)) vrhov_z1 = sum(v == 1 for v in self.vrhovi) if vrhov_z1%2 == 1: odstranjenih = self.vrhovi[izbrani]-1 else: odstranjenih = self.vrhovi[izbrani] if odstranjenih == 0: odstranjenih = 1 izbrani = self.vrhovi.index(True) x = 10*(1-(1/self.zahtevnost.get())) v = randint(1, 10) if v < x: neprazni = [] for i, vr in enumerate(self.vrhovi): if vr>0: neprazni.append(i) izbrani = choice(neprazni) odstranjenih = randint(1, self.vrhovi[izbrani]) self.vrhovi[izbrani] -= odstranjenih self.unici_kamne() self.narisi_kamne(b=1) self.lracunalnik.place_forget() self.ligralec.place(x=300, y=130) self.preveri_zmagovalca(1) # print("Odstranil sem " + str(odstranjenih+1) + " kamenčkov iz " + str(izbrani+1) + " vrha.") def narisi_kamne(self, b=0): # print("narisi kamne") self.kamni = [[],[],[]] for i, j in enumerate(self.vrhovi): for k in range(j): self.kamni[i].append(Label(self, image=self.kamen, bd=0)) self.kamni[i][k].place(x=(100+110*k), y=(200+110*i)) par = (k+1, i+1) if b == 1: self.kamni[i][k].bind('<Button-1>', partial(self.izberi_kamen, par)) def unici_kamne(self): for vrh in self.kamni: for kamen in vrh: kamen.destroy() def naredi_potezo_clovek_text(self): izbrani = int(input("Izberi vrh: ")) odstranjenih = int(input("Stevilo kamenckov: ")) self.vrhovi[izbrani] -= odstranjenih # print(self.vrhovi) def izberi_kamen(self, par, j): # print("izbrali ste kamen ", par[0], " iz ", par[1], " vrha.") self.vrhovi[par[1]-1] = par[0]-1 # print(self.vrhovi) self.unici_kamne() self.narisi_kamne(0) self.ligralec.place_forget() self.lracunalnik.place(x=300, y=130) self.preveri_zmagovalca(0) self.after(1000, self.naredi_potezo_AI)
def initLabelFrame(self, labels): # We init the frame: if self.labelFrame is not None: self.labelFrame.destroy() self.labelIds = [] self.labelEntries = [] self.labelFrame = Frame(self) self.labelFrame.grid(row=self.labelFrameRow, column=11, sticky="nsew") self.labelFrame.columnconfigure(0, weight=1) # We init the row counter: i = 0 # We make the head message: self.labelFrame.rowconfigure(i, weight=1) title = Message(self.labelFrame, text="Labels", **self.headMessagesOption) title.grid(row=i, column=0, sticky='nsew', pady=10) i += 1 # For each label: for id, label in labels.items(): try: # We make the message: currentMessage = None if label["type"] != LABEL_TYPE.checkbutton or dictContains( label, "shorttitle"): currentMessage = Message( self.labelFrame, text=label["title"], width=self.messageWidth, font=self.messageFont ) # bg="white", foreground="black" # According to the label type: if not dictContains( label, "type") or label["type"] == LABEL_TYPE.scale: # We make the entry: currentEntry = Scale\ ( self.labelFrame, from_=label["from"] if dictContains(label, "from") else 0.0, to=label["to"] if dictContains(label, "to") else 1.0, orient=HORIZONTAL, resolution=label["resolution"] if dictContains(label, "resolution") else 0.05, ) currentEntry.set(label["default"] if dictContains( label, "default") else 0.5) # We save the entry: self.labelEntries.append(currentEntry) elif label["type"] == LABEL_TYPE.checkbutton: var = BooleanVar() currentEntry = Checkbutton\ ( self.labelFrame, text=label["shorttitle"] if dictContains(label, "shorttitle") else label["title"], variable=var, ) if dictContains(label, "default") and label["default"]: currentEntry.select() # We save the entry: self.labelEntries.append(var) elif label["type"] == LABEL_TYPE.radiobutton: vals = [] etiqs = [] for k, v in label["options"].items(): vals.append(k) etiqs.append(v) var = IntVar() var.set(vals[1]) currentEntry = [] for i in range(len(vals)): currentEtiq = etiqs[i] currentVal = vals[i] c = Radiobutton\ ( self.labelFrame, text=currentEtiq, variable=var, value=currentVal, ) currentEntry.append(c) if dictContains( label, "default") and label["default"] == currentVal: c.select() self.labelEntries.append(var) # We save the id: self.labelIds.append(id) # We grid the message: if currentMessage is not None: self.labelFrame.rowconfigure(i, weight=1) currentMessage.grid(row=i, column=0, sticky="nsew") i += 1 # We grid the entry: self.labelFrame.rowconfigure(i, weight=1) if isinstance(currentEntry, list): for c in currentEntry: c.grid(row=i, column=0, sticky="nsw") i += 1 else: currentEntry.grid(row=i, column=0, sticky="nsew") i += 1 # We make a separator: self.labelFrame.rowconfigure(i, weight=1) sep = Separator(self.labelFrame, orient=HORIZONTAL) sep.grid(row=i, column=0, sticky='nsew', pady=10) i += 1 except Exception as e: logException(e, self)
class Application(Frame): def __init__(self, convert_callback, master=None): Frame.__init__(self, master) self.convert_callback = convert_callback self.create_widgets(master) self.set_default_values() def create_widgets(self, master): # ## XML Input ## # Label(master, text="Xml file").grid(row=0) self.xml_input = Entry(master) self.xml_input.grid(row=0, column=1, sticky='EW') Button(master, text='Browse', command=self.ask_open_xml_file) \ .grid(row=0, column=2) # ## END ## # # ## Postag Input ## # Label(master, text="Postag file").grid(row=1) self.postag_input = Entry(master) self.postag_input.grid(row=1, column=1, sticky='EW') Button(master, text='Browse', command=self.ask_open_postag_file) \ .grid(row=1, column=2) # ## END ## # # ## Conllu output ## # Label(master, text="Output conllu file").grid(row=2) self.conllu_output = Entry(master) self.conllu_output.grid(row=2, column=1, sticky='EW') Button(master, text='Browse', command=self.ask_save_conllu_file) \ .grid(row=2, column=2) # ## END ## # # ## Start sent_id widgets ## # Label(master, text="Start sent_id at:").grid(row=3, column=0) self.start_id_input = Entry(master) self.start_id_input.grid(row=3, column=1) # ## END ## # # ## Sentence type widgets ## # Label(master, text="Sentence type:").grid(row=4, column=0) self.sentence_type = StringVar() self.train_rb = Radiobutton(master, text="Train", variable=self.sentence_type, value='train') self.train_rb.grid(row=4, column=1, sticky='W') self.test_rb = Radiobutton(master, text="Test", variable=self.sentence_type, value='test') self.test_rb.grid(row=5, column=1, sticky='W') # ## END ## # # ## Convert button ## # self.convert_button = Button(master, text='Convert!', command=self.convert) self.convert_button.grid(row=6, column=1) # ## END ## # def set_default_values(self): """ Sets default values for input widgets. """ self.start_id_input.insert(0, '1') self.train_rb.select() def ask_open_postag_file(self): filename = filedialog.askopenfilename(initialdir="./", title="Select file", filetypes=(("txt files", "*.txt"), ("all files", "*.*"))) self.postag_input.delete(0, END) self.postag_input.insert(0, filename) def ask_open_xml_file(self): filename = filedialog.askopenfilename(initialdir="./", title="Select file", filetypes=(("xml files", "*.xml"), ("all files", "*.*"))) self.xml_input.delete(0, END) self.xml_input.insert(0, filename) def ask_save_conllu_file(self): filename = filedialog.asksaveasfilename( initialdir="./", title="Select file", filetypes=(("conllu files", "*.conllu"), ("all files", "*.*"))) self.conllu_output.delete(0, END) self.conllu_output.insert(0, filename) def convert(self): xml_filename = self.xml_input.get() postag_filename = self.postag_input.get() conllu_filename = self.conllu_output.get() is_valid, sent_id_start = self.get_sent_id_input() if not is_valid: return full_text = "Success!" try: errors = self.convert_callback( xml_filename, conllu_filename, postag_filename, sent_id_start=sent_id_start, sentence_type=self.sentence_type.get()) if errors: full_text = "\n".join(map(lambda x: x.msg, errors)) except Exception as err: full_text = "\n".join(["Fatal error!", str(err)]) self.display_message(full_text) def display_message(self, message, title="Conversion output"): status_window = Toplevel(self) status_window.wm_title(title) text = Text(status_window, width=100, height=20) text.insert(END, message) text.pack() quit = Button(status_window, text="Close", command=status_window.destroy) quit.pack() def get_sent_id_input(self): """ Validates the input of start_id and returns it. Returns ------- (is_valid, sent_id_start) A tuple specifying whether input is valid and its value. If input is invalid the return wil bee (False, None); otherwise (True, sent_id_start) will be returned. """ try: sent_id_start = int(self.start_id_input.get()) return True, sent_id_start except Exception: self.display_message('Please specify a valid integer value.', title="Validation error.") return False, None