def __init__(self, parent): Frame.__init__(self, parent) BaseClass.__init__(self) self.parent = parent self['bg'] = 'white smoke' Grid.rowconfigure(self, 0, weight=1) Grid.columnconfigure(self, 0, weight=1) Grid.columnconfigure(self, 1, weight=1) Grid.columnconfigure(self, 2, weight=1) self._button_switcher = CustomButton(self, view='border_green', text='Show Available', font=(self.default_font, 14, 'normal', 'bold'), height=1, width=14) self._button_switcher.grid(column=0, row=0) self._label_search = CustomLabel(self, text='Search: ', bg='white smoke', font=('Halvetica', 12, 'normal', 'normal')) self._label_search.grid(column=1, row=0, sticky=E) self._entry_search = CustomEntry(self, text='Text', width=50) self._entry_search.grid(column=2, row=0, padx=(0, 40), sticky=W) self._entry_search.bind('<Key>', self._on_entry_search_key) self.get_root().bind('<Button-1>', self._remove_focus)
def __init__(self, parent, **kw): BaseClass.__init__(self) Toplevel.__init__(self, parent) self.parent = parent self['bg'] = 'white' self.geometry('500x350') for i in range(0, 4): Grid.columnconfigure(self, i, weight=1) Grid.rowconfigure(self, i, weight=1) self._bottom_padding = 20 self._button_exit = CustomButton(self, view='normal_red', text='Cancel', command=self._on_button_exit_click) self._button_exit.grid(row=4, column=0, pady=(0, self._bottom_padding)) self._button_apply = CustomButton(self, view='normal_green', text='Apply', command=self._on_button_apply_click) self._button_apply.grid(row=4, column=2, pady=(0, self._bottom_padding)) self._button_change_picture = CustomButton( self, view='normal_blue', text='Change Picture', command=self._on_button_change_picture_click) self._button_change_picture.grid(row=1, column=1, sticky=N) self._picture = CustomPicture(self, picture=self._get_placeholder(), size=150) self._picture.grid(column=1, row=0, pady=(20, 0)) self._entry_name = CustomEntry(self, width=25) self._entry_name.grid(row=2, column=1, columnspan=2, sticky=W + E) self._label_name = CustomLabel(self, text='Product Name: ') self._label_name.grid(row=2, column=0, sticky=W + E)
def __init__(self, parent, **kw): Frame.__init__(self, parent) BaseClass.__init__(self) self.parent = parent if kw['width']: self._width = kw['width'] self._search_var = StringVar() self._search_var.trace('w', lambda name, index, mode: self._update_list()) self._entry = CustomEntry(self, textvariable=self._search_var, width=self._width) self._entry.pack() self._entry.bind('<FocusIn>', self._entry_focus_in) self._entry.bind('<FocusOut>', self._focus_out) self._entry.bind('<Button-1>', self._focus_in) self.get_root().bind('<Button-1>', self._focus_out)
class ProductDialogNew(Toplevel, BaseClass): def __init__(self, parent, **kw): BaseClass.__init__(self) Toplevel.__init__(self, parent) self.parent = parent self['bg'] = 'white' self.geometry('500x350') for i in range(0, 4): Grid.columnconfigure(self, i, weight=1) Grid.rowconfigure(self, i, weight=1) self._bottom_padding = 20 self._button_exit = CustomButton(self, view='normal_red', text='Cancel', command=self._on_button_exit_click) self._button_exit.grid(row=4, column=0, pady=(0, self._bottom_padding)) self._button_apply = CustomButton(self, view='normal_green', text='Apply', command=self._on_button_apply_click) self._button_apply.grid(row=4, column=2, pady=(0, self._bottom_padding)) self._button_change_picture = CustomButton( self, view='normal_blue', text='Change Picture', command=self._on_button_change_picture_click) self._button_change_picture.grid(row=1, column=1, sticky=N) self._picture = CustomPicture(self, picture=self._get_placeholder(), size=150) self._picture.grid(column=1, row=0, pady=(20, 0)) self._entry_name = CustomEntry(self, width=25) self._entry_name.grid(row=2, column=1, columnspan=2, sticky=W + E) self._label_name = CustomLabel(self, text='Product Name: ') self._label_name.grid(row=2, column=0, sticky=W + E) def _on_button_change_picture_click(self): picture_path = filedialog.askopenfilename() the_file = open(picture_path, 'rb') self._new_picture = the_file.read() the_file.close() self._picture.set_picture(self._new_picture) def _get_placeholder(self): self.database.query( 'select `blob` from meta where text = "placeholder"') return self.database.fetch_one()[0] def _on_button_exit_click(self): self.destroy() def _on_button_apply_click(self): if self._entry_name.get() == "" or not hasattr(self, '_new_picture'): return self.database.query( 'insert into products (name, picture) values (?, ?)', [self._entry_name.get(), self._new_picture]) data = dict() data['name'] = self._entry_name.get() data['picture'] = self._new_picture self.event_dispatcher.dispatch_event( NewProductEvent(NewProductEvent.ASK, data)) self.destroy()
class InputDropdown(Frame, BaseClass): def __init__(self, parent, **kw): Frame.__init__(self, parent) BaseClass.__init__(self) self.parent = parent if kw['width']: self._width = kw['width'] self._search_var = StringVar() self._search_var.trace('w', lambda name, index, mode: self._update_list()) self._entry = CustomEntry(self, textvariable=self._search_var, width=self._width) self._entry.pack() self._entry.bind('<FocusIn>', self._entry_focus_in) self._entry.bind('<FocusOut>', self._focus_out) self._entry.bind('<Button-1>', self._focus_in) self.get_root().bind('<Button-1>', self._focus_out) def _update_list(self): search_term = self._search_var.get() listbox_data = ['Apple', 'Cake', 'Egg'] self._listbox.delete(0, END) for item in listbox_data: if search_term.lower() in item.lower(): self._listbox.insert(END, item) def _entry_focus_in(self, event): if getattr(self, '_listbox', False): return self._listbox = Listbox(self.get_root(), width=self._width, font=(self.default_font, 12)) self._listbox.bind('<<ListboxSelect>>', self._listbox_select) self._listbox.place(x=self.winfo_x() + 1, y=self.winfo_y() + 25) self._update_list() def _entry_focus_out(self, event): print('Focus out') if getattr(self, '_listbox', False) and (event.widget == self._entry or event.widget == self._listbox): return if getattr(self, '_listbox', False): self._destroy_list() self._entry_remove_focus() def _destroy_list(self): self._listbox.destroy() self._listbox = None def _entry_remove_focus(self): self.get_root().focus() def _listbox_select(self, event): widget = event.widget selection = widget.curselection() value = widget.get(selection[0]) self._destroy_list()
class RecipeDialogNew(Toplevel, BaseClass): def __init__(self, parent, **kw): BaseClass.__init__(self) Toplevel.__init__(self, parent) self.parent = parent self['bg'] = 'white' self.geometry('480x650') self._vertical_padding = 20 self._horizontal_padding = 20 for i in range(0, 8): Grid.columnconfigure(self, i, weight=1) Grid.rowconfigure(self, i, weight=1) self._label_name = CustomLabel(self, text="Name: ") self._label_name.grid(row=0, column=1, sticky=S + W) self._entry_name = CustomEntry(self, width=35) self._entry_name.grid(row=1, column=1, sticky=N) self._label_ingredients = CustomLabel(self, text='Ingredients:') self._label_ingredients.grid(row=2, column=1, sticky=S + W) self._frame_ingredients = Frame(self) self._frame_ingredients.grid(row=3, column=1, sticky=N + E + W + S) self._scrollbar_ingredients = Scrollbar(self._frame_ingredients, orient=VERTICAL) self._listbox_ingredients = Listbox( self._frame_ingredients, selectmode=EXTENDED, yscrollcommand=self._scrollbar_ingredients.set) self._scrollbar_ingredients.config( command=self._listbox_ingredients.yview) self._listbox_ingredients.pack(side=LEFT, fill=BOTH, expand=1) self._scrollbar_ingredients.pack(side=RIGHT, fill=BOTH) for item in self._get_all_ingredients(): self._listbox_ingredients.insert(END, item[0]) self._label_description = CustomLabel(self, text='Description:') self._label_description.grid(row=4, column=1, sticky=S + W) self._entry_description = Text(self, height=10, width=50) self._entry_description.grid(row=5, column=1, sticky=N) self._picture = CustomPicture(self, picture=self._get_placeholder(), size=100) self._picture.grid(row=6, column=1) self._button_picture = CustomButton(self, view='normal_blue', text='Change Picture') self._button_picture.grid(row=7, column=1, sticky=N) self._button_picture.bind('<Button-1>', self._on_button_picture_click) self._button_exit = CustomButton(self, view='normal_red', text='Cancel') self._button_exit.grid(row=8, column=0, sticky=N + E + W + S, pady=(0, self._vertical_padding), padx=(self._horizontal_padding, 0)) self._button_exit.bind('<Button-1>', self._on_button_exit_click) self._button_apply = CustomButton(self, view='normal_green', text='Apply') self._button_apply.grid(row=8, column=2, sticky=N + E + W + S, pady=(0, self._vertical_padding), padx=(0, self._horizontal_padding)) self._button_apply.bind('<Button-1>', self._on_button_apply_click) def _on_button_apply_click(self, event): if self._entry_description.get( 1.0, END) == '' or not hasattr(self, '_new_picture'): return ingredients_indexes = self._listbox_ingredients.curselection() ingredients_string = '' for i in ingredients_indexes: ingredients_string += '|' + self._listbox_ingredients.get(i) + '|' self.database.query( 'insert into recipes (name, description, picture, ingredients) values (?, ?, ?, ?)', [ self._entry_name.get(), self._entry_description.get(1.0, END), self._new_picture, ingredients_string ]) data = dict() data['name'] = self._entry_name.get() data['description'] = self._entry_description.get(1.0, END) data['picture'] = self._new_picture data['ingredients'] = ingredients_string self.event_dispatcher.dispatch_event( NewRecipeEvent(NewRecipeEvent.ASK, data)) self.destroy() def _on_button_exit_click(self, event): self.destroy() def _get_placeholder(self): self.database.query( 'select `blob` from meta where text = "placeholder"') return self.database.fetch_one()[0] def _get_all_ingredients(self): self.database.query('select `name` from products') self._ingredients = self.database.fetch_all() return self._ingredients def _on_button_picture_click(self, event): picture_path = filedialog.askopenfilename() the_file = open(picture_path, 'rb') self._new_picture = the_file.read() the_file.close() self._picture.set_picture(self._new_picture)
def __init__(self, parent, **kw): BaseClass.__init__(self) Toplevel.__init__(self, parent) self.parent = parent self['bg'] = 'white' self.geometry('480x650') self._vertical_padding = 20 self._horizontal_padding = 20 for i in range(0, 8): Grid.columnconfigure(self, i, weight=1) Grid.rowconfigure(self, i, weight=1) self._label_name = CustomLabel(self, text="Name: ") self._label_name.grid(row=0, column=1, sticky=S + W) self._entry_name = CustomEntry(self, width=35) self._entry_name.grid(row=1, column=1, sticky=N) self._label_ingredients = CustomLabel(self, text='Ingredients:') self._label_ingredients.grid(row=2, column=1, sticky=S + W) self._frame_ingredients = Frame(self) self._frame_ingredients.grid(row=3, column=1, sticky=N + E + W + S) self._scrollbar_ingredients = Scrollbar(self._frame_ingredients, orient=VERTICAL) self._listbox_ingredients = Listbox( self._frame_ingredients, selectmode=EXTENDED, yscrollcommand=self._scrollbar_ingredients.set) self._scrollbar_ingredients.config( command=self._listbox_ingredients.yview) self._listbox_ingredients.pack(side=LEFT, fill=BOTH, expand=1) self._scrollbar_ingredients.pack(side=RIGHT, fill=BOTH) for item in self._get_all_ingredients(): self._listbox_ingredients.insert(END, item[0]) self._label_description = CustomLabel(self, text='Description:') self._label_description.grid(row=4, column=1, sticky=S + W) self._entry_description = Text(self, height=10, width=50) self._entry_description.grid(row=5, column=1, sticky=N) self._picture = CustomPicture(self, picture=self._get_placeholder(), size=100) self._picture.grid(row=6, column=1) self._button_picture = CustomButton(self, view='normal_blue', text='Change Picture') self._button_picture.grid(row=7, column=1, sticky=N) self._button_picture.bind('<Button-1>', self._on_button_picture_click) self._button_exit = CustomButton(self, view='normal_red', text='Cancel') self._button_exit.grid(row=8, column=0, sticky=N + E + W + S, pady=(0, self._vertical_padding), padx=(self._horizontal_padding, 0)) self._button_exit.bind('<Button-1>', self._on_button_exit_click) self._button_apply = CustomButton(self, view='normal_green', text='Apply') self._button_apply.grid(row=8, column=2, sticky=N + E + W + S, pady=(0, self._vertical_padding), padx=(0, self._horizontal_padding)) self._button_apply.bind('<Button-1>', self._on_button_apply_click)