0
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]

jaspreet
  • 13
  • 5

1 Answers1

0

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.

  • I mean, according to link that you have suggested i have to give each canvas manually a name while saving.but my code is doing it by giving them a unique so there would be no redundancy with their names.but my major question is how can I get by which variable can I assign the tkinter drawing with database.as I have now created a different database with BLOB but how can I give value to blob in add_customer section where I have assign values like self.customer_name,self.phone etc. so but what would be the variable assigning for canvas data – jaspreet Dec 10 '21 at 11:27
  • Your database is trying to store everything into one table. If you're doing a user based system, you should add a different table for different jobs. For example storing the canvas data. That can be a different table. This is a wild guess but I believe you need to look up on what a foreign key in a database is. Or simply how a relational database like sqlite works. – gandhi's-anger-translator Dec 10 '21 at 11:39
  • ok if create an another table where I would store its canvas drawing then I have to give the value of canvas drawing then would be it. – jaspreet Dec 10 '21 at 11:47
  • e.g. insert into customer1(images) values (?),(what would be here) – jaspreet Dec 10 '21 at 11:49
  • You need to store the primary key of the user who stored the data into the canvas table. This way you can take out all the canvas saved by said user and display it for them. – gandhi's-anger-translator Dec 10 '21 at 11:58
  • Please clarify via edits, not comments. Please put everything needed to answer in your post, not partly somewhere else at a link. – philipxy Dec 11 '21 at 07:38
  • Sure, I'm currently at work and I shall do so asap – gandhi's-anger-translator Dec 11 '21 at 08:45