def __init__(self, container, height=800, width=1000, *args, **kwargs): self.logger = Logger(self, level=Logger.INFO) self.logger.debug("enter constructor") self.canvas = tk.Canvas(container, height=height, width=width) self.canvas.grid(row=0, column=0, sticky='news') self.scrollbar = tk.Scrollbar(container, orient="vertical", command=self.canvas.yview) self.scrollbar.grid(row=0, column=1, sticky='nsw') self.canvas.configure(yscrollcommand=self.scrollbar.set) self.canvas.configure(yscrollincrement='20') self.canvas.configure(scrollregion=self.canvas.bbox("all")) self.scrollwindow = tk.Frame(self.canvas) self.canvas.create_window((0, 0), window=self.scrollwindow, anchor="nw") self.scrollwindow.bind("<Configure>", self.configure_window) self.scrollwindow.bind("<Enter>", self.enter_handler) self.scrollwindow.bind("<Leave>", self.leave_handler) self.scrollwindow.bind('<Button-4>', self.mouse_wheel) self.scrollwindow.bind('<Button-5>', self.mouse_wheel) self.canvas.focus_set() self.logger.debug("leave constructor")
def __init__(self, notebook): self.logger = Logger(self, Logger.DEBUG) self.logger.debug(sys._getframe().f_code.co_name) super().__init__(notebook, notebook.HOME_FRAME, 'Business') self.add_title('Home Form') self.add_entry('Name', 'name', str) self.add_entry('Address1', 'address1', str) self.add_entry('Address2', 'address2', str) self.add_entry('City', 'city', str, inc_row=False, span=1, width=20) self.add_entry('State', 'state', str, width=20, span=1) self.add_entry('Zip Code', 'zip', str, width=20, span=1, inc_row=False) self.add_entry('Country', 'country', str, width=20, span=1) self.add_entry('Email', 'email_address', str, width=20, span=1, inc_row=False) self.add_entry('Phone', 'phone_number', str, width=20, span=1) self.add_entry('Web Site', 'web_site', str) self.add_entry('Description', 'description', str) self.add_text('Terms', 'terms') self.add_text('Returns', 'returns') self.add_text('Warranty', 'warranty') self.add_button('Save')
def __init__(self, parent):# , title = None): #init the logger self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug("Base Dialog start constructor") tk.Toplevel.__init__(self, parent) self.transient(parent) self.parent = parent self.result = None # get a copy of the data_store for the children body = tk.Frame(self) self.initial_focus = self.body(body) body.grid(padx=5, pady=5) self.buttonbox() self.grab_set() if not self.initial_focus: self.initial_focus = self self.protocol("WM_DELETE_WINDOW", self.cancel) self.initial_focus.focus_set() #self.wait_window(self) self.logger.debug("Base Dialog leave constructor")
def __init__(self, master, table, column, *args, **kargs): ''' master = the frame to bind this frame to name = the text of the label table = the name of the database table that is associated with this widget column = the name of the database column this widget associates with ''' self.logger = Logger(self, level=Logger.INFO) self.logger.debug("ComboBox enter constructor") super().__init__(master, *args, **kargs) self.table = table self.column = column self.data = Database.get_instance() self.content = ttk.Combobox(self, state='readonly') self.content.grid(row=0, column=1, padx=5, pady=5, sticky=tk.W) self.row = { 'table': self.table, 'column': self.column, 'self': self, 'hasid': None } self.logger.debug("ComboBox leave constructor")
def __init__(self, notebook): self.logger = Logger(self, Logger.DEBUG) self.logger.debug(sys._getframe().f_code.co_name) super().__init__(notebook, notebook.PURCHASE_FRAME, 'PurchaseRecord') self.add_title('Purchase Setup Form') self.add_indirect_label('Vendor', 'vendor_ID', 'Vendor', 'name') self.add_dynamic_label('Gross', 'gross', width=20) self.add_dynamic_label('Tax', 'tax', width=20) self.add_dynamic_label('Shipping', 'shipping', width=20) self.add_combo('Purchase Type', 'PurchaseType', 'type_ID', inc_row=False, width=20) self.add_combo('Purchase Status', 'PurchaseStatus', 'status_ID', width=20) self.add_text('Notes', 'notes', height=10) self.add_button('Prev') self.add_button('Next') self.add_button('Save') self.add_button('Delete') self.add_commit_btn()
def __init__(self, master, table, column, *args, **kargs): ''' master = the frame to bind this frame to name = the text of the label table = the name of the database table that is associated with this widget column = the name of the column this widget associates with ''' self.logger = Logger(self, level=Logger.INFO) self.logger.debug("LabelBox enter constructor") super().__init__(master, *args, **kargs) self.table = table self.column = column self.content = tk.StringVar(master) self.entry = tk.Label(self, textvariable=self.content) self.entry.grid(row=0, column=1, padx=5, pady=5, sticky=tk.W) self.row = { 'table': self.table, 'column': self.column, 'self': self, 'hasid': None } self.logger.debug("LabelBox leave constructor")
def __init__(self, master, form=None, *args, **kargs): ''' master = The frame to bind the widgets to. name_id = The id of the line containing the customer to associate form = Name of the form to bind the events to. ''' self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug("Line Widget enter constructor") super().__init__(master, bd=1, relief=tk.RIDGE, *args, **kargs) #self.name_id = int(name_id) self.form = form self.events = EventHandler.get_instance() self.data = Database.get_instance() self.line_list = [] self.crnt_index = 0 self.events.register_event('next_button', self.clear) self.events.register_event('prev_button', self.clear) # add button tk.Button(self, text="Add", command=self.add).grid(row=0, column=0) # reset button tk.Button(self, text="Reset", command=self.clear).grid(row=0, column=1) # add one line widget self.add() # self.row = {'table': None, 'column':None, 'self':self, 'hasid':None} self.logger.debug("Line Widget leave constructor")
def __init__(self, master, form, line, *args, **kargs): ''' master = The frame to bind the widgets to. form = Name of the form to bind the events to. line = The line number of the line, displayed as a label ''' self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug("Line Widget enter constructor") self.data = Database.get_instance() super().__init__(master, *args, **kargs) self.form = form self.events = EventHandler.get_instance() #self.data = Database.get_instance() self.values = self.data.populate_list('InventoryItem', 'name') self.values.insert(0, '') # first line is blank tk.Label(self, text='%d' % (int(line))).grid(row=0, column=0) self.quan = tk.Spinbox(self, from_=1, to=99, width=2) self.quan.grid(row=0, column=1, padx=5, pady=5) self.prod = ttk.Combobox(self, values=self.values, width=40) self.prod.grid(row=0, column=2) self.logger.debug("Line Widget leave constructor")
def __init__(self, container, height=300, width=500, scrolling=False, *args, **kwargs): self.logger = Logger(self, level=Logger.INFO) self.logger.debug("enter constructor") super().__init__(container, *args, **kwargs) self.canvas = tk.Canvas(self, height=height, width=width) self.scrollwindow = tk.Frame(self.canvas) self.canvas.create_window((0, 0), window=self.scrollwindow, anchor="nw") self.canvas.pack(side="left", fill="both", expand=True) if scrolling: scrollbar = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview) self.canvas.configure(yscrollcommand=scrollbar.set) self.canvas.configure(yscrollincrement='20') scrollbar.pack(side="right", fill="y") self.scrollwindow.bind("<Configure>", self.configure_window) self.scrollwindow.bind("<Enter>", self.enter_handler) self.scrollwindow.bind("<Leave>", self.leave_handler) self.scrollwindow.bind('<Button-4>', self.mouse_wheel) self.scrollwindow.bind('<Button-5>', self.mouse_wheel) self.canvas.focus_set() self.logger.debug("leave constructor")
def __init__(self, master, height=700, width=1000, **kwargs): super().__init__(master, **kwargs) self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug("enter constructor") self.master = master self.width = width self.height = height self.btn_frame = tk.LabelFrame(self.master, height=height, width=20, bd=1) self.wid_frame = tk.LabelFrame(self.master, height=height, width=width, bd=1) self.wid_frame.grid(row=1, column=0) self.btn_frame.grid(row=0, column=0, sticky=tk.W) self.frame_list = [] self.frame_index = 0 self.logger.debug("leave constructor")
def __init__(self, notebook): self.logger = Logger(self, Logger.DEBUG) self.logger.debug(sys._getframe().f_code.co_name) super().__init__(notebook, notebook.IMPORT_FRAME, 'RawImport') self.add_title('Import Setup Form') self.add_dir_browser() self.add_import_btn()
def __init__(self, parent, lineno): self.logger = Logger(self, Logger.INFO) self.logger.debug("constructor") tkinter.Frame.__init__(self, parent) self.data_store = DataStore.get_instance() self.index = lineno self.name = "Hole %d" % (lineno + 1) self.line_name = tkinter.Label(self, text=self.name, width=12) self.line_name.grid(row=lineno + 1, column=0, sticky=tkinter.W) self.inter_ctl = tkinter.Entry(self, width=5, validate="focusout", validatecommand=self.change_interval) self.inter_ctl.bind('<Return>', self.change_interval) self.inter_ctl.bind('<Tab>', self.change_interval) self.inter_ctl.grid(row=lineno + 1, column=1) self.note_ctl_txt = tkinter.StringVar() self.note_ctl = tkinter.Label(self, textvariable=self.note_ctl_txt, width=12) self.note_ctl.grid(row=lineno + 1, column=2) self.freq_ctl_txt = tkinter.StringVar() self.freq_ctl = tkinter.Label(self, textvariable=self.freq_ctl_txt, width=12) self.freq_ctl.grid(row=lineno + 1, column=3) self.hole_ctl = HoleSizeWidgit(self, lineno) self.hole_ctl.config(padx=25) self.hole_ctl.grid(row=lineno + 1, column=4) self.locat_ctl_txt = tkinter.StringVar() self.locat_ctl = tkinter.Label(self, textvariable=self.locat_ctl_txt, width=12) self.locat_ctl.grid(row=lineno + 1, column=5) self.diff_ctl_txt = tkinter.StringVar() self.diff_ctl = tkinter.Label(self, textvariable=self.diff_ctl_txt, width=12) self.diff_ctl.grid(row=lineno + 1, column=6) self.cutoff_ctl_txt = tkinter.StringVar() self.cutoff_ctl = tkinter.Label(self, textvariable=self.cutoff_ctl_txt, width=12) self.cutoff_ctl.grid(row=lineno + 1, column=7) self.set_state() self.logger.debug("end constructor")
def __init__(self): self.logger = Logger(self, Logger.DEBUG) self.logger.debug(sys._getframe().f_code.co_name) self.master = tk.Tk() self.master.geometry('1000x800') #self.master.resizable(0, 0) self.master.wm_title("Accounting") MainNotebook(self.master)
def __init__(self, master, form, disable_select=False, disable_new=False, *args, **kargs): ''' master = The frame to bind the widgets to. form = Name of the form to bind the events to. ''' self.logger = Logger(self, level=Logger.INFO) self.logger.debug("NotesBox enter constructor") super().__init__(master, *args, **kargs) row = 0 col = 0 self.form = form self.events = EventHandler.get_instance() tk.Button(self, text='Prev', command=self.prev_btn).grid(row=row, column=col, padx=5, pady=5) col += 1 tk.Button(self, text='Next', command=self.next_btn).grid(row=row, column=col, padx=5, pady=5) if not disable_select: col += 1 tk.Button(self, text='Select', command=self.select_btn).grid(row=row, column=col, padx=5, pady=5) if not disable_new: col += 1 tk.Button(self, text='New', command=self.new_btn).grid(row=row, column=col, padx=5, pady=5) col += 1 tk.Button(self, text='Save', command=self.save_btn).grid(row=row, column=col, padx=5, pady=5) col += 1 tk.Button(self, text='Delete', command=self.delete_btn).grid(row=row, column=col, padx=5, pady=5)
def __init__(self, master, names=None, height=700, width=1000): self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug("enter constructor") super().__init__(master, height=height, width=width) self.names = names if not names is None: for name in self.names: self.add_tab(name) self.form_class = []
def __init__(self, master=None): self.logger = Logger(self, Logger.INFO) self.logger.debug(sys._getframe().f_code.co_name) tkinter.Frame.__init__(self, master) self.master = master self.master.protocol("WM_DELETE_WINDOW", self.close_window) self.general_params = tkinter.LabelFrame(self.master, text="General Parameters") self.general_params.pack() self.output_params = tkinter.LabelFrame(self.master, text="Output Parameters") self.output_params.pack(fill="both", expand="yes") # set up some default values #self.current_file_name = os.path.join(os.getcwd(), "untitled.wis") self.data = DataStore.get_instance() self.logger.debug("data store: %s"%(str(self.data))) self.calc = Calculator() self.upper_frame = UpperFrame(self.general_params) self.lower_frame = LowerFrame(self.output_params) menu = tkinter.Menu(self.master, tearoff=0) self.master.config(menu=menu) #self.master.geometry("750x450") fileMenu = tkinter.Menu(menu, tearoff=0) fileMenu.add_command(label="Load", command=self.loadCommand) fileMenu.add_command(label="Save", command=self.saveCommand) fileMenu.add_command(label="Save As", command=self.saveasCommand) fileMenu.add_command(label="Export", command=self.exportCommand) fileMenu.add_separator() fileMenu.add_command(label="Quit", command=self.close_window) menu.add_cascade(label="File", menu=fileMenu) settingsMenu = tkinter.Menu(menu, tearoff=0) settingsMenu.add_command(label="Constants", command=self.constCommand) settingsMenu.add_command(label="Embouchure", command=self.emboCommand) settingsMenu.add_command(label="Notes", command=self.notesCommand) menu.add_cascade(label="Settings", menu=settingsMenu) editMenu = tkinter.Menu(menu, tearoff=0) editMenu.add_command(label="Help", command=self.helpCommand) editMenu.add_command(label="About", command=self.aboutCommand) editMenu.add_command(label="Dump", command=self.dumpInternalData) menu.add_cascade(label="Help", menu=editMenu) tkinter.Label(self.master, text="Tilbury Woodwinds Whistle Calculator", font=("Helvetica", 14)).pack() self.upper_frame.create_frame() self.lower_frame.update_frame()
def Configure(self, argv): self.args = argv self.messagePrinter = Logger() self.scriptPath, self.scriptExtension = os.path.splitext(argv[0]) self.scriptPath, self.scriptName = os.path.split(self.scriptPath) self.argparser.parse_args(args=argv[1:], namespace=self) self.messagePrinter.isDbgEnabled = self.debugMessages self.messagePrinter.isInfoEnabled = self.verbose self.messagePrinter.isErrEnabled = not self.silenceErrors if self.scriptIni is None: iniPath = '' if self.scriptPath is not None: iniPath = self.scriptPath self.scriptIni = toPosixPath(os.path.join(iniPath, '{0}.ini'.format(self.scriptName))) self.parser = configparser.ConfigParser(allow_no_value = True) # see https://docs.python.org/2/library/configparser.html self.parser.optionxform = str # make case-sensitive as per https://docs.python.org/2/library/configparser.html self.isConfigured = True if os.path.exists(self.scriptIni): self.parser.read(self.scriptIni) elif os.path.exists(os.path.join(self.scriptPath, self.scriptIni)): self.parser.read(os.path.join(self.scriptPath, self.scriptIni)) else: msg = "No configuration file found. Searched, current directory and script directory directory for {0}.".format(self.scriptIni) self.messagePrinter.error(msg) self.isConfigured = False self.databaseFilename = ':memory:' self.sourcePath = './' return try: if self.databaseFilename is None: self.databaseFilename = self.parser.get("Output", "DatabaseFilename") except: self.databaseFilename = ':memory:' try: if self.sourcePath is None: self.sourcePath = self.parser.get("Paths","SourceRoot") # Make the read SourceRoot path relative to the INI file's path. if self.isConfigured: iniPath, iniFilename = os.path.split(self.scriptIni) self.sourcePath = toPosixPath(os.path.normpath(os.path.join(iniPath, self.sourcePath))) print('source-path: {0}'.format(self.sourcePath)) except: self.sourcePath = './'
def __init__(self, master, table, column, height=20, width=60, *args, **kargs): ''' master = the frame to bind this frame to name = the text of the label table = the name of the database table that is associated with this widget column = the name of the column this widget associates with lw = label width cw = control width ch = control height ''' self.logger = Logger(self, level=Logger.INFO) self.logger.debug("NotesBox enter constructor") super().__init__(master, *args, **kargs) self.column = column self.table = table frame2 = tk.Frame(self, bd=1, relief=tk.RIDGE) frame2.grid(row=0, column=1) self.content = tk.Text(frame2, height=height, width=width, wrap=tk.NONE) self.content.insert(tk.END, '') # see https://www.homeandlearn.uk/tkinter-scrollbars.html self.vsb = tk.Scrollbar(frame2, orient=tk.VERTICAL) self.vsb.config(command=self.content.yview) self.content.config(yscrollcommand=self.vsb.set) self.vsb.pack(side=tk.RIGHT, fill=tk.Y) self.hsb = tk.Scrollbar(frame2, orient=tk.HORIZONTAL) self.hsb.config(command=self.content.xview) self.content.config(xscrollcommand=self.hsb.set) self.hsb.pack(side=tk.BOTTOM, fill=tk.X) self.content.pack(side=tk.LEFT) self.row = { 'table': self.table, 'column': self.column, 'self': self, 'hasid': None } self.logger.debug("NotesBox leave constructor")
def __init__(self, master, table, empty_ok=False): self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug("Setup Dialog start constructor") self.master = master self.table = table self.empty_ok = empty_ok self.data = Database.get_instance() self.events = EventHandler.get_instance() self.id_list = self.get_id_list() self.crnt_index = 0
def __init__(self, notebook): self.logger = Logger(self, Logger.DEBUG) self.logger.debug(sys._getframe().f_code.co_name) super().__init__(notebook, notebook.CUSTOMERS_FRAME, 'Customer') self.add_title('Customers Setup Form') self.add_dynamic_label('Date', 'date_created', width=20) self.add_entry('Name', 'name', str) self.add_entry('Address1', 'address1', str) self.add_entry('Address2', 'address2', str) self.add_entry('City', 'city', str, inc_row=False, span=1, width=20) self.add_entry('State', 'state', str, width=20, span=1) self.add_entry('Zip Code', 'zip', str, width=20, span=1, inc_row=False) self.add_combo('Country', 'Country', 'country_ID', width=20) self.add_entry('Email', 'email_address', str, width=20, span=1, inc_row=False) self.add_combo('Email Status', 'EmailStatus', 'email_status_ID', width=20) self.add_entry('Phone', 'phone_number', str, width=20, span=1, inc_row=False) self.add_combo('Phone Status', 'PhoneStatus', 'phone_status_ID', width=20) self.add_entry('Web Site', 'web_site', str, width=20, inc_row=False) self.add_combo('Class', 'ContactClass', 'class_ID', width=20) self.add_entry('Description', 'description', str) self.add_text('Notes', 'notes', height=10) self.add_button('Prev') self.add_button('Next') self.add_button('Select') self.add_button('New') self.add_button('Save') self.add_button('Delete')
def __init__(self, master, title, uuid, *args, **kargs): self.logger = Logger(self, level=Logger.INFO) self.logger.debug("enter constructor") super().__init__(master, *args, **kargs) self.configure(width=10) self.configure(command=self.btn_cmd) self.configure(text=title) self.last_state = True self.title = title self.uuid = uuid self.events = EventHandler.get_instance() self.logger.debug("leave constructor")
def __init__(self, master): self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug(sys._getframe().f_code.co_name) super().__init__(master, ['Home', 'Sales', 'Purchase', 'Reports', 'Setup']) MainHomeForm(self) MainSalesForm(self) MainPurchaseForm(self) MainReportsForm(self) MainSetupForm(self) self.show_frame(self.HOME_FRAME)
def __init__(self): # constant data self.logger = Logger(self, Logger.INFO) self.logger.debug("enter constructor") #self.configuration = Configuration.get_instance() self.data = DataStore.get_instance() self.logger.debug("end constructor") register_event("CALCULATE_EVENT", self.do_calc) # self.isound = self.data.get_vsound_in() # self.msound = self.data.get_vsound_mm() self.max_loop = 12 self.max_delta = 0.0001
def __init__(self, master, table, thing=None): self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug('SelectItem enter constructor') self.table = table if thing is None: self.thing = 'Item' else: self.thing = thing self.item_id = -1 super().__init__(master) self.wait_window(self) self.logger.debug('SelectItem leave constructor')
def __init__(self, parent): self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug("enter constructor") self.top = tk.Toplevel(parent) self.tx = tk.Text(self.top, height=25, width=80) self.sb = tk.Scrollbar(self.top) self.sb.pack(side=tk.RIGHT,fill=tk.Y) self.tx.pack(side=tk.LEFT) self.sb.config(command=self.tx.yview) self.tx.config(yscrollcommand=self.sb.set) self.tx.insert(tk.END, help_text) self.tx.config(state='disabled') self.logger.debug("leave constructor")
def __init__(self): # gate the accress to __init__() if Database.__instance != None: raise Exception( "Database class is a singleton. Use get_instance() instead.") else: Database.__instance = self # Continue with init exactly once. self.logger = Logger(self, Logger.DEBUG) self.logger.debug("enter constructor") self.data_version = '1.0' self.database_name = 'shop-timer.db' self.open() self.logger.debug("leave constructor")
def __init__(self, master): self.logger = Logger(self, level=Logger.DEBUG) self.logger.debug(sys._getframe().f_code.co_name) super().__init__(master, ['Business', 'Customers', 'Vendors', 'Accounts', 'Inventory', 'Sales', 'Purchase', 'Import']) SetupBusinessForm(self) SetupCustomersForm(self) SetupVendorsForm(self) SetupAccountsForm(self) SetupInventoryForm(self) SetupSalesForm(self) SetupPurchaseForm(self) SetupImportForm(self) self.show_frame(self.BUSINESS_FRAME)
def __init__(self, master): self.logger = Logger(self, Logger.INFO) self.logger.debug("constructor") self.data_store = DataStore.get_instance() self.master = master #self.line_data = [] self.line_widgits = [] register_event('UPDATE_LOWER_FRAME_EVENT', self.update_frame) register_event('UPDATE_LINES_EVENT', self.set_state) register_event('UPDATE_NOTES_EVENT', self.update_notes) register_event('CHANGE_UNITS_EVENT', self.change_units) tkinter.Label(self.master, width=12, text="Hole").grid(row=0, column=0, sticky=tkinter.W) tkinter.Label(self.master, width=5, text="Interval").grid(row=0, column=1, sticky=tkinter.W) tkinter.Label(self.master, width=10, text="Note").grid(row=0, column=2, sticky=tkinter.W) tkinter.Label(self.master, width=10, text="Frequency").grid(row=0, column=3, sticky=tkinter.W) tkinter.Label(self.master, width=18, text="Hole Size").grid(row=0, column=4, sticky=tkinter.W) tkinter.Label(self.master, width=11, text="Hole Location").grid(row=0, column=5, sticky=tkinter.W) tkinter.Label(self.master, width=12, text="Hole Diff").grid(row=0, column=6, sticky=tkinter.W) tkinter.Label(self.master, width=12, text="Cutoff Freq").grid(row=0, column=7, sticky=tkinter.W) # create all of the lines for n in range(12): lw = LineWidgit(self.master, n) self.line_widgits.append(lw) for idx in range(self.data_store.get_number_holes()): self.line_widgits[idx].grid(row=idx + 1, column=0, columnspan=8, sticky=tkinter.W) self.line_widgits[idx].set_state() self.logger.debug("end constructor")
def __init__(self): self.logger = Logger(self, Logger.DEBUG) self.logger.debug(sys._getframe().f_code.co_name) self.master = tk.Tk() self.master.wm_title("Accounting") self.data = Database.get_instance() notebook = NoteBk(self.master, height=700, width=1050) notebook.add_tab('Sales', DummyClass) notebook.add_tab('Purchase', DummyClass) notebook.add_tab('Reports', DummyClass) notebook.add_tab('Setup', SetupNotebook) # activate a frame for initial display notebook.show_frame('Sales')
def __init__(self, master, form, text=None, *args, **kargs): ''' master = The frame to bind the widgets to. form = Name of the form to bind the events to. ''' self.logger = Logger(self, level=Logger.INFO) self.logger.debug("NotesBox enter constructor") super().__init__(master, *args, **kargs) self.form = form self.name = text.lower() self.events = EventHandler.get_instance() tk.Button(self, text=text, command=self.btn_callback).grid(row=1, column=2, padx=5, pady=5) self.logger.debug("NotesBox leave constructor")