Home > database >  how to save a drawing which i have made in tkinter canvas IN sqlite3 database and then again fetch i
how to save a drawing which i have made in tkinter canvas IN sqlite3 database and then again fetch i

Time:12-11

con = sqlite3.connect("new1.db")
con.execute(""" CREATE TABLE IF NOT EXISTS customer_jj(
    id  INTEGER PRIMARY KEY AUTOINCREMENT,
    name  VARCHAR,
    phone INTEGER,
    l VARCHAR,
    ch VARCHAR,
    s VARCHAR,
    t VARCHAR,
    n VARCHAR,
    w VARCHAR,
    l1 VARCHAR,
    w1 VARCHAR,
    h VARCHAR,
    l2 VARCHAR,
    m VARCHAR,
    g VARCHAR,
    o1 VARCHAR,
    o2 VARCHAR,
    o3 VARCHAR,
    o4 VARCHAR,
    others VARCHAR,
    del TIMESTAMP,
    date TIMESTAMP)
""")


class Student:
    def __init__(self, root):
        self.root = root
        self.root.title("King Tailors")
        self.root.geometry("1350x700 0 0")
        DEFAULT_PEN_SIZE = 5.0
        DEFAULT_COLOR = 'black'

        title = Label(self.root, text="King Tailors", bd=10, relief=GROOVE, font=("times new roman", 40, "bold"),
                      bg="white", fg="black", highlightbackground="gray", highlightthickness=4)
        title.pack(side=TOP, fill=X)
        self.date = StringVar()
        self.format_date = StringVar()
        self.id = StringVar()
        self.customer_name = StringVar()
        self.phone = StringVar()
        self.del_date = StringVar()
        self.l = StringVar()
        self.ch = StringVar()
        self.s = StringVar()
        self.t = StringVar()
        self.n = StringVar()
        self.w = StringVar()
        self.l1 = StringVar()
        self.w1 = StringVar()
        self.h = StringVar()
        self.l2 = StringVar()
        self.m = StringVar()
        self.g = StringVar()
        self.o = StringVar()
        self.o1 = StringVar()
        self.o2 = StringVar()
        self.o3 = StringVar()
        self.o4 = StringVar()
        self.txt_date = StringVar()

        self.search_by = StringVar()
        self.search_text = StringVar()

        manage_frame1 = Frame(self.root, bd=4, relief=GROOVE, highlightbackground="gray", highlightthickness=1)

        detail_frame = Frame(self.root, bd=2, relief=SUNKEN, highlightbackground="gray", highlightthickness=1)
        manage_frame1.place(x=10, y=100, width=690, height=590)


        detail_frame.place(x=700, y=100, width=620, height=590)

        date1 = dt.datetime.now()
        format_date = f"{date1: %b %d %y}"
        lbl_date = Label(manage_frame1, text="Date", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_date.grid(row=0, column=0, pady=5, padx=5, sticky="w")
        self.pen_button = Button(manage_frame1, text='pen', command=self.use_pen,width=5)
        self.pen_button.place(x=250,y=450,width=80)
        self.c = Canvas(manage_frame1, bg='white', width=200, height=130)
        self.c.grid(row=14, column=0)

        self.button3 = Button(manage_frame1, text="Done!", width=2, bg='white', command=self.save)
        self.button3.place(x=250, y=540, width=80)
        self.button1 = Button(manage_frame1, text="Clear!", width=2, bg='white', command=self.clear1)
        self.button1.place(x=250,y=510,width=80)
        self.eraser_button2 = Button(manage_frame1, text='eraser', command=self.use_eraser)
        self.eraser_button2.place(x=250,y=480,width=80)
        self.setup()
        self.image = PIL.Image.new("RGB",(200,200),(255,255,255))
        self.draw = ImageDraw.Draw(self.image)

        self.choose_size_button = Scale(manage_frame1, from_=1, to=8, orient=HORIZONTAL)
        self.choose_size_button.grid(row=13, column=1)

        txt_date = Entry(manage_frame1, textvariable=self.date, font=("times new roman", 15, "bold"), bd=5,
                         relief=RAISED)

        txt_date1 = DateEntry(manage_frame1, textvariable=self.del_date, selectmode='day', width=18)

        txt_date1.grid(row=1, column=1, pady=5, padx=5, sticky="w")

        lbl_date1 = Label(manage_frame1, text="Delivery Date", font=("times new roman", 15, "bold"), bg="white",
                          fg="black")
        lbl_date1.grid(row=1, column=0, pady=5, padx=5, sticky="w")

        txt_date = Entry(manage_frame1, textvariable=self.date, width=12, font=("times new roman", 15, "bold"), bd=5,
                         relief=RAISED)
        txt_date.insert(END, format_date)
        txt_date.grid(row=0, column=1, pady=5, padx=5, sticky="w")
        lbl_roll = Label(manage_frame1, text="Customer Name", font=("times new roman", 15, "bold"), bg="white", bd=5,
                         fg="black")
        lbl_roll.grid(row=2, column=0, pady=5, padx=5, sticky="w")
        #
        txt_roll = Entry(manage_frame1, textvariable=self.customer_name, width=15, font=("times new roman", 15, "bold"),
                         bd=5,
                         relief=RAISED)
        txt_roll.grid(row=2, column=1, pady=5, padx=5, sticky="w")

        lbl_age = Label(manage_frame1, text="Phone No", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_age.grid(row=3, column=0, pady=5, padx=5, sticky="w")

        txt_age = Entry(manage_frame1, textvariable=self.phone, width=15, font=("times new roman", 15, "bold"), bd=5,
                        relief=RAISED)
        txt_age.grid(row=3, column=1, pady=5, padx=5, sticky="w")

        lbl_add = Label(manage_frame1, text="S. L", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_add.grid(row=8, column=0, pady=5, padx=5, sticky="w")

        txt_add = Entry(manage_frame1, textvariable=self.l, width=5, font=("times new roman", 15, "bold"), bd=5,
                        relief=RAISED)
        txt_add.grid(row=8, column=0, pady=5, padx=5, sticky="e")

        lbl_addd = Label(manage_frame1, text="P. L", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_addd.grid(row=8, column=1, pady=5, padx=5, sticky="e")

        txt_addd = Entry(manage_frame1, textvariable=self.l1, width=5, font=("times new roman", 15, "bold"), bd=5,
                         relief=RAISED)
        txt_addd.grid(row=8, column=2, pady=5, padx=5, sticky="s")
        lbl_add1 = Label(manage_frame1, text="S. CH", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_add1.grid(row=10, column=0, pady=5, padx=5, sticky="w")

        txt_add1 = Entry(manage_frame1, textvariable=self.ch, width=5, font=("times new roman", 15, "bold"), bd=5,
                         relief=RAISED)
        txt_add1.grid(row=10, column=0, pady=5, padx=5, sticky="e")
        lbl_addp = Label(manage_frame1, text="P. W", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_addp.grid(row=11, column=1, pady=5, padx=5, sticky="e")

        txt_addp = Entry(manage_frame1, textvariable=self.w1, width=5, font=("times new roman", 15, "bold"), bd=5,
                         relief=RAISED)
        txt_addp.grid(row=11, column=2, pady=5, padx=5, sticky="s")

        lbl_add2 = Label(manage_frame1, text="S. S", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_add2.grid(row=9, column=0, pady=5, padx=5, sticky="w")
        #
        txt_add2 = Entry(manage_frame1, textvariable=self.s, width=5, font=("times new roman", 15, "bold"), bd=5,
                         relief=RAISED)
        txt_add2.grid(row=9, column=0, pady=5, padx=5, sticky="e")

        lbl_add2p = Label(manage_frame1, text="P. H", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_add2p.grid(row=9, column=1, pady=5, padx=5, sticky="e")

        txt_add2p = Entry(manage_frame1, textvariable=self.h, width=5, font=("times new roman", 15, "bold"), bd=5,
                          relief=RAISED)
        txt_add2p.grid(row=9, column=2, pady=5, padx=5, sticky="s")
        lbl_add3 = Label(manage_frame1, text="S. T", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_add3.grid(row=11, column=0, pady=5, padx=5, sticky="w")

        txt_add3 = Entry(manage_frame1, textvariable=self.t, width=5, font=("times new roman", 15, "bold"), bd=5,
                         relief=RAISED)
        txt_add3.grid(row=11, column=0, pady=5, padx=5, sticky="e")

        lbl_add3p = Label(manage_frame1, text="P. L", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_add3p.grid(row=10, column=1, pady=5, padx=5, sticky="e")

        txt_add3p = Entry(manage_frame1, textvariable=self.l2, width=5, font=("times new roman", 15, "bold"), bd=5,
                          relief=RAISED)
        txt_add3p.grid(row=10, column=2, pady=5, padx=5, sticky="s")
        lbl_o1 = Label(manage_frame1, text="Shirt", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_o1.grid(row=0, column=2, pady=5, padx=5, sticky="w")

        txt_o1 = Entry(manage_frame1, textvariable=self.o1, width=5, font=("times new roman", 15, "bold"), bd=5,
                          relief=RAISED)
        txt_o1.grid(row=0, column=3, pady=5, padx=5, sticky="w")
        lbl_o2 = Label(manage_frame1, text="Pant", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_o2.grid(row=0, column=4, pady=5, padx=5, sticky="n")

        txt_o2 = Entry(manage_frame1, textvariable=self.o2, width=5, font=("times new roman", 15, "bold"), bd=5,
                       relief=RAISED)
        txt_o2.grid(row=0, column=5, pady=5, padx=5, sticky="w")
        lbl_o3 = Label(manage_frame1, text="Coat", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_o3.grid(row=1, column=2, pady=5, padx=5, sticky="w")

        txt_o3 = Entry(manage_frame1, textvariable=self.o3, width=5, font=("times new roman", 15, "bold"), bd=5,
                       relief=RAISED)
        txt_o3.grid(row=1, column=3, pady=5, padx=5, sticky="w")

        lbl_o3 = Label(manage_frame1, text="Kurta", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_o3.grid(row=2, column=2, pady=5, padx=5, sticky="w")

        txt_o3 = Entry(manage_frame1, textvariable=self.o4, width=5, font=("times new roman", 15, "bold"), bd=5,
                       relief=RAISED)
        txt_o3.grid(row=2, column=3, pady=5, padx=5, sticky="w")

        lbl_add4 = Label(manage_frame1, text="S. N", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_add4.grid(row=9, column=0, pady=5, padx=5, sticky="w")

        txt_add4 = Entry(manage_frame1, textvariable=self.n, width=5, font=("times new roman", 15, "bold"), bd=5,
                         relief=RAISED)
        txt_add4.grid(row=9, column=0, pady=5, padx=5, sticky="e")

        lbl_add4p = Label(manage_frame1, text="P. M", font=("times new roman", 15, "bold"), bg="white", fg="black")
        lbl_add4p.grid(row=9, column=1, pady=5, padx=5, sticky="e")

        txt_add4p = Entry(manage_frame1, textvariable=self.m, width=5, font=("times new roman", 15, "bold"), bd=5,
                          relief=RAISED)
        txt_add4p.grid(row=9, column=2, pady=5, padx=5, sticky="s")

        lbl_add5 = Label(manage_frame1, text="S. W", font=("times new roman", 15, "bold"), bg="white",
                         fg="black")
        lbl_add5.grid(row=12, column=0, pady=5, padx=5, sticky="w")

        txt_add5 = Entry(manage_frame1, textvariable=self.w, width=5, font=("times new roman", 15, "bold"), bd=5,
                         relief=RAISED)
        txt_add5.grid(row=12, column=0, pady=5, padx=5, sticky="e")

        lbl_add5p = Label(manage_frame1, text="P. G", font=("times new roman", 15, "bold"), bg="white",
                          fg="black")
        lbl_add5p.grid(row=12, column=1, pady=5, padx=5, sticky="e")

        txt_add5p = Entry(manage_frame1, textvariable=self.g, width=5, font=("times new roman", 15, "bold"), bd=5,
                          relief=RAISED)
        txt_add5p.grid(row=12, column=2, pady=5, padx=5, sticky="s")

        lbl_others = Label(manage_frame1, text="Others", font=("times new roman", 15, "bold"), bg="white",
                           fg="black")
        lbl_others.grid(row=1, column=4, pady=5, padx=5, sticky="n")

        txt_others = Entry(manage_frame1, textvariable=self.o, width=5, font=("times new roman", 15, "bold"), bd=5,
                           relief=RAISED)

        txt_others.grid(row=1, column=5, pady=5, padx=5, sticky="w")


        btn_frame = Frame(manage_frame1, bd=2, relief=RIDGE, bg="white", highlightbackground="gray",
                          highlightthickness=2)

        btn_frame.place(x=360, y=470, width=320)

        addbtn = Button(btn_frame, text="Add", width=8, command=self.add_customer).grid(row=0, column=0, padx=5)
        updatebtn = Button(btn_frame, text="Update", width=8, command=self.update_data).grid(row=0, column=1, padx=5)
        deletebtn = Button(btn_frame, text="Delete", width=8, command=self.delete_data).grid(row=0, column=2, padx=5)
        clearbtn = Button(btn_frame, text="Clear", width=8, command=self.clear).grid(row=0, column=3, padx=5)

        lbl_search = Label(detail_frame, text="Search By", bg="white", font=("times new roman", 15, "bold"), fg="black")
        lbl_search.grid(row=0, column=0, pady=10, padx=10, sticky="w")

        combo_search = ttk.Combobox(detail_frame, textvariable=self.search_by, width=6,
                                    font=("times new roman", 13, "bold"), state="readonly")
        combo_search['values'] = ("name", "phone", "id", "date")
        combo_search.grid(row=0, column=1, padx=10, pady=10)

        txt_search = Entry(detail_frame, textvariable=self.search_text, width=10, font=("times new roman", 10, "bold"),
                           bd=5, relief=GROOVE, highlightbackground="gray", highlightthickness=2)
        txt_search.grid(row=0, column=2, pady=10, padx=10, sticky="w")

        search_btn = Button(detail_frame, relief=GROOVE, command=self.search_data, text="Search", width=8, pady=5).grid(
            row=0,
            column=3,
            padx=5)
        show_all_btn = Button(detail_frame, relief=GROOVE, command=self.fetch_data, text="Show All", width=5,
                              pady=5).grid(row=0,
                                           column=4,
                                           padx=5)
        rec_btn = Button(detail_frame, text="Save", relief=GROOVE, command=threading.Thread(target=self.save_data).start(), width=5, pady=4).grid(row=0,
                                                                                                                 column=6,
                                                                                                                 padx=5)

        table_frame = Frame(detail_frame, bd=5, relief=GROOVE, bg="white")
        table_frame.place(x=5, y=60, width=600, height=520)
        rec_btn = Button(detail_frame, text="Receipt", command=self.rec, width=8, pady=5).grid(row=0, column=5, padx=5)

        scroll_x = Scrollbar(table_frame, orient=HORIZONTAL)
        scroll_y = Scrollbar(table_frame, orient=VERTICAL)
        self.customer_table = ttk.Treeview(table_frame, columns=(
        "id", "name", "phone", "l", "ch", "s", "t", "n", "w", "l1", "w1", "h", "l2", "m", "g", "others","o1","o2","o3","o4","del", "date"),
                                           xscrollcommand=scroll_x.set, yscrollcommand=scroll_y.set, )
        # sorted(self.customer_table,reverse=True)
        scroll_x.pack(side=BOTTOM, fill=X)
        scroll_y.pack(side=RIGHT, fill=Y)
        scroll_x.config(command=self.customer_table.xview)
        scroll_y.config(command=self.customer_table.yview)
        self.customer_table.heading("id", text="Customer ID")
        self.customer_table.heading("name", text="customer name")
        self.customer_table.heading("phone", text="phone no")
        self.customer_table.heading("l", text="S. L")
        self.customer_table.heading("ch", text="S. CH")
        self.customer_table.heading("s", text="S. S")
        self.customer_table.heading("t", text="S. T")
        self.customer_table.heading("n", text="S. N")
        self.customer_table.heading("w", text="S. W")
        self.customer_table.heading("l1", text="P. L")
        self.customer_table.heading("w1", text="P. W")
        self.customer_table.heading("h", text="P. H")
        self.customer_table.heading("l2", text="P. L")
        self.customer_table.heading("m", text="P. M")
        self.customer_table.heading("g", text="P. G")
        self.customer_table.heading("others", text="Others")
        self.customer_table.heading("o1", text="Shirt Q.")
        self.customer_table.heading("o2", text="Pant Q.")
        self.customer_table.heading("o3", text="Coat")
        self.customer_table.heading("o4", text="Kurta")
        self.customer_table.heading("del", text="Delivery Date")
        self.customer_table.heading("date", text="Date")
        # self.customer_table.heading("center", text="Center Back Length")
        self.customer_table['show'] = 'headings'
        self.fetch_data()
        self.customer_table.pack(fill=BOTH, expand=2)
        # sorted(self.customer_table)
        self.customer_table.bind("<ButtonRelease-1>", self.get_cur)

    DEFAULT_PEN_SIZE = 5.0
    DEFAULT_COLOR = 'black'

    def setup(self):
        self.old_x = None
        self.old_y = None
        # self.line_width = self.choose_size_button.get()
        self.color = self.DEFAULT_COLOR
        self.eraser_on = False
        self.active_button = self.pen_button
        self.c.bind('<B1-Motion>', self.paint)
        self.c.bind('<ButtonRelease-1>', self.reset)

    def use_pen(self):
        self.activate_button(self.pen_button)

    def use_eraser(self):
        self.activate_button(self.eraser_button2, eraser_mode=True)

    def activate_button(self, some_button, eraser_mode=False):
        self.active_button.config(relief=RAISED)
        some_button.config(relief=SUNKEN)
        self.active_button = some_button
        self.eraser_on = eraser_mode

    def paint(self, event):
        self.line_width = self.choose_size_button.get()
        paint_color = 'white' if self.eraser_on else self.color
        if self.old_x and self.old_y:
            self.c.create_line(self.old_x, self.old_y, event.x, event.y,
                               width=self.line_width, fill=paint_color,
                               capstyle=ROUND, smooth=TRUE, splinesteps=36)
        self.old_x = event.x
        self.old_y = event.y

    def reset(self, event):
        self.old_x, self.old_y = None, None

    def clear1(self):
        self.c.delete("all")
        self.image=Image.new("RGB",(200,200),(255,255,255))
        self.draw=ImageDraw.Draw(self.image)

    def add_customer(self):
        if self.phone.get() == "" or self.customer_name.get() == "":
            messagebox.showerror("Error", "All fields are required!")
        else:
            con = sqlite3.connect("new1.db")
            cur = con.cursor()
            cur.execute(
                "insert into customer_jj  (name,phone,l,ch,s,t,n,w,l1,w1,h,l2,m,g,others,o1,o2,o3,o4,del,date)  values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
                (self.customer_name.get(), self.phone.get(), self.l.get(), self.ch.get(),
                 self.s.get(), self.t.get(), self.n.get(), self.w.get(), self.l1.get(), self.w1.get(), self.h.get(),
                 self.l2.get(), self.m.get(), self.g.get(), self.o.get(), self.o1.get(),self.o2.get(),self.o3.get(),self.o4.get(),self.del_date.get(), self.date.get()))

            con.commit()
            self.fetch_data()
            self.clear()
            con.close()
            messagebox.showinfo("Success", "Record has been inserted")

    #
    def fetch_data(self):
        con = sqlite3.connect("new1.db")
        cur = con.cursor()
        cur.execute("select * from customer_jj ORDER BY id DESC")
        rows = cur.fetchall()
        if len(rows) != 0:
            self.customer_table.delete(*self.customer_table.get_children())
            for row in rows:
                self.customer_table.insert('', END, values=row)
            con.commit()
        con.close()

    #
    def clear(self):
        self.id.set("")
        self.customer_name.set("")
        self.l.set("")
        self.phone.set("")
        self.ch.set("")
        self.s.set("")
        self.t.set("")
        self.n.set("")
        self.w.set("")
        self.l1.set("")
        self.w1.set("")
        self.h.set("")
        self.l2.set("")
        self.m.set("")
        self.g.set("")
        self.o.set("")
        self.o1.set("")
        self.o2.set("")
        self.o3.set("")
        self.o4.set("")
        self.del_date.set("")

    def get_cur(self, ev):
        cursor_row = self.customer_table.focus()
        contents = self.customer_table.item(cursor_row)

        row = contents['values']

        self.id.set(row[0])
        self.customer_name.set(row[1])
        self.l.set(row[3])
        self.phone.set(row[2])
        self.ch.set(row[4])
        self.s.set(row[5])
        self.t.set(row[6])
        self.n.set(row[7])
        self.w.set(row[8])
        self.l1.set(row[9])
        self.w1.set(row[10])
        self.h.set(row[11])
        self.l2.set(row[12])
        self.m.set(row[13])
        self.g.set(row[14])
        self.o.set(row[15])
        self.o1.set(row[16])
        self.o2.set(row[17])
        self.o3.set(row[18])
        self.o4.set(row[19])
        self.date.set(row[21])
        self.del_date.set(row[20])

    def update_data(self):
        con = sqlite3.connect("new1.db")
        cur = con.cursor()
        cur.execute(
            "update customer_jj set name=?,l=?,ch=?,s=?,t=?,n=?,w=?,l1=?,w1=?,h=?,l2=?,m=?,g=?,others=?,o1=?,o2=?,o3=?,o4=?,del=?,date=? where phone=?",
            (self.customer_name.get(), self.l.get(), self.ch.get(), self.s.get(),
             self.t.get(), self.n.get(), self.w.get(), self.l1.get(), self.w1.get(), self.h.get(), self.l2.get(),
             self.m.get(), self.g.get(), self.o.get(),self.o1.get(),self.o2.get(),self.o3.get(),self.o4.get(),self.del_date.get(), self.date.get(), self.phone.get(),))
        if self.phone.get() != int:
            messagebox.showerror("Please Enter a number")
        else:
            pass
        con.commit()
        self.fetch_data()
        self.clear()
        con.close()

    #
    def delete_data(self):
        con = sqlite3.connect("new1.db")
        cur = con.cursor()

        cur.execute("delete from customer_jj where id=?", (self.id.get(),))

        con.commit()

        self.fetch_data()
        self.clear()
        con.close()

    def search_data(self):
        con = sqlite3.connect("new1.db")
        cur = con.cursor()
        cur.execute("select * from customer_jj where "   str(self.search_by.get())   " Like '%"   str(
            self.search_text.get())   "%'")
        rows = cur.fetchall()
        if len(rows) != 0:
            self.customer_table.delete(*self.customer_table.get_children())
        for row in rows:
            self.customer_table.insert('', END, values=row)
        con.commit()
        # self.clear()
        con.close()

    #
    def rec(self):
        top = Toplevel()
        top.geometry("600x400")
        top.config(bg='white')
        l = Label(top, text='_______RECEIPT______')
        l1 = Label(top, text='KING TAILORS', font=("times new roman", 40, "bold"))
        l1.pack()
        l.pack()
        l.config(bg='white')
        heading2 = Label(top, text="Customer Phone No  " f'{self.phone.get()}\t')
        heading1 = Label(top, text="    Date   " f'{self.date.get()}\t')
        heading2.pack()
        heading1.pack()
        l.config(bg='white')
        item2 = Label(top, text="Customer ID\t" f'{self.id.get()}', bd=5, font=("times new roman", 20, "bold"),
                      bg="white", fg="black")
        item3 = Label(top, text="Customer Name\t" f'{self.customer_name.get()}', bd=5,
                      font=("times new roman", 20, "bold"), bg="white", fg="black")
        item1 = Label(top, text="Delivery Date\t" f'{self.del_date.get()}', bd=5, font=("times new roman", 20, "bold"),
                      bg="white", fg="black")

        item2.pack()
        item3.pack()
        item1.pack()
        item1.config(bg='white')

    def save_data(self):

       
        CLIENT_SECRET_FILE = 'client_secrets.json'
        API_NAME = 'drive'
        API_VERSION = 'v3'
        SCOPES = ['https://www.googleapis.com/auth/drive']

        service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
        
        file_metadata = {
            'name': 'new1.db',
            'parents': ['1HuEoYhq5Os5b79RsdyHX86-k1ZgE2vwz']
        }

        # media_content = MediaFileUpload('customerdatabasen1.db', mimetype='/')
       
       
        # TO ADD CONTENT TO EXISTING FILE ON DRIVE
        file_id = '19doKc4NrYgrR5y-HmNsfnT9Qct5_XuuY'

        media_content = MediaFileUpload('new1.db', mimetype='/')

        service.files().update(fileId=file_id, media_body=media_content).execute()

        schedule.every(5).seconds.do(self.save_data)
        while True:
            schedule.run_pending()
            time.sleep(1)

    def checkname(self, name):
        if name.isalpha():
            return True
        if name.isalnum():
            return False
        if len(str(name)) == 0:
            return True
        else:
            messagebox.showerror('Invalid', 'Name should be in Characters')

    #
    def checkphone(self, phone):
        if phone.isalpha():
            return False
        if phone.isalnum():
            return True
        if len(str(phone)) == 0:
            return True
        else:
            messagebox.showerror('Invalid', 'Phone No should be in numbers')
            return False

    def save(self):
        import uuid
        filename = str(uuid.uuid4())

        ps = self.c.postscript(colormode='color')
        img = Image.open(io.BytesIO(ps.encode('utf-8')))
        filename1 = f'image_{filename}.jpg'
        print(filename1)
        img.save(filename1)


    def validation(self):
        if self.customer_name.get() == '':
            messagebox.showerror('Error', 'Please enter your name', parent=self.root)


def __init__(self):
    self.root = Tk()


DEFAULT_PEN_SIZE = 5.0
DEFAULT_COLOR = 'black'
root = Tk()
ob = Student(root)
root.mainloop()`

[I am working with python Tkinter and their database connection with sqlite3.I am able to save my whole code in the database but I have no idea about how can get the drawing under canvas and save it in my database. I also want when I search for my other data in the database the drawing related to it would also be fetched up on the canvas.so my major question is in the add_customer section I am inserting values into database as I m using self.customer_name,self.phone how can I get the variable for canvas drawing]

CodePudding user response:

This is a possible duplicate of this. There is one minor difference with yours, you want to save it to sqlite. In which case, PIL stores the image data in bytes. Which you can then store in sqlite in either varchar or blob.

  • Related