class Application(Tkinter.Frame): def __init__(self, master=None): Tkinter.Frame.__init__(self, master) self.grid() self.db = DAL("sqlite://teste.sqlite") ne = IS_NOT_EMPTY() self.table = self.db.define_table("produto", Field("nome", requires=ne), Field("marca", requires=ne), Field("peso", "double", requires=ne), Field("valor", "double", requires=ne), Field("quantidade", "integer", requires=ne), ) self.create_form() self.show_result() def create_form(self): self.form = Tkinter.LabelFrame(self, text="Cadastro", padx="30", pady="15") self.form.pack(side=Tkinter.TOP) self.vars = {} # self.nome_label = Tkinter.Label(self.form, text="nome do produto") # self.nome_label.pack() # self.nome = Tkinter.Entry(self.form) # self.nome.pack() self.SQLTKFORM(self.table) def show_result(self): self.result = Tkinter.LabelFrame(self, text="Results", padx="30", pady="15") self.result.pack(side=Tkinter.BOTTOM) # query db for records records = self.db(self.table).select() if records: self.records = Tkinter.Text(self.result) lines = [",".join(self.table.fields), "_" * 80] for record in records: lines.append(",".join([str(record[field]) for field in self.table.fields])) self.records.insert(1.0, "\n".join(lines)) else: self.records = Tkinter.Label(self.result, text="Nothing found") self.records.pack() def SQLTKFORM(self, table, hidden="id"): fields = table.fields for field in fields: if field not in hidden: self.create_input(field, table[field].label) self.save_button = Tkinter.Button(self.form, text="Salvar", command=self.save_to_db).pack() def save_to_db(self): try: values = [(name, value()) for name, value in self.vars.items()] record = self.table.validate_and_insert(**dict(values)) if record.errors: self.db.rollback() for error, error_message in record.errors.items(): label_text = getattr(self, error + "_label_text") actual_text = label_text.get() if not ":" in actual_text: label_text.set(actual_text + ": " + error_message) getattr(self, error).configure(bg="red") return except Exception: raise Exception("something wrong....") else: self.db.commit() self.reset_form() def reset_form(self): self.form.destroy() self.create_form() self.result.destroy() self.show_result() def create_input(self, name, text): # LABEL TEXT IS VARIABLE setattr(self, name + "_label_text", Tkinter.StringVar(self.form)) label_text = getattr(self, name + "_label_text") label_text.set(text) # LABEL setattr(self, name + "_label", Tkinter.Label(self.form, textvariable=label_text)) # INPUT setattr(self, name, Tkinter.Entry(self.form)) # PACK getattr(self, name + "_label").pack() getattr(self, name).pack() # VARS self.vars[name] = getattr(self, name).get
class Application(Tkinter.Frame): def __init__(self, master=None): Tkinter.Frame.__init__(self, master) self.grid() self.define_table() self.create_form() def define_table(self): self.db = DAL("sqlite://produtos.sqlite") self.table = self.db.define_table("produto", Field("nome"), Field("marca"), Field("peso", "double", label="Peso do produto"), Field("valor", "double"), Field("quant", "integer"), ) def create_form(self): self.vars = {} self.form = Tkinter.LabelFrame(self, text="Cadastro de produtos", padx="30", pady="15") self.form.pack(side=Tkinter.TOP) self.SQLTKFORM(self.table, self.form) def SQLTKFORM(self, table, master, hidden=['id']): fields = table.fields for field in fields: if field not in hidden: self.create_input(field, table[field].label, master) master.save_button = Tkinter.Button(master, text="Salvar", command=self.save_to_db).pack() def save_to_db(self): try: values = [(field, value()) for field, value in self.vars.items()] self.table.insert(**dict(values)) except Exception: self.db.rollback() else: self.db.commit() self.reset_form() def reset_form(self): self.form.destroy() self.create_form() def create_input(self, field, label, master): # self.label = Tkinter.Label(master, text=label) # label.pack() setattr(self, field+"_label", Tkinter.Label(master, text=label)) getattr(self, field+"_label").pack() setattr(self, field, Tkinter.Entry(master)) getattr(self, field).pack() self.vars[field] = getattr(self, field).get