Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
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()
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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()
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
	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)
Exemplo n.º 10
0
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()
Exemplo n.º 11
0
# 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",
Exemplo n.º 12
0
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()
Exemplo n.º 13
0
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()
Exemplo n.º 14
0
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)
Exemplo n.º 15
0
# 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',
Exemplo n.º 16
0
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)
Exemplo n.º 17
0
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()
Exemplo n.º 18
0
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)
Exemplo n.º 19
0
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()
Exemplo n.º 20
0
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)
Exemplo n.º 21
0
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)
Exemplo n.º 22
0
# 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",
Exemplo n.º 23
0
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()
Exemplo n.º 24
0
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()
Exemplo n.º 26
0
    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)
Exemplo n.º 27
0
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()
Exemplo n.º 28
0
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')
Exemplo n.º 29
0
    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)
Exemplo n.º 30
0
               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)
Exemplo n.º 31
0
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)
Exemplo n.º 32
0
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()
Exemplo n.º 33
0
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
Exemplo n.º 34
0
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()