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)