Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
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
Exemplo n.º 4
0
    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())
Exemplo n.º 5
0
    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()
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
    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()
Exemplo n.º 10
0
    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
Exemplo n.º 11
0
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
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
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()
Exemplo n.º 15
0
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()
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
    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()

        # LOCALIZALJÃ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)
Exemplo n.º 18
0
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")
Exemplo n.º 19
0
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
Exemplo n.º 23
0
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()
Exemplo n.º 24
0
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()
Exemplo n.º 25
0
    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
Exemplo n.º 26
0
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()
Exemplo n.º 28
0
    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)
Exemplo n.º 29
0
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()
Exemplo n.º 30
0
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()
Exemplo n.º 31
0
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()
Exemplo n.º 32
0
    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()
Exemplo n.º 33
0
    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')
Exemplo n.º 34
0
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
Exemplo n.º 35
0
    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()
Exemplo n.º 36
0
    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)
Exemplo n.º 37
0
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)
Exemplo n.º 38
0
Arquivo: ui.py Projeto: hayj/Annotator
 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)
Exemplo n.º 39
0
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