Example #1
0
class CadastroVeiculo:
    def __init__(self, master):

        self.this = Toplevel(master)
        self.this.title("Cadastro")
        self.this.resizable(False, False)

        w = self.this.winfo_screenwidth()
        h = self.this.winfo_screenheight()

        x = (w - self.this.winfo_reqwidth()) / 2
        y = (h - self.this.winfo_reqheight()) / 2

        self.this.geometry("+%d+%d" % (x - 150, y - 150))

        mp.use('TkAgg')

        self.carros_cadastrados = []
        self.leitora = ['leitora', '127.0.0.1', '20000']
        self.app = Application()

    def build_window(self):
        """

        :return:
        """

        main_frame = Frame(self.this)
        main_frame.pack()

        lbl_leitora = Label(main_frame, text="Leitora:")
        lbl_leitora.grid(row=0, column=0, pady=20, padx=10, sticky='w')

        self.leitoras = ttk.Combobox(main_frame, width=20)
        self.leitoras.grid(row=0, column=1, pady=20, columnspan=3, sticky='w')

        lbl_lista = Label(main_frame, text="Tags detectadas:")
        lbl_lista.grid(row=1, column=0)

        self.list_box = Listbox(main_frame, width=50, height=10)
        self.list_box.grid(row=2, column=0, columnspan=4, padx=10, pady=5)
        self.list_box.bind('<Double-Button-1>', self.load_tag)

        bt_refresh = Button(main_frame,
                            width=10,
                            text="Atualizar",
                            command=self.popular_lista)
        bt_refresh.grid(row=2, column=4, padx=10)

        lbl_tag = Label(main_frame, text="Tag selecionada:")
        lbl_tag.grid(row=3, column=0, columnspan=2)

        self.tag = Entry(main_frame, width=30)
        self.tag.grid(row=3,
                      column=2,
                      columnspan=2,
                      padx=10,
                      pady=5,
                      sticky='w')
        self.tag.config(state='readonly')

        lbl_placa = Label(main_frame, text="Placa do veículo:")
        lbl_placa.grid(row=4, column=0, columnspan=2)

        self.placa = Entry(main_frame, width=10)
        self.placa.grid(row=4, column=2, columnspan=2, padx=10, sticky='w')

        bt_cadastrar = Button(main_frame,
                              width=10,
                              text="Cadastrar",
                              command=self.cadastrar_veiculo)
        bt_cadastrar.grid(row=5, column=0, padx=10, pady=10, sticky='w')

        bt_limpar = Button(main_frame, width=10, text="Limpar")
        bt_limpar.grid(row=5, column=2, padx=10, pady=10, sticky='e')

        bt_cancelar = Button(main_frame,
                             width=10,
                             text="Cancelar",
                             command=self.close_window)
        bt_cancelar.grid(row=5, column=4, padx=10, pady=10, sticky='e')

        self.tabela_carros = ttk.Treeview(main_frame,
                                          selectmode="browse",
                                          show='headings')

        ttk.Style().configure("Treeview", width=50)

        self.tabela_carros['columns'] = '1', '2'

        self.tabela_carros.column('#1', width='100')
        self.tabela_carros.heading('#1', text='Placa')

        self.tabela_carros.column('#2', width='300')
        self.tabela_carros.heading('#2', text='Tag RFID')

        self.tabela_carros.grid(row=6, column=0, columnspan=5, padx=5, pady=10)

        scroll_bar_tree_vertical = Scrollbar(main_frame, relief='flat')
        scroll_bar_tree_vertical.grid(row=6,
                                      column=6,
                                      sticky=('w', 'e', 'n', 's'))

        self.tabela_carros.config(yscrollcommand=scroll_bar_tree_vertical.set)
        scroll_bar_tree_vertical.config(command=self.tabela_carros.yview)

        self.tabela_carros.bind('<Double-Button-1>', self.load_da_tabela)

        self.popular_tabela()
        self.popular_box()

    def open_window(self):
        self.build_window()
        self.this.mainloop()

    def close_window(self):
        self.this.destroy()

    def popular_lista(self):

        self.list_box.delete(0, END)

        if len(self.leitoras.get()) == 0:
            messagebox.showwarning("Erro",
                                   "Antes, escolha uma leitora!",
                                   parent=self.this)
            return

        leitora = self.app.get_leitoras_registradas(self.leitoras.get())[0]

        tags = self.app.ler_tags(leitora[1], leitora[2])

        for tag in tags:
            self.list_box.insert(END, tag)

    def popular_tabela(self):

        if len(self.tabela_carros.get_children()) > 0:
            self.tabela_carros.delete(*self.tabela_carros.get_children())

        self.carros_cadastrados = self.app.get_veiculos_reg()

        row = 0
        for registro in self.carros_cadastrados:

            self.tabela_carros.insert("",
                                      row,
                                      iid=str(row),
                                      values=[registro[0], registro[1]])

            row += 1

    def popular_box(self):
        """

        :return:
        """

        readers = self.app.get_leitoras_registradas()

        if len(readers) == 0:
            self.leitoras.config(state='readonly')
            return

        names = [reader[0] for reader in readers]

        self.leitoras.config(state='normal')
        self.leitoras.config(value=names)
        self.leitoras.config(state='readonly')

    def cadastrar_veiculo(self):

        if len(self.tag.get()) == 0 or len(self.placa.get()) == 0:
            messagebox.showwarning(
                "Erro",
                "Antes, preencha todos os campos corretamente",
                parent=self.this)
            return

        tag = self.tag.get()
        placa = self.placa.get()

        try:
            self.app.registrar_veiculo(placa, tag)
        except:
            op = messagebox.askyesno(
                "Erro",
                "Esse veiculo já possui uma tag cadastrada, deseja atualizar?",
                parent=self.this)

            if op is True:
                self.app.atualizar_tag_veiculo(placa, tag)

            else:
                self.clear_entries()
                return

        messagebox.showinfo("Cadastro",
                            "Cadastro realizado com sucesso!",
                            parent=self.this)
        self.popular_tabela()

        self.clear_entries()

    def load_tag(self, event):

        self.tag.config(state="normal")
        self.tag.delete(0, END)
        self.tag.insert(0, self.list_box.get(self.list_box.curselection()))
        self.tag.config(state="readonly")

    def load_da_tabela(self, event):
        """

        :param event:
        :return:
        """

        index = int(self.tabela_carros.selection()[0])

        carro = self.carros_cadastrados[index]

        self.placa.delete(0, END)
        self.placa.insert(0, carro[0])

        self.tag.config(state="normal")
        self.tag.delete(0, END)
        self.tag.insert(0, carro[1])
        self.tag.config(state="readonly")

    def clear_entries(self):

        self.tag.config(state="normal")
        self.tag.delete(0, END)
        self.tag.config(state="readonly")
        self.placa.delete(0, END)