class TextBox(Frame): """docstring for TextBox""" def __init__(self, parent, font, width, height, *args, **kwargs): self.width = width self.height = height Frame.__init__(self, parent, width=self.width, height=self.height, *args, **kwargs) self.parent = parent self.font = font self.mk_textbox() def mk_textbox(self): self.scroll = Scrollbar(self.parent) self.scroll.grid(row=0, column=1, sticky='ns') self.chat_box = Listbox(self.parent, font=self.font, yscrollcommand=self.scroll.set) self.chat_box.grid(row=0, column=0, sticky='wens') self.chat_box.grid_propagate(0) self.scroll.configure(command=self.chat_box.yview)
class VerticalScrollGrid(Frame): def __init__(self, root): Frame.__init__(self, root) self.canvas = Canvas(root, borderwidth=0) self.frame = Frame(self.canvas) self.vsb = Scrollbar(root, orient="vertical", command=self.canvas.yview) self.canvas.configure(yscrollcommand=self.vsb.set) self.vsb.grid(row=0, column=1, sticky='NS') self.vsb.configure(command=self.canvas.yview) self.canvas.grid(row=0, column=0, sticky='NSEW') self.canvas.create_window((4, 4), window=self.frame, anchor="nw", tags="self.frame") self.frame.bind("<Configure>", self.onFrameConfigure) self.frame.bind_all("<MouseWheel>", self.on_mousewheel) # self.frame.bind("<Button-4>", self.on_mousewheel_up) # self.frame.bind("<Button-5>", self.on_mousewheel_down) def onFrameConfigure(self, event): '''Reset the scroll region to encompass the inner frame''' self.canvas.configure(scrollregion=self.canvas.bbox("all")) # def on_mousewheel_down(self, event): self.canvas.yview_scroll(1, "units") # def on_mousewheel_up(self, event): self.canvas.yview_scroll(-1, "units") def on_mousewheel(self, event): self.canvas.yview_scroll(int(-1 * (event.delta / 120)), "units") def go_to_top(self, event=None): self.canvas.yview_moveto(0)
def login(user_id): log = Tk() website_text = StringVar() website_label = Label(log, text='Website', pady=20, padx=15) website_label.grid(row=0, column=0) website_entry = Entry(log, textvariable=website_text) website_entry.grid(row=0, column=1, padx=10) password_text = StringVar() password_label = Label(log, text='Password', padx=15) password_label.grid(row=1, column=0) password_entry = Entry(log, textvariable=password_text) password_entry.grid(row=1, column=1, padx=10) add_button = Button( log, text="Add", command=lambda: db.new_entry(user_id, website_entry.get(), password_entry.get()), width=17) add_button.grid(row=2, column=0, pady=10, padx=10) remove_button = Button( log, text="Remove", command=lambda: db.remove_entry(user_id, website_entry.get(), password_entry.get()), width=17) remove_button.grid(row=2, column=1) update_button = Button( log, text="Update", command=lambda: db.update_site_password(user_id, website_entry.get(), password_entry.get()), width=17) update_button.grid(row=3, column=0) pass_list = Listbox(log, width=45, height=8, border=0) pass_list.grid(row=4, column=0, columnspan=3, rowspan=4, padx=20, pady=20) refresh_button = Button(log, text="Refresh", command=lambda: populate_list(user_id, pass_list), width=17) refresh_button.grid(row=3, column=1) scrollbar = Scrollbar(log) pass_list.configure(yscrollcommand=scrollbar.set) scrollbar.configure(command=pass_list.yview) scrollbar.grid(row=4, column=3) #Bind select #pass_list.bind('<<ListBoxSelect>>', select_item) populate_list(user_id, pass_list) log.title(f"{user_id}") log.geometry("350x380") log.mainloop()
def main(): root = Tk() backend.create() root.title("Bookstore manager") root.resizable(False, False) title_label = Label(root, text="Title") title_entry = Entry(root) author_label = Label(root, text="Author") author_entry = Entry(root) year_label = Label(root, text="Year") year_entry = Entry(root) isbn_label = Label(root, text="ISBN") isbn_entry = Entry(root) scroll = Scrollbar(root, orient="vertical", width=20) view_all = Button(root, text="View All", width=17, command=lambda: backend.print_all(listbox)) search_entry = Button(root, text="Search Entry", width=17, command=lambda: backend.search(listbox, title_entry.get(), author_entry.get(), year_entry.get(), isbn_entry.get())) add_entry = Button(root, text="Add Entry", width=17, command=lambda: backend.insert(listbox, title_entry.get(), author_entry.get(), int(year_entry.get()), int(isbn_entry.get()))) update = Button(root, text="Update", width=17, command=lambda: backend.update(listbox, title_entry, author_entry, year_entry, isbn_entry)) delete = Button(root, text="Delete", width=17, command=lambda: backend.delete(listbox)) close = Button(root, text="Close", width=17, command=root.quit) listbox = Listbox(root, height=12, width=27) listbox.configure(yscrollcommand=scroll.set) scroll.configure(command=listbox.yview) title_label.grid(row=0, column=0, padx=10) title_entry.grid(row=0, column=1, padx=10, pady=2) author_label.grid(row=0, column=2) author_entry.grid(row=0, column=3, padx=10) year_label.grid(row=1, column=0) year_entry.grid(row=1, column=1, padx=10) isbn_label.grid(row=1, column=2) isbn_entry.grid(row=1, column=3, padx=10, pady=2) listbox.grid(row=2, column=0, rowspan=6, columnspan=2, padx=2, pady=6) scroll.grid(row=2, column=2, rowspan=6) view_all.grid(row=2, column=3) search_entry.grid(row=3, column=3) add_entry.grid(row=4, column=3) update.grid(row=5, column=3) delete.grid(row=6, column=3) close.grid(row=7, column=3) root.mainloop()
def __init__(self): Socket.__init__(self) self.server = socket(AF_INET, SOCK_STREAM) self.connected = False self.window = Tk() self.window.title('KEO Chat') self.window.resizable(width=False, height=False) login_frame = Frame(self.window, bd=10) login_frame.pack(pady=5, padx=10, fill=X) host_label = Label(login_frame, text='Server') host_label.grid(row=0, column=0) self.host_entry = Entry(login_frame, width=30, justify='center') self.host_entry.grid(row=0, column=1) self.host_entry.insert(END, '127.0.0.1:5368') user_label = Label(login_frame, text='Username') user_label.grid(row=1, column=0) self.user_entry = Entry(login_frame, width=30, justify='center') self.user_entry.grid(row=1, column=1) self.user_entry.insert(END, os.environ.get('USER', f'Unknown-{random.randint(1000, 9999)}')) self.connect_button = Button(login_frame, text='Connect') self.connect_button.grid(row=2, column=1) self.connect_button['command'] = self.connect frame = Frame(self.window, bd=10) frame.pack(pady=5, padx=10, fill=X) scroll = Scrollbar(frame) self.text = Text(frame, width=50, height=30, highlightcolor=colors['gray'], highlightbackground=colors['gray'], highlightthickness=1) self.text.configure(yscrollcommand=scroll.set, state=DISABLED) scroll.configure(command=self.text.yview) self.text.pack(side=LEFT) scroll.pack(side=LEFT, fill=Y) self.entry = Entry(self.window) self.entry.pack(pady=10, padx=16, fill=X) self.entry.bind('<Return>', self.send_message)
def addStatisticsTable(self, row, column): """ This methods shows some statistics values """ def fill_table(): try: for values in self.aminolist: if self.aminolist.index(values) % 2 == 0: self.Table.insert('', tk.END, text='', values=(values[0] + str(values[1]) + "-" + values[2], round(values[3], 2), round(values[4], 2)), tags=('even',)) else: self.Table.insert('', tk.END, text='', values=(values[0] + str(values[1]) + "-" + values[2], round(values[3], 2), round(values[4], 2)), tags=('odd',)) except Exception as e: pass self.columns = ("aminoacid", "fscq", "mean") self.columsText = ("Aminoacids", "atom FSC-Q", "Mean FSC-Q aminoacid") self.Table = ttk.Treeview(self.FrameTable, columns=self.columns) self.Table.grid(row=row, column=column, sticky='news') self.Table.tag_configure("heading", background='sky blue', foreground='black', font=('Calibri', 10, 'bold')) self.Table.tag_configure('even', background='white', foreground='black') self.Table.tag_configure('odd', background='gainsboro', foreground='black') self.Table.heading(self.columns[0], text=self.columsText[0]) self.Table.heading(self.columns[1], text=self.columsText[1]) self.Table.heading(self.columns[2], text=self.columsText[2]) self.Table.column("#0", width=0, minwidth=0, stretch=False) self.Table.column(self.columns[0], anchor=CENTER) self.Table.column(self.columns[1], anchor=CENTER) self.Table.column(self.columns[2], anchor=CENTER) yscroll = Scrollbar(self.FrameTable, orient='vertical', command=self.Table.yview) yscroll.grid(row=row, column=column + 1, sticky='news') self.Table.configure(yscrollcommand=yscroll.set) yscroll.configure(command=self.Table.yview) self.Table.bind("<Button-1>", self._orderTable, True) fill_table()
def _setup_main_window(self): self.window.title(bot_name) self.window.resizable(width=True, height=True) self.window.configure(width=450, height=600, bg=clr_bg) #head head_label = Label(self.window, bg=clr_bg, fg=clr_txt, text=header_txt, font=font_bold, pady=10) head_label.place(relwidth=1) #divider line = Label(self.window, width=500, bg=clr_panel) line.place(relwidth=1, rely=0.7, relheight=0.015) #text self.text_widget = Text(self.window, width=20, height=2, bg=clr_bg, fg=clr_txt, font=font, padx=5, pady=5) self.text_widget.place(relheight=0.745, relwidth=1, rely=0.08) self.text_widget.configure(cursor='arrow', state=DISABLED) #scroll scroller = Scrollbar(self.text_widget) scroller.place(relheight=1, relx=0.974) scroller.configure(command=self.text_widget.yview) #foot footer = Label(self.window, bg=clr_panel, height=80) footer.place(relwidth=1, rely=0.825) #message_box self.mbox = Entry(footer, bg=clr_mbox, font=font, fg=clr_txt) self.mbox.place(relwidth=0.74, relheight=0.06, relx=0.011, rely=0.008) self.mbox.focus() self.mbox.bind('<Return>', self._on_enter_pressed) #send_button self.send = Button(footer, text='Send', font=font_bold, width=20, bg=clr_send, command=lambda: self._on_enter_pressed(None)) self.send.place(relwidth=0.22, relx=0.77, rely=0.008, relheight=0.06)
class MScrollView(Frame, Elemento): """Conjunto de classes TK para listagem de elementos. obs: canvas, viewport e scrollbar nao sao subelementos pq o objetivo e criar um novo tipo de objeto que ate entao nao existe por padrao no TK. """ def __init__(self) -> None: Elemento.__init__(self) self.defs.pack['expand'] = True self.defs.canvas = {} self.defs.viewport = {} self.defs.scrollbar = {} def iniciar(self, master: object) -> None: Frame.__init__(self, master=master, cnf=self.defs.cnf) self.canvas = Canvas(master=self, cnf=self.defs.canvas) self.viewport = Frame(master=self.canvas, cnf=self.defs.viewport) self.scrollbar = Scrollbar(master=self, cnf=self.defs.scrollbar) self.scrollbar.configure(command=self.canvas.yview) self.canvas.configure(yscrollcommand=self.scrollbar.set) self.scrollbar.pack(side='right', fill='y') self.canvas.pack(side='left', fill='both', expand=True) jnl, ar, tags = self.viewport, 'nw', 'self.viewport' self.canvas_window =\ self.canvas.create_window((4, 4), window=jnl, anchor=ar, tags=tags) self.canvas.bind('<Configure>', self.evento_configurar_canvas) self.viewport.bind('<Configure>', self.evento_configurar_viewport) self.evento_configurar_viewport(None) self.mostrar() def evento_configurar_viewport(self, evt) -> None: self.canvas.configure(scrollregion=self.canvas.bbox('all')) def evento_configurar_canvas(self, evt) -> None: self.canvas.itemconfig(self.canvas_window, width=evt.width)
def __addTextbox(self,dx=85,dy=24,x1=27,y=47,x2=624,sdy=430): scrolly=Scrollbar(self,activebackground="#171212",bg="#343838",orient=VERTICAL,troughcolor="#171212") listbox=Listbox(self, height=dy, width=dx , background="#343838", borderwidth=0, highlightcolor="#4d86a1", selectbackground="#4d86a1", activestyle=NONE, highlightbackground="#4a4a4a", yscrollcommand=scrolly.set) listbox.config(font=("", 10),fg="#FFFFFF") listbox.place(x=x1,y=y+21) scrolly.place(x=x2,y=y,height=sdy) self.__list_listbox.append(listbox) self.__list_scrollbar.append(scrolly) listbox.configure(yscrollcommand=scrolly.set) scrolly.configure(command=listbox.yview)
class ClientUI: def __init__(self, master, client): self.master = master self.client = client self.user_data = UserData() master.title("Chatroom") master.geometry("720x350") self.messages_list = Listbox(self.master, height=12, width=75, border=1, font=("Helvetica", 11)) self.messages_list.grid(row=1, column=0, pady=20) self.scrollbar = Scrollbar(self.master) self.scrollbar.grid(row=1, column=1, sticky=W) self.messages_list.configure(yscrollcommand=self.scrollbar.set) self.scrollbar.configure(command=self.messages_list.yview) self.message_input = Text(self.master, height=4, width=50) self.message_input.grid(row=2, column=0, rowspan=4, padx=40) self.send_button = Button(master, text="Send", command=self.send_message) self.send_button.grid(row=2, column=1, pady=20) self.master.protocol("WM_DELETE_WINDOW", self.full_exit) master.bind('<Return>', self.return_press) PopupWindow(master, self.set_username, client) threading.Thread(target=self.update_received, daemon=True).start() def update_received(self): while True: messages = self.client.receive_all() for message in messages: self.messages_list.insert( END, f"{message['user']} > {message['data']}") self.messages_list.yview(END) def set_username(self, username): self.user_data.set_username(username) def return_press(self, event): self.send_message() def send_message(self): if not self.user_data.get_user_name(): print("Username should be provided") exit(-1) message = self.message_input.get("1.0", END).rstrip() if not message: return self.messages_list.insert( END, f"{self.user_data.get_user_name()} > {message}") self.messages_list.yview(END) self.message_input.delete('1.0', END) self.client.send_message(message) def full_exit(self): self.master.destroy() exit()
# Add a listbox to display data from database # padx and pady method is used to add space (margin) horizontally and vertically list_bx = Listbox(root, height=16, width=40, font='helvetica 13', bg='light blue') list_bx.grid(row=3, column=1, columnspan=14, sticky=W + E, pady=40, padx=15) list_bx.bind('<<ListboxSelect>>', get_selected_row) #Create a scroll bar scroll_bar = Scrollbar(root) scroll_bar.grid(row=1, column=8, rowspan=14, sticky=W) #Attach the scrollbar into the listbox (yscroll bar for vertical scrollbar) list_bx.configure(yscrollcommand=scroll_bar.set) scroll_bar.configure(command=list_bx.yview) #create a Modify button modify_btn = Button(root, text="Modify Record", bg='purple', fg="white", font="helvetica 10 bold", command=update_records) modify_btn.grid(row=15, column=4) #create a Delete button delete_btn = Button(root, text="Delete Record", bg='red', fg="white",
class Window: def __init__(self, window): self.window = window # Setting title name self.window.wm_title("Restaurants Yelp") # Setting location for "Restaurant Name" self.l1 = Label(window, text='Restaurant Name') self.l1.grid(row=0, column=0, sticky='w') # Setting location for "Address" self.l2 = Label(window, text='Address') self.l2.grid(row=1, column=0, sticky='w') # Setting location for "Average Price (Less than)" self.l3 = Label(window, text='Average Price (Less than)') self.l3.grid(row=0, column=2, sticky='w') # Setting location for "Distance (Less than) self.l4 = Label(window, text='Distance (Less than)') self.l4.grid(row=1, column=2, sticky='w') # Setting location for "Natinality" self.l5 = Label(window, text='Nationality') self.l5.grid(row=2, column=0, sticky='w') # Configure the name restaurant toolbar, and its location self.name_text = StringVar() self.e1 = Entry(window, textvariable=self.name_text) self.e1.bind("<Button-1>", self.clear_box) self.e1.grid(row=0, column=1) # Configure the address toolbar, and its location self.address_text = StringVar() self.e2 = Entry(window, textvariable=self.address_text) self.e2.bind("<Button-1>", self.clear_box) self.e2.grid(row=1, column=1) # Configure the average price toolbar, and its location self.avgp_text = StringVar() self.e3 = Entry(window, textvariable=self.avgp_text) self.e3.bind("<Button-1>", self.clear_box) self.e3.grid(row=0, column=3) # Configure the Distance toolbar, and its location self.distance_text = StringVar() self.e4 = Entry(window, textvariable=self.distance_text) self.e4.bind("<Button-1>", self.clear_box) self.e4.grid(row=1, column=3) # Configure the nationality toolbar, and its location self.nationality_text = StringVar() self.e5 = Entry(window, textvariable=self.nationality_text) self.e5.bind("<Button-1>", self.clear_box) self.e5.grid(row=2, column=1) self.l0 = Label(window, text='') self.l0.grid(row=3, column=0) # Configure the "Search By Input" button # It calls search_command function self.b0 = Button(window, text='Search By Input', width=17, command=self.search_command) self.b0.grid(row=2, column=3) # Configure console for output self.list1 = Listbox(window) self.list1.grid(row=4, column=1, rowspan=5, columnspan=3, sticky='ew') # Configure Scrollbar for output self.sb1 = Scrollbar(window) self.sb1.grid(row=4, column=4, rowspan=5, sticky='ns') self.list1.configure(yscrollcommand=self.sb1.set) self.sb1.configure(command=self.list1.yview) # Configure "View All" button, and its location # It calls function view_command self.b1 = Button(window, text='View All', width=12, command=self.view_command) self.b1.grid(row=4, column=0) # Setting Label "Search:" self.l6 = Label(window, text='Search: ') self.l6.grid(row=5, column=0) # Configure button "By Location", and its location # It calls function search_by_location_command self.b2 = Button(window, text='By Location', width=12, command=self.search_by_location_command) self.b2.grid(row=6, column=0) # Configure button "By High Price", and its location # It calls function search_by_high_price_command self.b3 = Button(window, text='By High Price', width=12, command=self.search_by_high_price_command) self.b3.grid(row=7, column=0) # Configure button "By Low Price", and its location # It calls function search_by_low_price_command self.b4 = Button(window, text='By Low Price', width=12, command=self.search_by_low_price_command) self.b4.grid(row=8, column=0) # Configure button "Close", and its location # It calls function close self.b5 = Button(window, text='Close', width=12, command=self.close) self.b5.grid(row=9, column=0, columnspan=4) """ Method view_command: Fill all information the list of retaurant into output console """ def view_command(self): self.list1.delete(0, END) for restaurant in restaurants.view(): self.list1.insert(END, restaurant) def search_by_high_price_command(self): self.list1.delete(0, END) for restaurant in restaurants.search_by_price(lowest=False): self.list1.insert(END, f"Restaurant name: {restaurant.name}") self.list1.insert(END, f"Address: {restaurant.address}") self.list1.insert(END, f"Average Price: {restaurant.average_price}$") self.list1.insert(END, f"Distance: {restaurant.distance} miles") self.list1.insert(END, f"Nationality: {restaurant.nationality}") self.list1.insert(END, "") def search_by_low_price_command(self): self.list1.delete(0, END) for restaurant in restaurants.search_by_price(): self.list1.insert(END, f"Restaurant name: {restaurant.name}") self.list1.insert(END, f"Address: {restaurant.address}") self.list1.insert(END, f"Average Price: {restaurant.average_price}$") self.list1.insert(END, f"Distance: {restaurant.distance} miles") self.list1.insert(END, f"Nationality: {restaurant.nationality}") self.list1.insert(END, "") def search_by_location_command(self): self.list1.delete(0, END) for restaurant in restaurants.search_by_location(): self.list1.insert(END, restaurant) def search_command(self): self.list1.delete(0, END) try: searched = restaurants.search(self.name_text.get(), self.address_text.get(), self.avgp_text.get(), self.distance_text.get(), self.nationality_text.get()) if searched: for restaurant in searched: self.list1.insert(END, restaurant) else: messagebox.showwarning( title="No Restaurant", message="Cannot find any restaurant, try again") except ValueError: messagebox.showerror( title="Wrong Input", message="Average Price and Distance must be a decimal number") def clear_box(self, event): event.widget.delete(0, END) def close(self): self.window.destroy()
class CadastroCliente: '''Classe interface cadastrar cliente''' def __init__(self, master=''): self.master = master self.cliente = Cliente() self.dao = ClienteDAO() ''' self.window = Tk() self.window.geometry('1500x850+0+0') self.window.title('Cadastro de cliente') self.window.resizable(0, 0) # impede de maximizar self.window['bg'] = '#c9c9ff' ''' self.heading = Label(self.master, text="Cadastro de Clientes", bg='#c9c9ff', fg='white', font=('Verdana 20 bold')) self.heading.place(x=650, y=0) # nome ========================================================================= self.nome = Label(self.master, text="Nome:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.nome.place(x=30, y=70) self.nome_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.nome_entry.place(x=175, y=70) # rg ========================================================================= self.rg = Label(self.master, text="rg:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.rg.place(x=30, y=120) self.rg_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.rg_entry.place(x=175, y=120) # cpf ========================================================================= self.cpf = Label(self.master, text="cpf:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.cpf.place(x=30, y=170) self.cpf_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.cpf_entry.place(x=175, y=170) # email ========================================================================= self.email = Label(self.master, text="email:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.email.place(x=30, y=220) self.email_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.email_entry.place(x=175, y=220) # self.email_entry.insert(END, datetime.date.today()) # telefone ========================================================================= self.telefone = Label(self.master, text="Telefone:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.telefone.place(x=30, y=270) self.telefone_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.telefone_entry.place(x=175, y=270) self.telefone_entry.insert(END, "litros") # nascimento ========================================================================= self.nascimento = Label(self.master, text="Nascimento:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.nascimento.place(x=30, y=320) self.nascimento_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.nascimento_entry.place(x=175, y=320) # consumo cidade ========================================================================= self.estado_civil = Label(self.master, text="Estado civil:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.estado_civil.place(x=30, y=370) self.estado_civil_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.estado_civil_entry.place(x=175, y=370) self.estado_civil_entry.insert(END, "l/km") self.genero = Label(self.master, text="Gênero:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.genero.place(x=30, y=420) self.genero_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.genero_entry.place(x=175, y=420) self.genero_entry.insert(END, "l/km") # direito ============================== self.cep = Label(self.master, text="CEP:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.cep.place(x=550, y=70) self.cep_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.cep_entry.place(x=730, y=70) self.estado = Label(self.master, text="Estado:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.estado.place(x=550, y=120) self.estado_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.estado_entry.place(x=730, y=120) self.logradouro = Label(self.master, text="Logradouro:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.logradouro.place(x=550, y=170) self.logradouro_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.logradouro_entry.place(x=730, y=170) self.bairro = Label(self.master, text="Bairro:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.bairro.place(x=550, y=220) self.bairro_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.bairro_entry.place(x=730, y=220) self.numero_logradouro = Label(self.master, text="Número:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.numero_logradouro.place(x=550, y=270) self.numero_logradouro_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.numero_logradouro_entry.place(x=730, y=270) self.cidade = Label(self.master, text="Cidade:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.cidade.place(x=550, y=320) self.cidade_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.cidade_entry.place(x=730, y=320) self.complemento = Label(self.master, text="Complemento:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.complemento.place(x=550, y=370) self.complemento_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.complemento_entry.place(x=730, y=370) # TERCEIRO FRAME ============================================= self.numero_cnh = Label(self.master, text="Numero CNH:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.numero_cnh.place(x=1050, y=70) self.numero_cnh_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.numero_cnh_entry.place(x=1250, y=70) self.numero_registro_cnh = Label(self.master, text="RG CNH:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.numero_registro_cnh.place(x=1050, y=120) self.numero_registro_cnh_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.numero_registro_cnh_entry.place(x=1250, y=120) self.data_validade_cnh = Label(self.master, text="Validade CNH:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.data_validade_cnh.place(x=1050, y=170) self.data_validade_cnh_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.data_validade_cnh_entry.place(x=1250, y=170) self.uf_cnh = Label(self.master, text="UF CNH:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.uf_cnh.place(x=1050, y=220) self.uf_cnh_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.uf_cnh_entry.place(x=1250, y=220) self.contato_emergencial = Label(self.master, text="Contato 2:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.contato_emergencial.place(x=1050, y=270) self.contato_emergencial_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.contato_emergencial_entry.place(x=1250, y=270) self.nome_contato_emergencial = Label(self.master, text="Nome contato:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.nome_contato_emergencial.place(x=1050, y=320) self.nome_contato_emergencial_entry = Entry(self.master, width=15, font=('Verdana 15 bold')) self.nome_contato_emergencial_entry.place(x=1250, y=320) # BOTAO LIMPAR ========================================================================= self.botao_limpar = Button(self.master, text="Limpar", width=22, height=2, bg='#ffdfba', fg='black', font=('Verdana 15 bold'), command=self.view_command) self.botao_limpar.place(x=1170, y=550) self.botao_cadastrar = Button(self.master, text="Cadastrar", width=22, height=2, bg='#baffc9', fg='black', font=('Verdana 15 bold'), command=self.get_items) self.botao_cadastrar.place(x=1170, y=650) ''' self.botao_sair = Button(self.master, text="Sair", width=22, height=2, bg='#ffb3ba', fg='black', font=( 'Verdana 15 bold'), command=self.close) self.botao_sair.place(x=1170, y=740) ''' self.lista_clientes = Listbox(self.master, width=80, height=10, font=('Verdana 15 bold')) self.lista_clientes.place(x=30, y=550) #Associando a Scrollbar com a Listbox... self.scrollbar_cliente = Scrollbar(self.master) self.lista_clientes.configure( yscrollcommand=self.scrollbar_cliente.set) self.scrollbar_cliente.configure(command=self.lista_clientes.yview) self.scrollbar_cliente.place(x=1155, y=550, relheight=0.31, anchor='ne') self.pesquisar_cliente = Label(self.master, text="Lista de clientes Cadastrados:", bg='#c9c9ff', font=('Verdana 15 bold')) self.pesquisar_cliente.place(x=30, y=500) self.update_list() def update_list(self): try: self.lista_clientes.delete(0, END) for item in self.clienteDAO.view(): self.lista_clientes.insert(END, item) except Exception: print('Erro na lista clientes.') def get_items(self): self.cliente.nome = self.nome_entry.get() self.cliente.rg = self.rg_entry.get() self.cliente.cpf = self.cpf_entry.get() self.cliente.email = self.email_entry.get() self.cliente.telefone = self.telefone_entry.get() self.cliente.nascimento = self.nascimento_entry.get() self.cliente.estado_civil = self.estado_civil_entry.get() self.cliente.genero = self.genero_entry.get() self.cliente.cep = self.cep_entry.get() self.cliente.logradouro = self.logradouro_entry.get() self.cliente.bairro = self.bairro_entry.get() self.cliente.numero_logradouro = self.numero_logradouro_entry.get() self.cliente.cidade = self.cidade_entry.get() self.cliente.estado = self.estado_entry.get() self.cliente.complemento = self.complemento_entry.get() self.cliente.numero_cnh = self.numero_cnh_entry.get() self.cliente.numero_registro_cnh = self.numero_registro_cnh_entry.get() self.cliente.data_validade_cnh = self.data_validade_cnh_entry.get() self.cliente.uf_cnh = self.uf_cnh_entry.get() self.cliente.contato_emergencial = self.contato_emergencial_entry.get() self.cliente.nome_contato_emergencial = self.nome_contato_emergencial_entry.get( ) if (self.cliente.nome == '' or self.cliente.rg == '' or self.cliente.cpf == '' or self.cliente.email == '' or self.cliente.telefone == '' or self.cliente.nascimento == '' or self.cliente.estado_civil == '' or self.cliente.genero == '' or self.cliente.cep == '' or self.cliente.logradouro == '' or self.cliente.bairro == '' or self.cliente.numero_logradouro == '' or self.cliente.cidade == '' or self.cliente.estado == '' or self.cliente.complemento == '' or self.cliente.numero_cnh == '' or self.cliente.numero_registro_cnh == '' or self.cliente.data_validade_cnh == '' or self.cliente.uf_cnh == '' or self.cliente.contato_emergencial == '' or self.cliente.nome_contato_emergencial == ''): tkinter.messagebox.showinfo("Aviso:", "Preencha todos os campos!") else: try: self.cliente.telefone = int(self.cliente.telefone) except ValueError: tkinter.messagebox.showinfo( 'Aviso!', 'O campo telefone deve ser preenchido com número!') try: self.cliente.contato_emergencial = int( self.cliente.contato_emergencial) except ValueError: tkinter.messagebox.showinfo( 'Aviso!', 'O campo contato emergencial deve ser preenchidos com número!' ) try: self.cliente.cep = int(self.cliente.cep) except ValueError: tkinter.messagebox.showinfo( 'Aviso!', 'O campo cep deve ser preenchido com números!') try: self.cliente.numero_cnh = int(self.cliente.numero_cnh) except ValueError: tkinter.messagebox.showinfo( 'Aviso!', 'O campo numero cnh deve ser preenchido com números!') try: self.cliente.numero_registro_cnh = int( self.cliente.numero_registro_cnh) except ValueError: tkinter.messagebox.showinfo( 'Aviso!', 'O campo rg cnh deve ser preenchido com números!') try: self.cliente.uf_cnh = int(self.cliente.uf_cnh) except ValueError: tkinter.messagebox.showinfo( 'Aviso!', 'O campo uf cnh deve ser preenchido com números!!') else: try: self.dao.insert(self.cliente) except Exception as e: print("erro ao inserir no banco de dados") else: tkinter.messagebox.showinfo( 'Aviso!', 'Cadastro Realizado com Sucesso!') self.clear_all() self.update_list() def clear_all(self): self.nome_entry.delete(0, END) self.rg_entry.delete(0, END) self.cpf_entry.delete(0, END) self.email_entry.delete(0, END) self.telefone_entry.delete(0, END) self.nascimento_entry.delete(0, END) self.estado_civil_entry.delete(0, END) self.genero_entry.delete(0, END) self.cep_entry.delete(0, END) self.logradouro_entry.delete(0, END) self.bairro.delete(0, END) self.numero_logradouro.delete(0, END) self.cidade.delete(0, END) self.estado.delete(0, END) self.complemento.delete(0, END) self.numero_cnh.delete(0, END) self.numero_registro_cnh.delete(0, END) self.data_validade_cnh.delete(0, END) self.uf_cnh.delete(0, END) self.contato_emergencial.delete(0, END) self.nome_contato_emergencial.delete(0, END) def view_command(self): "método para visualização dos resultados" try: rows = self.clienteDAO.view() self.window.lista_clientes.delete(0, END) for r in rows: self.window.lista_clientes.insert(END, r) except Exception as e: print(e) def search_command(self): "método para buscar registros" self.gui.lista_clientes.delete(0, END) self.__fill_current_client() try: rows = self.dao.search(self.currentClient) for r in rows: self.gui.lista_clientes.insert(END, r) except Exception as e: print(e) def close(self): self.dao.close() self.tela_inicial.destroy() self.executar.abrir()
class Edit(Frame): def __init__(self, master, valves): Frame.__init__(self, master, bg='sky blue', width=1366, height=768) self.master = master self.canvas = Canvas(self, height=630, width=1320, bg='sky blue') self.frame = Frame(self.canvas, bg='sky blue') self.scrollbar = Scrollbar(self, orient='vertical', command=self.canvas.yview) self.scrollbar.configure(activebackground='DarkRed', background='red', width=40) self.canvas.configure(yscrollcommand=self.scrollbar.set, scrollregion=[0, 0, 1366, 800]) self.scrollbar.pack(side='right', fill='y') self.canvas.pack(side='left') self.canvas.create_window((0, 0), window=self.frame, anchor='nw') self.valves = valves self.frame.config(bg='sky blue') index = 0 while index < 10: self.frame.grid_rowconfigure(index, minsize=80) self.frame.grid_columnconfigure(index, minsize=30) index += 1 self.frame.grid_columnconfigure(3, minsize=130) self.frame.grid_columnconfigure(6, minsize=130) interval = Label(self.frame, text='RUN', width=6, font=('Lucida Console', 30)) interval.grid(row=0, column=2) interval.config(bg='sky blue', fg='RoyalBlue4') delay = Label(self.frame, text='DELAY', width=6, font=('Lucida Console', 30)) delay.grid(row=0, column=5) delay.config(bg='sky blue', fg='RoyalBlue4') self.seconds = [IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar(), IntVar()] for each in self.seconds: each.set(0) self.set_seconds() self.valve_label = [Label(self.frame, textvariable=self.valves[0].get_name()), Label(self.frame, textvariable=self.valves[1].get_name()), Label(self.frame, textvariable=self.valves[2].get_name()), Label(self.frame, textvariable=self.valves[3].get_name()), Label(self.frame, textvariable=self.valves[4].get_name()), Label(self.frame, textvariable=self.valves[5].get_name()), Label(self.frame, textvariable=self.valves[6].get_name()), Label(self.frame, textvariable=self.valves[7].get_name()) ] row = 1 for each in self.valve_label: each.grid(row=row, column=0) each.config(width=8, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4') row += 1 self.minus_image = PhotoImage(file="img/minus.png").subsample(x=5, y=5) self.minusInterval = [Button(self.frame, image=self.minus_image, command=lambda: self.subtract(0)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(1)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(2)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(3)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(4)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(5)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(6)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(7)), ] row = 1 for each in self.minusInterval: each.grid(row=row, column=1) each.config(bg='SkyBlue4', activebackground='midnight blue', fg='white') row += 1 self.labelInterval = [Label(self.frame, textvariable=self.seconds[0]), Label(self.frame, textvariable=self.seconds[1]), Label(self.frame, textvariable=self.seconds[2]), Label(self.frame, textvariable=self.seconds[3]), Label(self.frame, textvariable=self.seconds[4]), Label(self.frame, textvariable=self.seconds[5]), Label(self.frame, textvariable=self.seconds[6]), Label(self.frame, textvariable=self.seconds[7])] row = 1 for each in self.labelInterval: each.grid(row=row, column=2) each.config(width=4, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4') row += 1 self.plus_image = PhotoImage(file="img/plus.png").subsample(x=5, y=5) self.plusInterval = [Button(self.frame, image=self.plus_image, command=lambda: self.add(0)), Button(self.frame, image=self.plus_image, command=lambda: self.add(1)), Button(self.frame, image=self.plus_image, command=lambda: self.add(2)), Button(self.frame, image=self.plus_image, command=lambda: self.add(3)), Button(self.frame, image=self.plus_image, command=lambda: self.add(4)), Button(self.frame, image=self.plus_image, command=lambda: self.add(5)), Button(self.frame, image=self.plus_image, command=lambda: self.add(6)), Button(self.frame, image=self.plus_image, command=lambda: self.add(7)), ] row = 1 for each in self.plusInterval: each.grid(row=row, column=3) each.config(bg='SkyBlue4', activebackground='midnight blue', fg='white') row += 1 self.minusDelay = [Button(self.frame, image=self.minus_image, command=lambda: self.subtract(8)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(9)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(10)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(11)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(12)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(13)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(14)), Button(self.frame, image=self.minus_image, command=lambda: self.subtract(15)), ] row = 1 for each in self.minusDelay: each.grid(row=row, column=4) each.config(bg='SkyBlue4', activebackground='midnight blue', fg='white') each.config() row += 1 self.labelDelay = [Label(self.frame, textvariable=self.seconds[8]), Label(self.frame, textvariable=self.seconds[9]), Label(self.frame, textvariable=self.seconds[10]), Label(self.frame, textvariable=self.seconds[11]), Label(self.frame, textvariable=self.seconds[12]), Label(self.frame, textvariable=self.seconds[13]), Label(self.frame, textvariable=self.seconds[14]), Label(self.frame, textvariable=self.seconds[15])] row = 1 for each in self.labelDelay: each.grid(row=row, column=5) each.config(width=4, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4') row += 1 self.plusDelay = [Button(self.frame, image=self.plus_image, command=lambda: self.add(8)), Button(self.frame, image=self.plus_image, command=lambda: self.add(9)), Button(self.frame, image=self.plus_image, command=lambda: self.add(10)), Button(self.frame, image=self.plus_image, command=lambda: self.add(11)), Button(self.frame, image=self.plus_image, command=lambda: self.add(12)), Button(self.frame, image=self.plus_image, command=lambda: self.add(13)), Button(self.frame, image=self.plus_image, command=lambda: self.add(14)), Button(self.frame, image=self.plus_image, command=lambda: self.add(15)), ] row = 1 for each in self.plusDelay: each.grid(row=row, column=6) each.config(bg='SkyBlue4', activebackground='midnight blue') each.config() row += 1 self.motor_image = PhotoImage(file="img/motor.png").subsample(x=5, y=5) self.motor = [Button(self.frame, text='MOTOR', image=self.motor_image, command=lambda: self.motor_on(0)), Button(self.frame, text='MOTOR', image=self.motor_image, command=lambda: self.motor_on(1)), Button(self.frame, text='MOTOR', image=self.motor_image, command=lambda: self.motor_on(2)), Button(self.frame, text='MOTOR', image=self.motor_image, command=lambda: self.motor_on(3)), Button(self.frame, text='MOTOR', image=self.motor_image, command=lambda: self.motor_on(4)), Button(self.frame, text='MOTOR', image=self.motor_image, command=lambda: self.motor_on(5)), Button(self.frame, text='MOTOR', image=self.motor_image, command=lambda: self.motor_on(6)), Button(self.frame, text='MOTOR', image=self.motor_image, command=lambda: self.motor_on(7))] row = 1 for each in self.motor: each.grid(row=row, column=7) each.config(bg='SkyBlue4', activebackground='midnight blue', fg='white') each.config() row += 1 self.adv_image = PhotoImage(file="img/options.png").subsample(x=5, y=5) self.adv = [Button(self.frame, image=self.adv_image, command=lambda: self.motor_on(0)), Button(self.frame, image=self.adv_image, command=lambda: self.motor_on(1)), Button(self.frame, image=self.adv_image, command=lambda: self.motor_on(2)), Button(self.frame, image=self.adv_image, command=lambda: self.motor_on(3)), Button(self.frame, image=self.adv_image, command=lambda: self.motor_on(4)), Button(self.frame, image=self.adv_image, command=lambda: self.motor_on(5)), Button(self.frame, image=self.adv_image, command=lambda: self.motor_on(6)), Button(self.frame, image=self.adv_image, command=lambda: self.motor_on(7)), ] row = 1 for each in self.adv: each.grid(row=row, column=8) each.config(bg='SkyBlue4', activebackground='midnight blue', fg='white') row += 1 self.set_seconds() self.lock() def lock(self): index = 0 while index < 8: self.minusInterval[index].config(state='disabled') self.minusDelay[index].config(state='disabled') self.plusInterval[index].config(state='disabled') self.plusDelay[index].config(state='disabled') self.motor[index].config(state='disabled') self.adv[index].config(state='disabled') index += 1 def set_seconds(self): index = 0 while index < 8: if self.valves[index].get_setting() == 'DEFAULT': interval = self.valves[index].get_interval() # setting seconds for runtime self.seconds[index].set(interval[0]) # setting seconds for delay self.seconds[index + 8].set(interval[1]) else: self.minusInterval[index].config(state='disabled') self.minusDelay[index].config(state='disabled') self.plusInterval[index].config(state='disabled') self.plusDelay[index].config(state='disabled') index += 1 def get_intervals(self): return self.seconds def motor_on(self, index): if self.minusDelay[index].cget('state') == 'normal': self.minusInterval[index].config(state='disabled') self.minusDelay[index].config(state='disabled') self.plusInterval[index].config(state='disabled') self.plusDelay[index].config(state='disabled') self.adv[index].config(state='disabled') self.seconds[index].set(0) self.seconds[index + 8].set(0) else: interval = self.valves[index].get_interval() self.minusInterval[index].config(state='normal') self.minusDelay[index].config(state='normal') self.plusInterval[index].config(state='normal') self.plusDelay[index].config(state='normal') self.adv[index].config(state='normal') self.seconds[index].set(interval[0]) self.seconds[index + 8].set(interval[1]) def add(self, number): if self.seconds[number].get() < 99: self.seconds[number].set(self.seconds[number].get() + 1) def subtract(self, number): if self.seconds[number].get() > 0: self.seconds[number].set(self.seconds[number].get() - 1)
# 2.1 listbox list_box = Listbox(root, height=16, width=40, font='helvetica 13', bg='light blue') list_box.grid(row=3, column=1, columnspan=14, sticky=W + E, padx=15, pady=40) list_box.bind('<<ListboxSelect>>', get_selected_row) # 2.2 Scroll bar: scroll = Scrollbar(root) scroll.grid(row=1, column=8, rowspan=14, sticky=W) # 2.3 Attach scroll_bar to the list_box: list_box.configure(yscrollcommand=scroll.set) scroll.configure(command=list_box.yview) # 3. Bottom buttons ( 15 row - list box 1-14 rows) view_all_btn = Button(root, text='View all records', bg='black', fg='white', font='helvetica 10 bold', command=view_records) view_all_btn.grid(row=15, column=1) clear_screen_btn = Button(root, text='Clear Screen', bg='dark red', fg='white',
message = 'Recordings: Double click to play, right click to convert file to mp3' lbox_frame = LabelFrame(root, fg='blue', text=message) lbox_frame.grid(padx=10, pady=10) lst_bx = Listbox(master=lbox_frame, selectmode='single', width=52, height=10, fg='black', bg='lightgoldenrod') # Scrollbars for above listbox. scrl_bar = Scrollbar(lbox_frame, orient='vertical') scrl_bar.pack(side=RIGHT, fill=Y) lst_bx.configure(yscrollcommand=scrl_bar.set) scrl_bar.configure(command=lst_bx.yview) scrl_bar2 = Scrollbar(lbox_frame, orient='horizontal') scrl_bar2.pack(side=BOTTOM, fill=X) lst_bx.configure(xscrollcommand=scrl_bar2.set) scrl_bar2.configure(command=lst_bx.xview) # Mouse button bindings. lst_bx.pack() lst_bx.bind('<Double-1>', play_file) # Dbl click to play file. lst_bx.bind('<Button-3>', convert_2_mp3) # Right click to convert to mp3. get_list_of_recordings() # Bottom window. bot_frame = LabelFrame(root) bot_frame.grid(padx=10, pady=5)
class RunScreen(Frame): def __init__(self, master, valves): Frame.__init__(self, master, bg='sky blue', width=950, height=750) self.master = master self.valves = valves self.threads = [] self.canvas = Canvas(self, height=750, width=950, bg='sky blue') self.frame = Frame(self.canvas, bg='sky blue') self.scrollbar = Scrollbar(self, orient='vertical', command=self.canvas.yview) self.scrollbar.configure(activebackground='DarkRed', background='red', width=40) self.canvas.configure(yscrollcommand=self.scrollbar.set, scrollregion=[0, 0, 1366, 1300]) self.scrollbar.pack(side='right', fill='y') self.canvas.pack(side='left') self.canvas.create_window((0, 0), window=self.frame, anchor='nw') self.frame.config(bg='sky blue') self.valve_num = [Label(self.frame, text='1'), Label(self.frame, text='2'), Label(self.frame, text='3'), Label(self.frame, text='4'), Label(self.frame, text='5'), Label(self.frame, text='6'), Label(self.frame, text='7'), Label(self.frame, text='8')] row = 0 for each in self.valve_num: each.grid(row=row, column=0) each.config(width=4, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4') row += 2 self.valve_name = [Label(self.frame, textvariable=valves[0].get_name()), Label(self.frame, textvariable=valves[1].get_name()), Label(self.frame, textvariable=valves[2].get_name()), Label(self.frame, textvariable=valves[3].get_name()), Label(self.frame, textvariable=valves[4].get_name()), Label(self.frame, textvariable=valves[5].get_name()), Label(self.frame, textvariable=valves[6].get_name()), Label(self.frame, textvariable=valves[7].get_name())] row = 0 for each in self.valve_name: each.grid(row=row, column=2) each.config(width=15, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4') row += 2 valve = 0 self.valve_activity = [] self.on_image = PhotoImage(file="img/yes.png").subsample(x=6, y=6) self.off_image = PhotoImage(file="img/no.png").subsample(x=6, y=6) for each in self.valves: if each.get_setting() is 'INACTIVE': self.valve_activity.append(Button(self.frame, image=self.off_image, text='OFF', command=lambda: self.activate(valve))) else: self.valve_activity.append(Button(self.frame, image=self.on_image, text='ON', command=lambda: self.activate(valve))) valve += 1 row = 0 for each in self.valve_activity: each.grid(row=row, column=1) each.config(bg='SkyBlue4', activebackground='midnight blue') each.config() row += 2 self.valve_action_a = [Label(self.frame, textvariable=valves[0].get_action_a()), Label(self.frame, textvariable=valves[1].get_action_a()), Label(self.frame, textvariable=valves[2].get_action_a()), Label(self.frame, textvariable=valves[3].get_action_a()), Label(self.frame, textvariable=valves[4].get_action_a()), Label(self.frame, textvariable=valves[5].get_action_a()), Label(self.frame, textvariable=valves[6].get_action_a()), Label(self.frame, textvariable=valves[7].get_action_a())] row = 0 for each in self.valve_action_a: each.grid(row=row, column=3) each.config(width=10, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4', anchor='w') row += 2 self.valve_action_b = [Label(self.frame, textvariable=valves[0].get_action_b()), Label(self.frame, textvariable=valves[1].get_action_b()), Label(self.frame, textvariable=valves[2].get_action_b()), Label(self.frame, textvariable=valves[3].get_action_b()), Label(self.frame, textvariable=valves[4].get_action_b()), Label(self.frame, textvariable=valves[5].get_action_b()), Label(self.frame, textvariable=valves[6].get_action_b()), Label(self.frame, textvariable=valves[7].get_action_b())] row = 1 for each in self.valve_action_b: each.grid(row=row, column=3) each.config(width=10, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4', anchor='w') row += 2 self.lightsA = [LED(self.frame, 30, 'green1', 'green', 'dark green', 'Dark Green', False), LED(self.frame, 30, 'green1', 'green', 'dark green', 'Dark Green', False), LED(self.frame, 30, 'green1', 'green', 'dark green', 'Dark Green', False), LED(self.frame, 30, 'green1', 'green', 'dark green', 'Dark Green', False), LED(self.frame, 30, 'green1', 'green', 'dark green', 'Dark Green', False), LED(self.frame, 30, 'green1', 'green', 'dark green', 'Dark Green', False), LED(self.frame, 30, 'green1', 'green', 'dark green', 'Dark Green', False), LED(self.frame, 30, 'green1', 'green', 'dark green', 'Dark Green', False) ] self.lightsB = [LED(self.frame, 30, 'red', 'dark red', 'red4', 'DarkRed', False), LED(self.frame, 30, 'red', 'dark red', 'red4', 'DarkRed', False), LED(self.frame, 30, 'red', 'dark red', 'red4', 'DarkRed', False), LED(self.frame, 30, 'red', 'dark red', 'red4', 'DarkRed', False), LED(self.frame, 30, 'red', 'dark red', 'red4', 'DarkRed', False), LED(self.frame, 30, 'red', 'dark red', 'red4', 'DarkRed', False), LED(self.frame, 30, 'red', 'dark red', 'red4', 'DarkRed', False), LED(self.frame, 30, 'red', 'dark red', 'red4', 'DarkRed', False) ] #Turn valve on or off def activate(self, index): if self.valve_activity[index].cget('text') == 'ON': self.valve_activity[index].config(text='OFF', image=self.off_image) else: self.valve_activity[index].config(text='ON', image=self.on_image) #Set up layout of GUI def make_frame(self): row = 0 for each in self.lightsA: each.grid(row=row, column=4, padx=10, pady=20) row += 2 row = 1 for each in self.lightsB: each.grid(row=row, column=4, padx=10, pady=20) row += 2 #Start all valves, if not disabled. May be able to shut off each valve individually. def run_all(self, boolean): if boolean: self.threads = [threading.Thread(target=self.run_valve, args=(0, self.valves[0].get_interval() )), threading.Thread(target=self.run_valve, args=(1, self.valves[1].get_interval() )), threading.Thread(target=self.run_valve, args=(2, self.valves[2].get_interval() )), threading.Thread(target=self.run_valve, args=(3, self.valves[3].get_interval() )), threading.Thread(target=self.run_valve, args=(4, self.valves[4].get_interval() )), threading.Thread(target=self.run_valve, args=(5, self.valves[5].get_interval() )), threading.Thread(target=self.run_valve, args=(6, self.valves[6].get_interval() )), threading.Thread(target=self.run_valve, args=(7, self.valves[7].get_interval() )), ] for thread in self.threads: thread.start() else: for each in self.valve_activity: each.config(text='OFF') #Individual valve is run. def run_valve(self, index, interval): run_time = interval[0] delay_time = interval[1] start_time = math.floor( time.time() ) valve_a_on = True delay_on = False try: self.valve_a_on(index) while( self.valve_activity[index].cget('text') == 'ON' ): time_lapse = math.floor( time.time() ) - start_time if delay_on: if time_lapse > delay_time and not valve_a_on: #Switch from delay to b delay_on = False start_time = math.floor( time.time()) self.valve_b_on(index) elif time_lapse > delay_time and valve_a_on: #switch from delay to a delay_on = False valve_a_on = True start_time = math.floor( time.time()) self.valve_a_on(index) elif valve_a_on: if time_lapse > run_time: #Switching from a to delay valve_a_on = False delay_on = True start_time = math.floor( time.time() ) self.valve_delay_all(index) else: if time_lapse > run_time: #Switching from b to delay valve_a_on = True delay_on = True start_time = math.floor( time.time() ) self.valve_delay_all(index) time.sleep(0.1) finally: self.valve_delay_all(index) #Turn on valve A, and turn off valve B. def valve_a_on(self, index): self.lightsA[index].set_state(True) self.lightsB[index].set_state(False) self.master.update() #Turn on valve B, and turn off valve A. def valve_b_on(self, index): self.lightsA[index].set_state(False) self.lightsB[index].set_state(True) self.master.update() #Turn off valves A and B. def valve_delay_all(self, index): self.lightsA[index].set_state(False) self.lightsB[index].set_state(False) self.master.update()
class Watchman_main_window(): ## Create a "Watchman_main_window" object wich is a GUI to communicate with a zynq through a UDP connection # @param self : The object pointer # @param master : The parent of the object def __init__(self, master): # Global variable ## Parent of every graphical object (object main window) self.master = master ## Contain the value to read from or write to the registers in the zynq self.regs = [] ## List of flags for every register value which indicates if the value is good or not (0 -> good value, 1 -> wrong value => sum of list should be 0) self.flag_data = [] ## Contain the zynq's ip self.UDP_IP = '192.168.1.10' ## Contain the port number for UDP communication self.UDP_PORT = 7 ## List of all the commands self.cmd = ['write_all_reg', 'read_all_reg', 'ping', 'start_stop_stream', 'stop_uC', 'settime'] ## Flag which indicates if the streaming is running self.stream_flag = False ## Flag which indicates that the user want to close the GUI (to avoid problem when accessing graphical object after "WM_DELETE_WINDOW" event) self.destroy_flag = False ## Flag which indicates if the graphical window is open or not self.toplevel_flag = False ## Flag which indicates to the main thread if it needs to stop self.run_flag = False # initialization self.init_window() self.init_UDP_connection() ## Thread object which run constantly and process the data received self.thread=Thread(target=self.thread_int, args=()) self.run_flag = True self.thread.start() ## Method to initialize the windows and create its graphical objects # @param self : The object pointer def init_window(self): self.master.title("Watchman") # Change window's title self.master.protocol("WM_DELETE_WINDOW", self.exit_prog) # when use close window with the red cross self.__menu = Menu(self.master) self.master.config(menu=self.__menu) self.__filemenu = Menu(self.__menu) self.__menu.add_cascade(label='File', menu=self.__filemenu) self.__filemenu.add_command(label='Load sequence...',command=self.openfile) self.__filemenu.add_command(label='Save sequence...',command=self.savefile) self.__filemenu.add_command(label='EXIT',command=self.exit_prog) self.__menu.add_cascade(label='HELP',command=self.help_callback) # Table for the registers count = 0 for i in range(0,4,2): for j in range(25): l = Label(self.master, relief=RIDGE,text= (" Reg. " + str(count) + " ")) l.grid(column=i, row=j, sticky=N+S+E+W) var = StringVar() var.trace('w', partial(self.entry_callback, count, var)) e = Entry(self.master, relief=RIDGE, textvariable=var) e.grid(column=(i+1), row=j, sticky=N+S+E+W) self.regs.append(e) self.flag_data.append(1) count += 1 # Buttons self.__btn_write_all = Button(self.master,text="Write all reg.", command=partial(self.send_command, 0)) self.__btn_write_all.grid(column=4, row=0, rowspan=2, padx=5, sticky=W+E) self.__btn_write_all.configure(state="disable") self.__btn_read_all = Button(self.master,text="Read all reg.", command=partial(self.send_command, 1)) self.__btn_read_all.grid(column=4, row=2, rowspan=2, padx=5, sticky=W+E) self.__btn_ping = Button(self.master,text="Ping", command=partial(self.send_command, 2)) self.__btn_ping.grid(column=4, row=4, rowspan=2, padx=5, sticky=W+E) self.__btn_stream = Button(self.master,text="Start stream.", command=partial(self.send_command, 3)) self.__btn_stream.grid(column=4, row=6, rowspan=2, padx=5, sticky=W+E) self.__btn_stop = Button(self.master,text="Stop uC", command=partial(self.send_command, 4)) self.__btn_stop.grid(column=4, row=8, rowspan=2, padx=5, sticky=W+E) self.__btn_settime = Button(self.master,text="Set time", command=partial(self.send_command, 5)) self.__btn_settime.grid(column=4, row=10, rowspan=2, padx=5, sticky=W+E) self.__btn_graph = Button(self.master,text="Open graph\nStore data", command=self.open_graph) self.__btn_graph.grid(column=4, row=22, rowspan=2, padx=5, sticky=W+E) # Listbox to show data transfert self.__text = Text(self.master, width=40) self.__text.grid(column=5, row=0, rowspan=25, pady=10, sticky=N+S) self.__scrlbar = Scrollbar(self.master) self.__scrlbar.grid(column=6, row=0, rowspan=25, pady=10, padx=5, sticky=N+S) self.__text.configure(yscrollcommand = self.__scrlbar.set) self.__scrlbar.configure(command=self.__text.yview) self.__text.insert(END, "List of command sent and received\n-------------------------") self.__text.configure(state="disable") ## Method to open a file with the register's value # @param self : The object pointer def openfile(self): file_path=filedialog.askopenfilename() if len(file_path) != 0: ff=open(file_path,'r') for reg in self.regs: reg.delete(0,END) reg.insert(END, str(ff.readline())[:-1]) ff.close() ## Method to save in a file the register's value # @param self : The object pointer def savefile(self): if(sum(self.flag_data) == 0): file_path=filedialog.asksaveasfilename() if len(file_path) != 0: ff=open(file_path,'w') for reg in self.regs: ff.write(str(reg.get())+"\n") ff.close() else: messagebox.showinfo("Warning", "Every register value must be in the right format!") ## Method callback for the "WM_DELETE_WINDOW" event and the EXIT menu button which quit the application # @param self : The object pointer def exit_prog(self): # If the graph window is open, first close it if(self.toplevel_flag): self.close_graph() while(self.toplevel_flag): time.sleep(0.1) # If the zynq was streaming, stop it if(self.stream_flag): self.destroy_flag = True self.send_command(3) while(self.stream_flag): time.sleep(0.1) # Stop the thread and wait on it to finish self.run_flag = False self.thread.join() # Close the socket and destroy the main window self.sock.close() self.master.destroy() print("main destroy", file=sys.stderr) ## Method callback for the HELP menu button # @param self : The object pointer def help_callback(self): print("help_callback") ## Method to determine if the string object is a number # @param self : The object pointer # @param s : String object # @return boolean : True or False def is_number(self, s): try: numb = int(s) if(numb >= 0): return True else: return False except ValueError: return False ## Method callback called when a caracter is written is one of the register entry # @param self : The object pointer # @param count : Register's number # @param var : Variable contained by the entry # @param *args : Unused def entry_callback(self, count, var, *args): # Get entry's contain s = var.get() # Test if it's a number that can stored in a 12bits register if(self.is_number(s) and (len(s) != 0)): if((int(s) < 4096) and (int(s) >= 0)): self.regs[count].configure(fg="black") # Ok self.flag_data[count] = 0 else: self.regs[count].configure(fg="red") # Nok self.flag_data[count] = 1 else: self.regs[count].configure(fg="red") # Nok self.flag_data[count] = 1 # If there is a good value for every registers, the "Write all reg." is activated if(sum(self.flag_data) == 0): self.__btn_write_all.configure(state="normal") else: self.__btn_write_all.configure(state="disable") ## Method to write something in the main window's listbox # @param self : The object pointer # @param text : The text to write in the listbox def write_txt(self, text): self.__text.configure(state="normal") # activate activate the listbox self.__text.insert(END, ("\n" + text)) # add the text self.__text.see("end") # scroll to the last add-on self.__text.configure(state="disable") # disable the listbox, so the user can not change its content ## Method to initialize the UDP connection # @param self : The object pointer def init_UDP_connection(self): ## Socket object used to established the UDP connection with the zynq self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.bind(('', self.UDP_PORT)) self.sock.settimeout(0.1) # method sock.recvfrom return after maximum 0.1sec if no data are received ## Method to send a command to the zynq # @param self : The object pointer # @param cmd : Command ID to send (a number) def send_command(self, cmd): # Build the frame payload = bytearray() payload.append(int("0x55", 0)) # frame's start code 0x55AA payload.append(int("0xAA", 0)) payload.append(cmd) # then then command ID payload.append(random.randrange(0,255)) # then a random number to put an "id" on every frame if(self.cmd[cmd] == 'write_all_reg'): # if the command is write register, add the register's value for reg in self.regs: numb = int(reg.get()) payload.append(int(numb / 256)) payload.append(int(numb % 256)) if(self.cmd[cmd] == 'settime'): # if the command is set the time, add the time t = time.localtime() # Get the the UTC time with the time zone correction payload.append(t.tm_year - 2000) payload.append(t.tm_mon) payload.append(t.tm_mday) payload.append(t.tm_hour) payload.append(t.tm_min) payload.append(t.tm_sec) payload.append(int("0x33", 0)) # frame's end code 0x33CC payload.append(int("0xCC", 0)) # show in the listbox the command to be send and send it self.write_txt("Tx: " + self.cmd[cmd] + " rand=" + str(payload[3])) self.sock.sendto(payload, (self.UDP_IP, self.UDP_PORT)) ## Method to open the graph window # @param self : The object pointer def open_graph(self): # test if window already opened if(self.toplevel_flag == False): # create 2nd window self.__toplevel = Toplevel(self.master) ## Object of class Watchman_data (graphical window) self.window_data = receive.Watchman_graphic_window(self.__toplevel) self.toplevel_flag = True # attach the callback for the "WM_DELETE_WINDOW" event self.__toplevel.protocol("WM_DELETE_WINDOW", self.close_graph) ## Method to close the graph window # @param self : The object pointer def close_graph(self): self.window_data.exit_prog() self.toplevel_flag = False ## Method thread to process to command received by UDP (running all the time) # @param self : The object pointer def thread_int(self): while self.run_flag: # running flag try: data = bytearray() data, adress = self.sock.recvfrom(200) # wait on data # process the data received (echo command) if(adress[0] == self.UDP_IP): # test the emitter's ip if((data[0] == int("0x55", 0)) and (data[1] == int("0xAA", 0))): # for every command look for start code # stop/start command if(self.cmd[data[2]] == 'start_stop_stream'): if(self.stream_flag): # stop streaming if(self.destroy_flag == False): self.__btn_stream.configure(text="Start stream") # change the label of the stream button if(self.toplevel_flag): # if the 2nd window is open, print number of data received and lost self.write_txt("total of frame received =" + str(self.window_data.count)) self.write_txt("LostCnt:"+str(self.window_data.lostcnt)) self.stream_flag = False else: # start streaming if(self.destroy_flag == False): self.__btn_stream.configure(text="Stop stream") # change the label of the stream button if(self.toplevel_flag): # if the 2nd window is open, reset number of data received and lost self.window_data.count = 0 self.window_data.lostcnt = 0 self.stream_flag = True # stop uC command if(self.cmd[data[2]] == 'stop_uC'): self.__btn_stream.configure(text="Start stream") self.stream_flag = False # read all registers command if(self.cmd[data[2]] == 'read_all_reg'): # adapt index to find the frame's end code offset = 100 else: offset = 0 # for every command look for the end code if((data[4+offset] == int("0x33", 0)) and (data[5+offset] == int("0xCC", 0))): if(self.destroy_flag == False): self.write_txt("Rx: " + self.cmd[data[2]] + " rand=" + str(data[3])) if(offset != 0): # in case of read all register command count = 4 for reg in self.regs: # update the value registers value reg.delete(0,END) reg.insert(END, str(data[count]*256 + data[count+1])) count += 2 else: # error: no end code if(self.destroy_flag == False): self.write_txt("Rx: ERROR end of frame") else: # error: no start code if(self.destroy_flag == False): self.write_txt("Rx: ERROR start of frame") else: # error: wrong emitter's ip if(self.destroy_flag == False): self.write_txt("Rx: ERROR ip of frame (" + adress[0] + ")") # socket exception: no data for received before timeout except socket.timeout: time.sleep(0.1) # socket exception: problem during execution of socket.recvfrom except socket.error: dummy = 0 # dummy execution to catch the exception #time.sleep(0.5) print("end of main thread", file=sys.stderr)
class CadastroVeiculo: '''Classe interface cadastrar veiculo''' def __init__(self, master=''): self.master = master self.veiculo = Veiculo() self.dao = VeiculoDAO() ''' self.window = Tk() self.window.geometry('1350x850+0+0') self.window.title('Cadastro de veículo') self.window.resizable(0, 0) # impede de maximizar self.window['bg'] = '#c9c9ff' ''' self.heading = Label(self.master, text="Cadastro de Veiculos", bg='#c9c9ff', fg='white', font=('Verdana 20 bold')) self.heading.place(x=650, y=0) # marca ========================================================================= self.marca = Label(self.master, text="Marca do veículo :", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.marca.place(x=10, y=70) self.marca_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.marca_entry.place(x=300, y=70) # modelo ========================================================================= self.modelo = Label(self.master, text="Modelo:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.modelo.place(x=10, y=120) self.modelo_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.modelo_entry.place(x=300, y=120) # ano ========================================================================= self.ano = Label(self.master, text="Ano:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.ano.place(x=10, y=170) self.ano_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.ano_entry.place(x=300, y=170) # cor ========================================================================= self.cor = Label(self.master, text="Cor:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.cor.place(x=10, y=220) self.cor_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.cor_entry.place(x=300, y=220) # self.cor_entry.insert(END, datetime.date.today()) # tanque ========================================================================= self.tanque = Label(self.master, text="Capacidade do tanque:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.tanque.place(x=10, y=270) self.tanque_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.tanque_entry.place(x=300, y=270) self.tanque_entry.insert(END, "litros") # combustivel ========================================================================= self.combustivel = Label(self.master, text="Tipo de Combustível:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.combustivel.place(x=10, y=320) self.combustivel_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.combustivel_entry.place(x=300, y=320) # consumo cidade ========================================================================= self.consumo_cidade = Label(self.master, text="Consumo na cidade:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.consumo_cidade.place(x=10, y=370) self.consumo_cidade_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.consumo_cidade_entry.place(x=300, y=370) self.consumo_cidade_entry.insert(END, "l/km") self.consumo_estrada = Label(self.master, text="Consumo na estrada:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.consumo_estrada.place(x=10, y=420) self.consumo_estrada_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.consumo_estrada_entry.place(x=300, y=420) self.consumo_estrada_entry.insert(END, "l/km") self.tempo_0_100 = Label(self.master, text="Tempo de 0km/h a 100km/h:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.tempo_0_100.place(x=10, y=470) self.tempo_0_100_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.tempo_0_100_entry.place(x=300, y=470) self.chassi = Label(self.master, text="Chassi:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.chassi.place(x=10, y=520) self.chassi_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.chassi_entry.place(x=300, y=520) self.placa = Label(self.master, text="Placa:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.placa.place(x=10, y=570) self.placa_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.placa_entry.place(x=300, y=570) self.tamanho_pneu = Label(self.master, text="Tamanho do pneu:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.tamanho_pneu.place(x=10, y=620) self.tamanho_pneu_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.tamanho_pneu_entry.place(x=300, y=620) self.som = Label(self.master, text="Som:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.som.place(x=10, y=670) self.som_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.som_entry.place(x=300, y=670) self.valor_diaria = Label(self.master, text="valor da diária:", bg='#c9c9ff', fg='white', font=('Verdana 15 bold')) self.valor_diaria.place(x=10, y=720) self.valor_diaria_entry = Entry(self.master, width=35, font=('Verdana 15 bold')) self.valor_diaria_entry.place(x=300, y=720) self.valor_diaria_entry.insert(END, 'R$ ') # BOTAO LIMPAR ========================================================================= self.botao_limpar = Button(self.master, text="Limpar", width=18, height=1, bg='#ffdfba', fg='black', font=('Verdana 15 bold'), command=self.clear_all) self.botao_limpar.place(x=800, y=700) self.botao_cadastrar = Button(self.master, text="Cadastrar", width=37, height=1, bg='#baffc9', fg='black', font=('Verdana 15 bold'), command=self.get_items) self.botao_cadastrar.place(x=800, y=650) self.botao_sair = Button(self.master, text="Sair", width=18, height=1, bg='#ffb3ba', fg='black', font=('Verdana 15 bold'), command=self.close) self.botao_sair.place(x=1070, y=700) self.veiculo_box = Listbox(self.master, width=38, height=20, font=('Verdana 15 bold')) self.veiculo_box.place(x=800, y=120) self.scrollbar_veiculo = Scrollbar(self.master) self.veiculo_box.configure(yscrollcommand=self.scrollbar_veiculo.set) self.scrollbar_veiculo.configure(command=self.veiculo_box.yview) self.scrollbar_veiculo.place(x=1340, y=120, relheight=0.62, anchor='ne') self.pesquisar_veiculo = Label(self.master, text="Lista de veiculos Cadastrados:", bg='#c9c9ff', font=('Verdana 15 bold')) self.pesquisar_veiculo.place(x=900, y=75) self.update_list() def update_list(self): try: self.veiculo_box.delete(0, END) for item in self.dao.view(): self.veiculo_box.insert(END, item) except Exception: print('Erro na lista veiculos.') def get_items(self): self.veiculo.marca = self.marca_entry.get() self.veiculo.modelo = self.modelo_entry.get() self.veiculo.ano = self.ano_entry.get() self.veiculo.cor = self.cor_entry.get() self.veiculo.tanque = self.tanque_entry.get() self.veiculo.combustivel = self.combustivel_entry.get() self.veiculo.consumo_cidade = self.consumo_cidade_entry.get() self.veiculo.consumo_estrada = self.consumo_estrada_entry.get() self.veiculo.tempo_0_100 = self.tempo_0_100_entry.get() self.veiculo.chassi = self.chassi_entry.get() self.veiculo.placa = self.placa_entry.get() self.veiculo.tamanho_pneu = self.tamanho_pneu_entry.get() self.veiculo.som = self.som_entry.get() self.veiculo.valor_diaria = self.valor_diaria_entry.get() if (self.veiculo.marca == '' or self.veiculo.modelo == '' or self.veiculo.ano == '' or self.veiculo.cor == '' or self.veiculo.tanque == '' or self.veiculo.combustivel == '' or self.veiculo.consumo_cidade == '' or self.veiculo.consumo_estrada == '' or self.veiculo.tempo_0_100 == '' or self.veiculo.chassi == '' or self.veiculo.placa == '' or self.veiculo.tamanho_pneu == '' or self.veiculo.som == '' or self.veiculo.valor_diaria == ''): tkinter.messagebox.showinfo( "Aviso:", "POR FAVOR PREENCHER TODOS OS CAMPOS!") else: try: self.veiculo.tanque = float(self.veiculo.tanque) self.veiculo.consumo_cidade = float( self.veiculo.consumo_cidade) self.veiculo.consumo_estrada = float( self.veiculo.consumo_estrada) self.veiculo.tempo_0_100 = float(self.veiculo.tempo_0_100) self.veiculo.valor_diaria = float(self.veiculo.valor_diaria) except ValueError: tkinter.messagebox.showinfo( 'Aviso!', 'Os campos tamanho do tanque, Consumo na cidade, consumo ma estrada, tempo_0_100 e valor da diária devem ser preenchidos com números!' ) else: try: self.dao.insert(self.veiculo) except Exception as e: print(e) else: tkinter.messagebox.showinfo( 'Aviso!', 'Cadastro Realizado com Sucesso!') self.clear_all() self.update_list() def clear_all(self): self.marca_entry.delete(0, END) self.modelo_entry.delete(0, END) self.ano_entry.delete(0, END) self.cor_entry.delete(0, END) self.tanque_entry.delete(0, END) self.tanque_entry.insert(END, "litros") self.combustivel_entry.delete(0, END) self.consumo_cidade_entry.delete(0, END) self.consumo_cidade_entry.insert(END, "l/km") self.consumo_estrada_entry.delete(0, END) self.consumo_estrada_entry.insert(END, "l/km") self.tempo_0_100_entry.delete(0, END) self.tempo_0_100_entry.insert(END, "segundos") self.chassi_entry.delete(0, END) self.placa.delete(0, END) self.tamanho_pneu.delete(0, END) self.som.delete(0, END) self.valor_diaria.delete(0, END) self.valor_diaria_entry.insert(END, 'R$ ') def close(self): self.dao.close() self.window.destroy() def run(self): self.window.mainloop()
favs_btn = Button(btn_frame, bg='red3', text=' Favs ', command=view_favs) favs_btn.grid(row=1, column=4, pady=4, padx=4) # Create listbox. main_lst_bx = Listbox(master=listbox_frame, selectmode='single', width=48, height=8, fg='black', bg='olivedrab3') # Add scrollbars to listbox. scrl_bar_y = Scrollbar(listbox_frame, orient='vertical') scrl_bar_y.pack(side=RIGHT, fill=Y) main_lst_bx.configure(yscrollcommand=scrl_bar_y.set) scrl_bar_y.configure(command=main_lst_bx.yview) scrl_bar_x = Scrollbar(listbox_frame, orient='horizontal') scrl_bar_x.pack(side=BOTTOM, fill=X) main_lst_bx.configure(xscrollcommand=scrl_bar_x.set) scrl_bar_x.configure(command=main_lst_bx.xview) main_lst_bx.pack() # Bind mouse right click to listbox. main_lst_bx.bind('<Button-3>', popup) # Add check buttons. VAR1 = IntVar() Checkbutton(listbox_frame, text='Hear insult', variable=VAR1).pack(side=LEFT) VAR2 = IntVar() Checkbutton(listbox_frame, text='Save Mp3 ', variable=VAR2).pack(side=RIGHT)
label_5 = Label(app, text='报备事项:', font=(20), pady=20) label_5.grid(row=2, column=0, sticky=E) entry_details = Entry(app, textvariable=details_text) entry_details.grid(row=2, column=1) #listbox details_list = Listbox(app, height=8, width=100) details_list.grid(row=4, column=0, columnspan=4, rowspan=6, pady=20, padx=20) #scroll scrollbar = Scrollbar(app) scrollbar.grid(row=4, column=5) #set scroll to listbox details_list.configure(yscrollcommand=scrollbar.set) scrollbar.configure(command=details_list.yview) #bind select details_list.bind('<<ListboxSelect>>', select_item) #buttons add_btn = Button(app, text="Add Part", width=12, command=add_item) add_btn.grid(row=3, column=0, pady=20) remove_btn = Button(app, text="Remove", width=12, command=remove_item) remove_btn.grid(row=3, column=1) update_btn = Button(app, text="Update", width=12, command=update_item) update_btn.grid(row=3, column=2) clear_btn = Button(app, text="Clear", width=12, command=clear_text)
# list box that shows all the books list_bx = Listbox(window, height=16, width=40, font="helvetica 13", background="ghost white") list_bx.grid(row=3, column=1, columnspan=14, sticky=W + E, pady=40, padx=15) list_bx.bind('<<ListboxSelect>>', get_selected_row) # scroll bar on right of listbox to enable scrolling scroll_bar = Scrollbar(window) scroll_bar.grid(row=1, column=8, rowspan=14, sticky=W) list_bx.configure( yscrollcommand=scroll_bar.set) # command enables vertical scrolling scroll_bar.configure( command=list_bx.yview) # yview makes listbox vertically scrollable # Modify button modify_btn = Button(window, text="Modify Record", bg="tomato3", fg="white", font="helvetica 10 bold", command=update_records) modify_btn.grid(row=15, column=4) # delete delete_btn = Button(window, text="Delete Record", bg="red", fg="white",
class UITree(Frame): def __init__(self, uicontroller, master, **options): super().__init__(master, **options) self.uicontroller = uicontroller self.tree = None self.ui_tree = None self.scrollbarvirt = Scrollbar(self) self.scrollbarhoriz = Scrollbar(self, orient=HORIZONTAL) self.grid_columnconfigure(0, weight=1) self.grid_columnconfigure(1, weight=0) self.grid_rowconfigure(0, weight=1) self.scrollbarvirt.grid(row=0, column=1, sticky='nes') self.scrollbarhoriz.grid(row=1, column=0, sticky='wes') self.set_handle_tree() def config_new_tree(self): if self.tree is not None: self.tree.destroy() self.tree = ItemTreeview(self, columns=('ui type',)) self.tree.heading('ui type', text='UI Element Type') self.tree.column('ui type', anchor='center', width=120, stretch=False) self.tree.tag_configure('odd_row', background='light grey') self.tree.tag_configure('even_row', background='white') self.scrollbarvirt.configure(command=self.tree.yview) self.tree.configure(yscrollcommand=self.scrollbarvirt.set) self.scrollbarhoriz.configure(command=self.tree.xview) self.tree.configure(xscrollcommand=self.scrollbarhoriz.set) self.tree.grid(row=0, column=0, sticky='news') def set_handle_tree(self, parent='', tree=None): if tree is None: self.config_new_tree() tree = self.uicontroller.get_ui_tree() is_even = True tags = {True: 'even_row', False: 'odd_row'} nodes = sorted(list(tree), key=lambda node: _get_sort_description(node)) for node in nodes: if node[0].parent is None and len(node[1]) == 0: continue text = _get_node_description(node[0]) typename = node[0].nodeclass typename = typename[typename.rfind('.') + 1:typename.rfind("'")] inserted = self.tree.insert_tracked(node[0], parent, 'end', text=text, values=typename, tags=tags[is_even]) self.set_handle_tree(parent=inserted, tree=node[1]) is_even = not is_even def get_selected(self): return self.tree.get_item()
class PageResult(): def __init__(self): self.root = Tk() self.createWidgets() self.root.mainloop() def initialize_variables(self): # Initial size of the app self.HEIGHT = 600 self.WIDTH = 800 self.root.title("Categorization Dialog Widget") self.root.minsize(750, 550) def createWidgets(self): self.initialize_variables() # Background self.canvas = Canvas(self.root, height=self.HEIGHT, width=self.WIDTH) self.background_label = Label(self.root, bg='#3C1E5F') self.background_label.place(relwidth=1, relheight=1) self.canvas.pack() # Upper frame with logo and info message self.higher_frame = Frame(self.root, bg='#FFD164', bd=5) self.higher_frame.place(relx=0.5, rely=0.1, relwidth=0.85, relheight=0.35, anchor='n') self.logo = Canvas(self.higher_frame, bd=1) self.logo.place(relx=0, rely=0, relwidth=1, relheight=0.5) self.img = PhotoImage(file="logo.png") self.img = self.img.subsample(6) self.logo.create_image(0, 0, anchor='nw', image=self.img) self.var = "Categorization of txt files from a given folder to sub-folders and presenting them in a table" self.infoMessage = Message(self.higher_frame, text=self.var, justify='center', width=350, font=("Courier bold", 14)) self.infoMessage.place(relx=0.4, rely=0.05, relwidth=0.5, relheight=0.3) # Middle frame with info message and button self.middle_frame = Frame(self.root, bg='#FFD164', bd=5) self.middle_frame.place(relx=0.5, rely=0.25, relwidth=0.85, relheight=0.1, anchor='n') self.openFolder = Label(self.middle_frame, text="Open a folder with \ninput files", justify='center', bg='white', fg='#EE7C7D', font=( "Courier", 12, )) self.openFolder.place(relx=0, rely=0, relwidth=0.65, relheight=1) self.button = Button(self.middle_frame, text="Browse", font=("Courier", 12), bg='#b3b3b3', activebackground='#f2d9e6', command=lambda: self.fileDialog()) self.button.place(relx=0.7, relwidth=0.3, relheight=1) # Lower frame with scrollbars for displaying of categories and file names self.lower_frame = Frame(self.root, bg='#FFD164', bd=5) self.lower_frame.place(relx=0.5, rely=0.35, relwidth=0.85, relheight=0.55, anchor='n') self.lower_frame.grid_rowconfigure(0, weight=1) self.lower_frame.grid_columnconfigure(0, weight=1) self.results = Listbox(self.lower_frame, font=("Courier", 12), bg='white', fg='#EE7C7D', justify='left', bd=3) self.results.grid(column=1, row=1, padx=10, ipady=10) self.results.place(relwidth=1, relheight=1) self.scrollbar_vertical = Scrollbar(self.lower_frame, orient=VERTICAL) self.scrollbar_vertical.pack(side=RIGHT, fill=Y) self.scrollbar_vertical.configure(command=self.results.yview) self.scrollbar_horizontal = Scrollbar(self.lower_frame, orient=HORIZONTAL) self.scrollbar_horizontal.pack(side=BOTTOM, fill=X) self.scrollbar_horizontal.configure(command=self.results.xview) self.results.configure(yscrollcommand=self.scrollbar_vertical.set) self.results.configure(xscrollcommand=self.scrollbar_horizontal.set) # Gets the selected folder by the user and uses keywordSearch in txt files, then presents categories and file names def fileDialog(self): try: self.folderSelected = filedialog.askdirectory() self.categorizer = Categorizer(self.folderSelected) #1. Shows the amount of analyzed Emails amountOfFiles = self.categorizer.amountOfFiles(self.folderSelected) self.results.insert( END, "Amount of analysed Emails: " + str(amountOfFiles)) self.results.insert(END, "\n") #Shows a List of categories with their emails self.dict_obj = self.categorizer.categorizeFilesFromDirectoryInMapAndSubDirectory( ) self.results.insert(END, "Category".ljust(20, ' ') + "File name") self.results.insert(END, "\n") for key, val in self.dict_obj.items(): self.results.insert(END, str(key).ljust(20, ' ') + str(val)) except UnicodeDecodeError: self.results.insert(END, "Selected folder does not contain txt files.")
class Gui(): def __init__(self): '''Essa classe modela a interface gráfica da aplicação ''' self.window = Tk() self.window.wm_title("Cadastro de Clientes") self.txtNacionalidade = StringVar() self.txtTipo_Documento = StringVar() self.txtCPF = StringVar() self.txtNumero_CNH = StringVar() self.txtSobrenome = StringVar() self.txtEmail = StringVar() self.txtGenero = StringVar() self.txtTelefone = StringVar() self.lblnacionalidade = Label(self.window, text="Nacionalidade") self.lbltipo_documento = Label(self.window, text="Tipo de documento") self.lblcpf = Label(self.window, text="CPF") self.lblnumero_cnh = Label(self.window, text="Numero da CNH") self.lblsobrenome = Label(self.window, text="Sobrenome") self.lblemail = Label(self.window, text="Email") self.lblgenero = Label(self.window, text="Gênero") self.lbltelefone = Label(self.window, text="Telefone") self.entNacionalidade = Entry(self.window, textvariable=self.txtNacionalidade) self.entTipo_Documento = Entry(self.window, textvariable=self.txtTipo_Documento) self.entGenero = Entry(self.window, textvariable=self.txtGenero) self.entTelefone = Entry(self.window, textvariable=self.txtTelefone) self.entNumero_CNH = Entry(self.window, textvariable=self.txtNumero_CNH) self.entSobrenome = Entry(self.window, textvariable=self.txtSobrenome) self.entEmail = Entry(self.window, textvariable=self.txtEmail) self.entCPF = Entry(self.window, textvariable=self.txtCPF) self.listClientes = Listbox(self.window, width=45) self.scrollClientes = Scrollbar(self.window) self.btnViewAll = Button(self.window, text="Ver todos") self.btnBuscar = Button(self.window, text="Buscar") self.btnInserir = Button(self.window, text="Continuar") self.btnUpdate = Button(self.window, text="Atualizar Selecionados") self.btnDel = Button(self.window, text="Deletar Selecionados") self.btnClose = Button(self.window, text="Fechar") def configure_layout(self): "Configurando os itens na janela em grid" #Associando os objetos a grid da janela... self.lblnacionalidade.grid(row=0, column=0) self.lbltipo_documento.grid(row=1, column=0) self.lblcpf.grid(row=2, column=0) self.lblgenero.grid(row=3, column=0) self.lbltelefone.grid(row=4, column=0) self.entNacionalidade.grid(row=0, column=1) self.entTipo_Documento.grid(row=1, column=1) self.entCPF.grid(row=2, column=1) self.entGenero.grid(row=3, column=1) self.entTelefone.grid(row=4, column=1) self.lblnumero_cnh.grid(row=5, column=0) self.lblsobrenome.grid(row=6, column=0) self.lblemail.grid(row=7, column=0) self.entNumero_CNH.grid(row=5, column=1) self.entSobrenome.grid(row=6, column=1) self.entEmail.grid(row=7, column=1) self.listClientes.grid( row=0, column=2, rowspan=10 ) #rowspan para fazer com que o objeto ocupe mais de uma linha. self.scrollClientes.grid(row=0, column=3, rowspan=10) self.btnViewAll.grid( row=8, column=0, columnspan=2 ) #columnspan para fazer com que o objeto ocupe mais de uma linha. self.btnBuscar.grid(row=9, column=0, columnspan=2) self.btnInserir.grid(row=10, column=0, columnspan=2) self.btnUpdate.grid(row=11, column=0, columnspan=2) self.btnDel.grid(row=12, column=0, columnspan=2) self.btnClose.grid(row=13, column=0, columnspan=2) #Associando a Scrollbar com a Listbox... self.listClientes.configure(yscrollcommand=self.scrollClientes.set) self.scrollClientes.configure(command=self.listClientes.yview) def configure_sizes(self): "definindo o tamanho dos elementos" x_pad = 5 y_pad = 3 ''' * Precisamos aplicar o padding para quase todos os elementos, definir a largura dos botões e mais alguns pontos estéticos. Isso poderia ser feito manualmente, repetindo o código para todos os elementos. Todavia, não vamos fazer assim. * Faremos a mudança de estilo da seguinte forma: Uma iteração por todos os elementos da janela, realizando as alterações conforme passamos pelos elementos. ''' for child in self.window.winfo_children(): widget_class = child.__class__.__name__ if widget_class == "Button": child.grid_configure(sticky='WE', padx=x_pad, pady=y_pad) elif widget_class == "Listbox": child.grid_configure(padx=0, pady=0, sticky='NS') elif widget_class == "Scrollbar": child.grid_configure(padx=0, pady=0, sticky='NS') else: child.grid_configure(padx=x_pad, pady=y_pad, sticky='N') ''' * padx e pady: Padding para o eixo X e Y do elemento. É referente ao espaço entre a borda deste elemento e a borda dos outros elementos da janela; * sticky: Indica em qual ponto da janela (norte – N, sul – S, leste – E ou oeste W) o objeto estará ancorado. Se você combinar o ponto leste e oeste (EW), o elemento ocupará todo o espaço horizontal da coluna em que está localizado. O mesmo ocorre se colocarmos NS (norte-sul), o elemento ocupará todo o espaço vertical. * Para o ListBox e o ScrollBar, vamos definir padding zero para que eles fiquem colados, parecendo que são apenas um elemento. ''' def run(self): self.configure_layout() self.configure_sizes() self.window.mainloop()
def createWiget(self): #整体框架 top_frame = LabelFrame(self.master) top_frame.grid(row=0, column=1, rowspan=2, columnspan=5, sticky=NSEW, padx=8, pady=5) #输入框架 input_frame = LabelFrame(top_frame) input_frame.grid(row=0, column=1, rowspan=2, columnspan=5, sticky=NSEW, padx=8, pady=5) #输出框架 output_frame = LabelFrame(top_frame) output_frame.grid(row=3, column=1, rowspan=2, columnspan=5, sticky=NSEW, padx=8, pady=5) self.select = ttk.Combobox(input_frame, width=10, font=self.ft) self.select.grid(row=1, column=1, sticky=NSEW, padx=8, pady=5) self.select['value'] = ('网易云音乐', 'QQ音乐', '虾米音乐') self.select.current(0) print(self.select.get()) """输入文本框""" v1 = StringVar() self.eny1 = Entry(input_frame, textvariable=v1, width=50, font=self.ft) self.eny1.grid(row=1, column=2, columnspan=5, sticky=NSEW, padx=8, pady=5) self.eny1.bind("<Return>", lambda event: self.selenium_function()) """确定按键""" btn1 = Button(input_frame, text='确定', width=16, command=self.selenium_function) btn1.grid(row=1, column=7, sticky=NSEW, pady=5, padx=8) """列表框""" self.lb = Listbox(output_frame, selectmode=EXTENDED, font=self.ft, height=29, width=78) self.lb.bind('<Double-Button-1>', self.player) self.lb.grid(row=0, column=1, columnspan=5, pady=5, padx=8, sticky=NSEW) """退出按钮""" btn2 = Button(output_frame, text="退出", width=10, command=self.quit_sys) btn2.grid(row=1, column=1, sticky=NS, pady=5, padx=8) """上一页""" btn3 = Button(output_frame, text="上一页", width=10, command=self.last_page) btn3.grid(row=1, column=2, sticky=NS, pady=5, padx=8) """下一页""" btn4 = Button(output_frame, text="下一页", width=10, command=self.next_page) btn4.grid(row=1, column=3, sticky=NS, pady=5, padx=8) """下载按钮""" btn1 = Button(output_frame, text="下载", width=10, command=self.download_music) btn1.grid(row=1, column=4, sticky=NS, pady=5, padx=8) """添加纵向滚动条""" scroll = Scrollbar(output_frame) scroll.grid( row=0, column=7, sticky='ns', ) self.lb.configure(yscrollcommand=scroll.set) scroll.configure(command=self.lb.yview)
class Tela_bibliotecario(Tela): '''Classe que modela a interface grafica da tela do bibliotecario depois de feito o login''' def __init__(self): super().__init__() self.janela.wm_title("bibliotecario - DELIBRARY") self.txt_nome_cliente = StringVar() self.txt_sobrenome_cliente = StringVar() self.txt_cpf_cliente = StringVar() self.txt_login_cliente = StringVar() self.txt_senha_cliente = StringVar() self.txt_email_cliente = StringVar() self.txt_id_livro = StringVar() self.txt_nome_livro = StringVar() self.txt_genero_livro = StringVar() self.txt_autor_livro = StringVar() self.txt_area_livro = StringVar() self.txt_editora_livro = StringVar() self.txt_edicao_livro = StringVar() self.lbl_janela_cliente = Label(self.janela, text="ATUALIZAR CADASTRO DE CLIENTE") self.lbl_nome_cliente = Label(self.janela, text="Nome") self.lbl_sobrenome_cliente = Label(self.janela, text="Sobrenome") self.lbl_cpf_cliente = Label(self.janela, text="CPF") self.lbl_login_cliente = Label(self.janela, text="Criar login") self.lbl_senha_cliente = Label(self.janela, text="Criar senha") self.lbl_email_cliente = Label(self.janela, text="Email ") self.ent_nome_cliente = Entry(self.janela, textvariable=self.txt_nome_cliente) self.ent_sobrenome_cliente = Entry( self.janela, textvariable=self.txt_sobrenome_cliente) self.ent_cpf_clienteo = Entry(self.janela, textvariable=self.txt_cpf_cliente) self.ent_login_cliente = Entry(self.janela, textvariable=self.txt_login_cliente) self.ent_senha_cliente = Entry(self.janela, textvariable=self.txt_senha_cliente) self.ent_email_cliente = Entry(self.janela, textvariable=self.txt_email_cliente) self.btn_criar_acesso_cliente = Button(self.janela, width=15, text="Criar Acesso") self.btn_retirar_acesso_cliente = Button(self.janela, width=15, text="Retirar Acesso") self.btn_ver_todos_cliente = Button(self.janela, width=15, text="Ver Todos") self.btn_atualizar = Button(self.janela, width=15, text="Atualizar") self.btn_realizar_emprestimo_devolucao = Button( self.janela, width=15, text="Emprestimo/Devolucao") self.btn_fechar = Button(self.janela, width=15, text="Sair") self.list = Listbox(self.janela, width=72) self.scroll = Scrollbar(self.janela) self.lbl_janela_livro = Label(self.janela, text="CADASTRO DE LIVRO") self.lbl_id_livro = Label(self.janela, text="ID") self.lbl_nome_livro = Label(self.janela, text="Nome") self.lbl_genero_livro = Label(self.janela, text="Genero") self.lbl_autor_livro = Label(self.janela, text="Autor") self.lbl_area_livro = Label(self.janela, text="Area") self.lbl_editora_livro = Label(self.janela, text="Editora") self.lbl_edicao_livro = Label(self.janela, text="Edicao") self.ent_id_livro = Entry(self.janela, textvariable=self.txt_id_livro) self.ent_nome_livro = Entry(self.janela, textvariable=self.txt_nome_livro) self.ent_genero_livro = Entry(self.janela, textvariable=self.txt_genero_livro) self.ent_autor_livro = Entry(self.janela, textvariable=self.txt_autor_livro) self.ent_area_livro = Entry(self.janela, textvariable=self.txt_area_livro) self.ent_editora_livro = Entry(self.janela, textvariable=self.txt_editora_livro) self.ent_edicao_livro = Entry(self.janela, textvariable=self.txt_edicao_livro) self.btn_cadastro_livro = Button(self.janela, width=15, text="Cadastrar Livro") self.btn_retirar_livro = Button(self.janela, width=15, text="Retirar Livro") def config_layout(self): '''Metodo para configurar os widgets da janela''' self.lbl_janela_cliente.grid(row=0, column=0) self.lbl_nome_cliente.grid(row=1, column=0) self.lbl_sobrenome_cliente.grid(row=2, column=0) self.lbl_cpf_cliente.grid(row=3, column=0) self.lbl_email_cliente.grid(row=4, column=0) self.lbl_login_cliente.grid(row=5, column=0) self.lbl_senha_cliente.grid(row=6, column=0) self.ent_nome_cliente.grid(row=1, column=1) self.ent_sobrenome_cliente.grid(row=2, column=1) self.ent_cpf_clienteo.grid(row=3, column=1) self.ent_login_cliente.grid(row=4, column=1) self.ent_senha_cliente.grid(row=5, column=1) self.ent_email_cliente.grid(row=6, column=1) self.btn_criar_acesso_cliente.grid(row=7, column=0) self.btn_retirar_acesso_cliente.grid(row=7, column=1) self.btn_ver_todos_cliente.grid(row=8, column=0) self.btn_atualizar.grid(row=8, column=1) self.list.grid(row=1, column=3, rowspan=16) self.scroll.grid(row=1, column=4, rowspan=16) self.list.configure(yscrollcommand=self.scroll.set) self.scroll.configure(command=self.list.yview) self.lbl_janela_livro.grid(row=9, column=0) self.lbl_id_livro.grid(row=10, column=0) self.lbl_nome_livro.grid(row=11, column=0) self.lbl_genero_livro.grid(row=12, column=0) self.lbl_autor_livro.grid(row=13, column=0) self.lbl_area_livro.grid(row=14, column=0) self.lbl_editora_livro.grid(row=15, column=0) self.lbl_edicao_livro.grid(row=16, column=0) self.ent_id_livro.grid(row=10, column=1) self.ent_nome_livro.grid(row=11, column=1) self.ent_genero_livro.grid(row=12, column=1) self.ent_autor_livro.grid(row=13, column=1) self.ent_area_livro.grid(row=14, column=1) self.ent_editora_livro.grid(row=15, column=1) self.ent_edicao_livro.grid(row=16, column=1) self.btn_cadastro_livro.grid(row=17, column=0) self.btn_retirar_livro.grid(row=17, column=1) self.btn_realizar_emprestimo_devolucao.grid(row=18, column=0) self.btn_fechar.grid(row=19, column=0) def iniciar(self): '''Metodo para desenhar a janela e processar eventos''' self.config_layout() return super().iniciar()
class Preferences(Frame): def __init__(self, master, valves): Frame.__init__(self, master, bg='sky blue', width=1366, height=768) self.master = master self.canvas = Canvas(self, height=640, width=1300, bg='sky blue') self.frame = Frame(self.canvas, bg='sky blue') self.frame.bind('<Button-1>', self.process_click_out) self.scrollbar = Scrollbar(self, orient='vertical', command=self.canvas.yview) self.scrollbar.configure(activebackground='DarkRed', background='red', width=40) self.canvas.configure(yscrollcommand=self.scrollbar.set, scrollregion=[0, 0, 1366, 2100]) self.scrollbar.pack(side='right', fill='y') self.canvas.pack(side='left') self.canvas.create_window((0, 0), window=self.frame, anchor='nw') self.keyboard = Keyboard(self.master) self.valves = valves self.frame.config(bg='sky blue') index = 0 while index < 25: self.frame.grid_rowconfigure(index, minsize=80) self.frame.grid_columnconfigure(index, minsize=150) index += 1 num_label = [Label(self.frame, text='1'), Label(self.frame, text='2'), Label(self.frame, text='3'), Label(self.frame, text='4'), Label(self.frame, text='5'), Label(self.frame, text='6'), Label(self.frame, text='7'), Label(self.frame, text='8'), ] row = 1 for each in num_label: each.grid(row=row, column=0) each.config(width=3, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4') row += 3 text_label = [Label(self.frame, text='VALVE 1: '), Label(self.frame, text='ACTION A: '), Label(self.frame, text='ACTION B: '), Label(self.frame, text='VALVE 2: '), Label(self.frame, text='ACTION A: '), Label(self.frame, text='ACTION B: '), Label(self.frame, text='VALVE 3: '), Label(self.frame, text='ACTION A: '), Label(self.frame, text='ACTION B: '), Label(self.frame, text='VALVE 4: '), Label(self.frame, text='ACTION A: '), Label(self.frame, text='ACTION B: '), Label(self.frame, text='VALVE 5: '), Label(self.frame, text='ACTION A: '), Label(self.frame, text='ACTION B: '), Label(self.frame, text='VALVE 6: '), Label(self.frame, text='ACTION A: '), Label(self.frame, text='ACTION B: '), Label(self.frame, text='VALVE 7: '), Label(self.frame, text='ACTION A: '), Label(self.frame, text='ACTION B: '), Label(self.frame, text='VALVE 8: '), Label(self.frame, text='ACTION A: '), Label(self.frame, text='ACTION B: ') ] row = 1 for each in text_label: each.grid(row=row, column=1) each.config(width=12, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4') row += 1 self.valve_label = [Label(self.frame, textvariable=self.valves[0].get_name()), Label(self.frame, textvariable=self.valves[1].get_name()), Label(self.frame, textvariable=self.valves[2].get_name()), Label(self.frame, textvariable=self.valves[3].get_name()), Label(self.frame, textvariable=self.valves[4].get_name()), Label(self.frame, textvariable=self.valves[5].get_name()), Label(self.frame, textvariable=self.valves[6].get_name()), Label(self.frame, textvariable=self.valves[7].get_name())] row = 1 for each in self.valve_label: each.grid(row=row, column=2) each.config(width=12, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4', anchor='w') each.bind('<Button-1>', self.process_click_out) row += 3 self.entry_field = [Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text=''), Entry(self.frame, text='') ] row = 1 for each in self.entry_field: each.grid(row=row, column=3) each.config(width=12, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4') each.bind('<Button-1>', self.process_click_in) row += 1 self.action_a_label = [Label(self.frame, textvariable=self.valves[0].get_action_a()), Label(self.frame, textvariable=self.valves[1].get_action_a()), Label(self.frame, textvariable=self.valves[2].get_action_a()), Label(self.frame, textvariable=self.valves[3].get_action_a()), Label(self.frame, textvariable=self.valves[4].get_action_a()), Label(self.frame, textvariable=self.valves[5].get_action_a()), Label(self.frame, textvariable=self.valves[6].get_action_a()), Label(self.frame, textvariable=self.valves[7].get_action_a()) ] row = 2 for each in self.action_a_label: each.grid(row=row, column=2) each.config(width=12, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4', anchor='w') each.bind('<Button-1>', self.process_click_out) row += 3 self.action_b_label = [Label(self.frame, textvariable=self.valves[0].get_action_b()), Label(self.frame, textvariable=self.valves[1].get_action_b()), Label(self.frame, textvariable=self.valves[2].get_action_b()), Label(self.frame, textvariable=self.valves[3].get_action_b()), Label(self.frame, textvariable=self.valves[4].get_action_b()), Label(self.frame, textvariable=self.valves[5].get_action_b()), Label(self.frame, textvariable=self.valves[6].get_action_b()), Label(self.frame, textvariable=self.valves[7].get_action_b()) ] row = 3 for each in self.action_b_label: each.grid(row=row, column=2) each.config(width=12, font=('Lucida Console', 30), bg='sky blue', fg='RoyalBlue4', anchor='w') each.bind('<Button-1>', self.process_click_out) row += 3 self.lock() def process_click_out(self, event): self.canvas.configure(height=660) self.keyboard.grid_forget() def process_click_in(self, event): index = 0 for each in self.entry_field: if each == event.widget: break index += 1 if event.widget.cget('state') == 'normal': self.canvas.configure(height=250) self.keyboard.grid(row=2, column=0) self.keyboard.set_entry(event.widget) self.canvas.yview_moveto(index / 28) def lock(self): for each in self.entry_field: each.config(state='disabled')
def createWiget(self): #创建布局 """整体控件框""" frame_all = LabelFrame(self.master, text="作者:nerkeler", labelanchor="se") frame_all.grid(row=0, column=1, rowspan=2, columnspan=4, padx=8, pady=5, sticky=NSEW) """输入控件""" frame_input = LabelFrame(frame_all, text="搜索框", labelanchor="nw") frame_input.grid(row=0, column=1, rowspan=2, columnspan=4, padx=8, pady=5, sticky=NSEW) """输出控件""" frame_output = LabelFrame(frame_all, text="搜索结果", labelanchor="nw") frame_output.grid(row=2, column=1, rowspan=6, columnspan=4, padx=8, pady=5, sticky=NSEW) """提示文字""" self.lay = Label(frame_input, text="请输入需要搜索的题目:(整体查询(首选)或关键字查询(次选))", anchor='w') self.lay.grid( row=1, column=0, columnspan=4, sticky=NSEW, padx=5, ) """输入文本框""" v1 = StringVar() self.eny1 = Entry(frame_input, textvariable=v1, width=32, font=self.ft) self.eny1.grid(row=2, column=0, columnspan=3, sticky=NSEW, padx=8, pady=5) self.eny1.bind("<Return>", lambda event: self.get_answer()) #绑定回车按键,隐式函数 """天键按键""" btn1 = Button(frame_input, text='天键', width=10, command=self.sky_button) btn1.grid(row=2, column=3, sticky=NSEW, pady=5, padx=8) """确定按键""" btn1 = Button(frame_input, text='确定', command=self.get_answer) btn1.grid(row=3, column=3, sticky=NSEW, pady=5, padx=8) """清空按键""" btn2 = Button(frame_input, text='清空', command=lambda: self.eny1.delete(0, END)) btn2.grid(row=3, column=1, sticky=NSEW, pady=5, padx=8) """粘贴按键""" btn2 = Button(frame_input, text='粘贴', command=self.buttonTest) btn2.grid(row=3, column=2, sticky=NSEW, pady=5, padx=8) """历史按键""" btn2 = Button(frame_input, text='历史', command=self.get_history) btn2.grid(row=3, column=0, sticky=NSEW, pady=5, padx=8) """text 输出框""" self.tet = Text(frame_output, width=40, height=17, font=self.ft) self.tet.grid(row=4, column=0, columnspan=3, pady=5, padx=8) """初始使用说明""" self.tet.insert( INSERT, """ _ooOoo_ o8888888o 88" . "88 (| ^_^ |) O\\ = /O ____/`---'\____ .' \\\| |// `. / \\\||| : |||// \\ / _||||| -:- |||||- \\ | | \\\\ - /// | | | \_| ''\---/'' | | \ .-\__ `-` ___/-. / ___`. .' /--.--\ `. . ___ ."" '< `.___\_<|>_/___.' >'"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / / =`-.____`-.___\_____/___.-`____.-'= `=---=' """) #self.tet.insert(INSERT,"功能演示地址:https://www.15156626517.top/48/\n") self.tet.insert(INSERT, "**v1.9新增佛祖个性界面**\n") self.tet.insert(INSERT, "**v1.7:更改整体布局,加入GitHub地址**\n") self.tet.insert(INSERT, "**v1.5:增‘天键’,即一键顺序完成清空,粘贴,确定等功能。手动输入题目请勿使用**\n\n") self.tet.insert(INSERT, "1、本应用为超星尔雅查题工具,支持超星尔雅平台和智慧树知道平台。\n") self.tet.insert(INSERT, "2、第一行为题目输入框。\n") self.tet.insert(INSERT, "3、右键粘贴或 ctrl+v,ctrl+a全选,enter 回车确定,添加了纵向滚动条。\n") self.tet.insert(INSERT, "4、输出文本框禁用编辑,历史默认保存最近10条查询记录\n") self.tet.insert( INSERT, "5、联系反馈邮箱:[email protected]\n作者:nerkeler\nGithub源码地址:https://github.com/nerkeler/chaoxing_tool\n" ) self.tet.insert(INSERT, "6、基于python tkinter 编写,技术不足之处还望谅解。\n\n") self.tet.insert( INSERT, "友情提示:\n 查题时优先复制题目所有内容,整体搜索失败可尝试关键字查询, 由于查题api是调用外部接口,所以应用需要不定期更改查题接口。" ) self.tet.insert(INSERT, "如发现查题失败,请尽快联系本人,并附上你的联系方式,我会尽快修复!\n感谢支持!") self.tet.config(state=DISABLED) #禁用编辑 """添加纵向滚动条""" scroll = Scrollbar(frame_output) scroll.grid( row=4, column=3, sticky='ns', ) self.tet.configure(yscrollcommand=scroll.set) scroll.configure(command=self.tet.yview)
text="Add Book", bg="blue", fg="white", font="helvetica 10 bold", command=add_book) ad_bt.grid(row=0, column=6, sticky=W) li_b = Listbox(root, height=16, width=40, font="helvetica 13", bg="light blue") li_b.grid(row=3, column=1, columnspan=14, sticky=W + E, pady=40, padx=15) li_b.bind('<<ListboxSelect>>', get_selected_row) sc_b = Scrollbar(root) sc_b.grid(row=1, column=8, rowspan=14, sticky=W) li_b.configure(yscrollcommand=sc_b.set) sc_b.configure(command=li_b.yview) m_bt = Button(root, text="Modify Record", bg="purple", fg="white", font="helvetica 10 bold", command=update_records) m_bt.grid(row=15, column=4) d_bt = Button(root, text="Delete Record", bg="purple", fg="white", font="helvetica 10 bold", command=delete_records)
year_text = StringVar() e3 = Entry(window, textvariable=year_text) e3.grid(row=1, column=1) isbn_text = StringVar() e4 = Entry(window, textvariable=isbn_text) e4.grid(row=1, column=3) list1 = Listbox(window, height=6, width=35) list1.grid(row=2, column=0, rowspan=6, columnspan=2) sb1 = Scrollbar(window) sb1.grid(row=2, column=3, rowspan=6) list1.configure(yscrollcommand=sb1.set) sb1.configure(command=list1.yview) list1.bind('<<ListboxSelect>>', get_selected_row) b1 = Button(window, text="View all", width=12, command=view_command) b1.grid(row=2, column=3) b2 = Button(window, text="Search entry", width=12, command=search_command) b2.grid(row=3, column=3) b3 = Button(window, text="Add entry", width=12, command=add_command) b3.grid(row=4, column=3) b4 = Button(window, text="Updated selected", width=12, command=update_command) b4.grid(row=5, column=3)
class Tela_administrador(Tela): '''Classe que modela a interface grafica da tela do administrador depois de feito o login''' def __init__(self): super().__init__() self.janela.wm_title("administrador - DELIBRARY") self.txt_nome_bibliotecario = StringVar() self.txt_sobrenome_bibliotecario = StringVar() self.txt_cpf_bibliotecario = StringVar() self.txt_login_bibliotecario = StringVar() self.txt_senha_bibliotecario = StringVar() self.txt_email_bibliotecario = StringVar() self.lbl_janela_bibliotecario = Label(self.janela, text="CADASTRO DE BIBLIOTECARIO") self.lbl_nome_bibliotecario = Label(self.janela, text="Nome") self.lbl_sobrenome_bibliotecario = Label(self.janela, text="Sobrenome") self.lbl_cpf_bibliotecario = Label(self.janela, text="CPF") self.lbl_login_bibliotecario = Label(self.janela, text="Criar login") self.lbl_senha_bibliotecario = Label(self.janela, text="Criar senha") self.lbl_email_bibliotecario = Label(self.janela, text="Email ") self.ent_nome_bibliotecario = Entry( self.janela, textvariable=self.txt_nome_bibliotecario) self.ent_sobrenome_bibliotecario = Entry( self.janela, textvariable=self.txt_sobrenome_bibliotecario) self.ent_cpf_bibliotecario = Entry( self.janela, textvariable=self.txt_cpf_bibliotecario) self.ent_login_bibliotecario = Entry( self.janela, textvariable=self.txt_login_bibliotecario) self.ent_senha_bibliotecario = Entry( self.janela, textvariable=self.txt_senha_bibliotecario) self.ent_email_bibliotecario = Entry( self.janela, textvariable=self.txt_email_bibliotecario) self.btn_criar_acesso_bibliotecario = Button(self.janela, width=15, text="Criar Acesso") self.btn_retirar_acesso_bibliotecario = Button(self.janela, width=15, text="Retirar Acesso") self.btn_ver_todos_bibliotecario = Button(self.janela, width=15, text="Ver Todos") self.btn_fechar = Button(self.janela, width=15, text="Sair") self.list_bibliotecario = Listbox(self.janela, width=77) self.scroll_bibliotecario = Scrollbar(self.janela) def config_layout(self): '''Metodo para configurar os widgets da janela''' self.lbl_janela_bibliotecario.grid(row=0, column=0) self.lbl_nome_bibliotecario.grid(row=1, column=0) self.lbl_sobrenome_bibliotecario.grid(row=2, column=0) self.lbl_cpf_bibliotecario.grid(row=3, column=0) self.lbl_email_bibliotecario.grid(row=4, column=0) self.lbl_login_bibliotecario.grid(row=5, column=0) self.lbl_senha_bibliotecario.grid(row=6, column=0) self.btn_ver_todos_bibliotecario.grid(row=7, column=0) self.btn_criar_acesso_bibliotecario.grid(row=8, column=0) self.btn_retirar_acesso_bibliotecario.grid(row=9, column=0) self.btn_fechar.grid(row=10, column=0) self.ent_nome_bibliotecario.grid(row=1, column=1) self.ent_sobrenome_bibliotecario.grid(row=2, column=1) self.ent_cpf_bibliotecario.grid(row=3, column=1) self.ent_email_bibliotecario.grid(row=4, column=1) self.ent_login_bibliotecario.grid(row=5, column=1) self.ent_senha_bibliotecario.grid(row=6, column=1) self.list_bibliotecario.grid(row=1, column=2, rowspan=7) self.scroll_bibliotecario.grid(row=1, column=3, rowspan=7) self.list_bibliotecario.configure( yscrollcommand=self.scroll_bibliotecario.set) self.scroll_bibliotecario.configure( command=self.list_bibliotecario.yview) def iniciar(self): '''Metodo para desenhar a janela e processar eventos''' self.config_layout() return super().iniciar()
class Watchman_reg(): def __init__(self, master): # Global variable self.master = master self.regs = [] self.flag_data = [] self.UDP_IP = '192.168.1.10' self.UDP_PORT = 7 self.cmd = [ 'write_all_reg', 'read_all_reg', 'ping', 'start_stop_stream', 'stop_uC' ] self.stream_flag = False self.destroy_flag = False # Initialize the GUI self.init_window() self.init_UDP_connection() self.timer = Timer(0.5, self.timer_int, args=()) self.run_flag = True self.end_flag = False self.toplevel_flag = False self.timer.start() def init_window(self): # Change window's title self.master.title("Watchman - registers") self.master.protocol( "WM_DELETE_WINDOW", self.exit_prog) # when use close window with the red cross # Menu bar self.menu = Menu(self.master) self.master.config(menu=self.menu) self.submenu = Menu(self.menu) self.menu.add_cascade(label='Menu', menu=self.submenu) self.submenu.add_command(label='Load sequence...', command=self.openfile) self.submenu.add_command(label='Save sequence...', command=self.savefile) self.submenu.add_command(label='EXIT', command=self.exit_prog) self.menu.add_cascade(label='HELP', command=self.help_callback) # Table for the registers count = 0 for i in range(0, 4, 2): for j in range(25): l = Label(self.master, relief=RIDGE, text=(" Reg. " + str(count) + " ")) l.grid(column=i, row=j, sticky=N + S + E + W) var = StringVar() var.trace('w', partial(self.entry_callback, count, var)) e = Entry(self.master, relief=RIDGE, textvariable=var) e.grid(column=(i + 1), row=j, sticky=N + S + E + W) self.regs.append(e) self.flag_data.append(1) count += 1 # Buttons self.btn_write_all = Button(self.master, text="Write all reg.", command=partial(self.send_command, 0)) self.btn_write_all.grid(column=4, row=0, rowspan=2, padx=5, sticky=W + E) self.btn_write_all.configure(state="disable") self.btn_read_all = Button(self.master, text="Read all reg.", command=partial(self.send_command, 1)) self.btn_read_all.grid(column=4, row=2, rowspan=2, padx=5, sticky=W + E) self.btn_ping = Button(self.master, text="Ping", command=partial(self.send_command, 2)) self.btn_ping.grid(column=4, row=4, rowspan=2, padx=5, sticky=W + E) self.btn_stream = Button(self.master, text="Start stream.", command=partial(self.send_command, 3)) self.btn_stream.grid(column=4, row=6, rowspan=2, padx=5, sticky=W + E) self.btn_stop = Button(self.master, text="Stop uC", command=partial(self.send_command, 4)) self.btn_stop.grid(column=4, row=8, rowspan=2, padx=5, sticky=W + E) self.btn_graph = Button(self.master, text="Open graph\nStore data", command=self.open_graph) self.btn_graph.grid(column=4, row=22, rowspan=2, padx=5, sticky=W + E) # Listbox to show data transfert self.text = Text(self.master, width=40) self.text.grid(column=5, row=0, rowspan=25, pady=10, sticky=N + S) self.scrlbar = Scrollbar(self.master) self.scrlbar.grid(column=6, row=0, rowspan=25, pady=10, padx=5, sticky=N + S) self.text.configure(yscrollcommand=self.scrlbar.set) self.scrlbar.configure(command=self.text.yview) self.text.insert( END, "List of command sent and received\n-------------------------") self.text.configure(state="disable") def openfile(self): file_path = filedialog.askopenfilename() if len(file_path) != 0: ff = open(file_path, 'r') for reg in self.regs: reg.delete(0, END) reg.insert(END, str(ff.readline())[:-1]) ff.close() def savefile(self): if (sum(self.flag_data) == 0): file_path = filedialog.asksaveasfilename() if len(file_path) != 0: ff = open(file_path, 'w') for reg in self.regs: ff.write(str(reg.get()) + "\n") ff.close() else: messagebox.showinfo( "Warning", "Every register value must be in the right format!") def exit_prog(self): if (self.toplevel_flag): self.close_graph() while (self.toplevel_flag): time.sleep(0.1) if (self.stream_flag): self.destroy_flag = True # avoid problem while trying to change btn_stream's name self.send_command(3) while (self.stream_flag): time.sleep(0.1) self.run_flag = False # stop the timer while (self.end_flag == False): time.sleep(0.1) self.sock.close() self.master.destroy() print("main destroy", file=sys.stderr) def help_callback(self): print("help_callback") def is_number(self, s): try: numb = int(s) if (numb >= 0): return True else: return False except ValueError: return False def entry_callback(self, count, var, *args): s = var.get() if (self.is_number(s) and (len(s) != 0)): if ((int(s) < 4096) and (int(s) >= 0)): self.regs[count].configure(fg="black") self.flag_data[count] = 0 else: self.regs[count].configure(fg="red") self.flag_data[count] = 1 else: self.regs[count].configure(fg="red") self.flag_data[count] = 1 if (sum(self.flag_data) == 0): self.btn_write_all.configure(state="normal") else: self.btn_write_all.configure(state="disable") def write_txt(self, text): self.text.configure(state="normal") self.text.insert(END, ("\n" + text)) self.text.see("end") self.text.configure(state="disable") def init_UDP_connection(self): self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.bind(('', self.UDP_PORT)) self.sock.settimeout(0.1) def send_command(self, cmd): payload = bytearray() payload.append(int("0x55", 0)) payload.append(int("0xAA", 0)) payload.append(cmd) payload.append(random.randrange(0, 255)) if (self.cmd[cmd] == 'write_all_reg'): for reg in self.regs: numb = int(reg.get()) payload.append(int(numb / 256)) payload.append(int(numb % 256)) payload.append(int("0x33", 0)) payload.append(int("0xCC", 0)) self.write_txt("Tx: " + self.cmd[cmd] + " rand=" + str(payload[3])) self.sock.sendto(payload, (self.UDP_IP, self.UDP_PORT)) def open_graph(self): if (self.toplevel_flag == False): self.toplevel = Toplevel(self.master) self.window_data = receive.Watchman_data(self.toplevel) self.toplevel_flag = True self.toplevel.protocol("WM_DELETE_WINDOW", self.close_graph) def close_graph(self): self.window_data.exit_prog() self.toplevel_flag = False def timer_int(self): while self.run_flag: try: data = bytearray() data, adress = self.sock.recvfrom(200) if (adress[0] == self.UDP_IP): if ((data[0] == int("0x55", 0)) and (data[1] == int("0xAA", 0))): if (self.cmd[data[2]] == 'start_stop_stream'): if (self.stream_flag): if (self.destroy_flag == False): self.btn_stream.configure( text="Start stream") if (self.toplevel_flag): self.write_txt( "total of frame received =" + str(self.window_data.count)) self.write_txt( "LostCnt:" + str(self.window_data.lostcnt)) self.stream_flag = False else: if (self.destroy_flag == False): self.btn_stream.configure( text="Stop stream") if (self.toplevel_flag): self.window_data.count = 0 self.window_data.lostcnt = 0 self.stream_flag = True if (self.cmd[data[2]] == 'stop_uC'): self.btn_stream.configure(text="Start stream") self.stream_flag = False if (self.cmd[data[2]] == 'read_all_reg'): offset = 100 else: offset = 0 if ((data[4 + offset] == int("0x33", 0)) and (data[5 + offset] == int("0xCC", 0))): if (self.destroy_flag == False): self.write_txt("Rx: " + self.cmd[data[2]] + " rand=" + str(data[3])) if (offset != 0): count = 4 for reg in self.regs: reg.delete(0, END) reg.insert( END, str(data[count] * 256 + data[count + 1])) count += 2 else: if (self.destroy_flag == False): self.write_txt("Rx: ERROR end of frame") else: if (self.destroy_flag == False): self.write_txt("Rx: ERROR start of frame") else: if (self.destroy_flag == False): self.write_txt("Rx: ERROR ip of frame (" + adress[0] + ")") except socket.timeout: dummy = 0 # dummy execution just to use try without trouble except socket.error: dummy = 0 #time.sleep(0.5) print("end of main timer", file=sys.stderr) self.end_flag = True
class DeleteVeiculo(Toplevel): '''Classe interface deletar veiculo''' def __init__(self, master=None): '''Inicializa uma nova tela para deletar os veiculos.''' Toplevel.__init__(self, master=master) self.veiculo = Veiculo() self.dao = VeiculoDAO() self.geometry('1350x850+0+0') self.title('Deletar Veiculos') self.resizable(0, 0) self.configure(background='#c9c9ff') self.id = None self.nome_tela = Label(self, text="Deletar Veiculos", bg='#c9c9ff', fg='white', font=('Verdana 40 bold')) self.nome_tela.place(x=500, y=50) # BOTOES ================================================================= self.botao_deletar = Button(self, text="Deletar veiculo do banco de dados", width=43, height=1, bg='#baffc9', fg='black', font=('Verdana 15 bold'), command=self.delete) self.botao_deletar.place(x=40, y=600) self.botao_sair = Button(self, text="Sair", width=43, height=1, bg='#ffb3ba', fg='black', font=('Verdana 15 bold'), command=self.close) self.botao_sair.place(x=690, y=600) self.listbox_veiculos = Listbox(self, width=90, height=10, font=('Verdana 15 bold')) self.listbox_veiculos.place(x=40, y=300) # SCROLLBAR ========================================================= self.scrollbar_veiculo = Scrollbar(self, ) self.listbox_veiculos.configure( yscrollcommand=self.scrollbar_veiculo.set) self.scrollbar_veiculo.configure(command=self.listbox_veiculos.yview) self.scrollbar_veiculo.place(x=1340, y=120, relheight=0.62, anchor='ne') # AREA PESQUISAR ======================================================= self.pesquisar_veiculo = Label(self, text="Pesquisar pela marca:", bg='#c9c9ff', font=('Verdana 15 bold')) self.pesquisar_veiculo.place(x=40, y=200) self.search_var = StringVar() self.search_var.trace("w", lambda name, index, mode: self.view_command()) self.search_entry = Entry(self, textvariable=self.search_var, width=20, font=('Verdana 15 bold')) self.search_entry.place(x=300, y=200) # self.botao_pesquisar = Button(self, text="Pesquisar", width= 20, height=1, bg='#ffdfba', fg='black', font=( # 'Verdana 15 bold'), command=self.close) # self.botao_pesquisar.place(x=620, y=190) self.view_command() self.listbox_veiculos.bind('<<ListboxSelect>>', self.selecionar_list_box) def view_command(self): "método para visualização dos resultados" try: rows = self.dao.view() self.listbox_veiculos.delete(0, END) for r in rows: if str(self.search_var.get()).lower() in str(r).lower(): self.listbox_veiculos.insert(END, r) except Exception as e: print(e) def selecionar_list_box(self, event): if self.listbox_veiculos.curselection(): indice = self.listbox_veiculos.curselection()[0] self.selecionado = self.listbox_veiculos.get(indice) self.id = self.selecionado[0] def delete(self): '''Função para deletar o veiculo do banco de dados''' try: self.dao.delete(self.id) except Exception: tkinter.messagebox.showinfo('Aviso!', 'Erro ao acessar o banco de dados.') else: tkinter.messagebox.showinfo('Aviso!', 'veiculo Excluido com Sucesso!') #self.clear_all() self.view_command() def close(self): '''Função para fechar a tela, fecha a conexão com o banco de dados e destroi a janela atual.''' self.dao.close() self.destroy() def run(self): '''Função para chamar a tela.''' self.mainloop()