Example #1
0
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
Example #2
0
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