Oct-18-2021, 08:26 AM
Hi all. I am making a Tkinter form for registration. I want the register button to be disabled until all fields are filled. secondly I am having an issue with validation command. The validation condition is to allow only 10 digits to be entered in the entry field. I am able to restrict the entry to only digits but unable to restrict the number of digits .
from tkinter import* import tkinter as tk import mysql.connector from tkinter import messagebox mydb= mysql.connector.connect(host="localhost",user="root", password="mudit",database="clinicmaster",auth_plugin="mysql_native_password") cursor=mydb.cursor() def clinic(): clinic_id=ent1.get() clinic_name=ent2.get() clinic_phone=ent6.get() sql=("INSERT INTO dentalclinic(clinic_id,clinic_name,clinic_phone)" "VALUES(%s,%s,%s)" ) cursor.execute(sql,(clinic_id,clinic_name,clinic_phone)) if clinic_id==' 'or clinic_name=='' or clinic_phone=='': messagebox.showinfo("ERROR","fill the empty field!!!") button.configure(state=DISABLED) else: messagebox.showinfo("Confirmation","Clinic Registered") button.configure(state=NORMAL) mydb.commit() messagebox.showinfo("Confirmation","Clinic Added") print("DONE") return True cursor.execute('select count(*) from dentalclinic') next_num = cursor.fetchall()[0][0] win=Tk() win.title("ADD Clinic") win.geometry("600x300") win.configure(background='light blue') win.resizable(False,False) var1=StringVar() clinic_id=StringVar() var2=StringVar() clinic_name=StringVar() var3=StringVar() clinic_phone=StringVar() label= Label(win,text= "Clinic Details",font=('Helvetica 20 italic'),bg="light blue") label.grid(row=0,column=2,padx=10,pady=10) label1=Label(win,textvariable=var1,bg="light blue") var1.set("Clinic ID. ") label1.grid(row=2,column=1,padx=10,pady=10) ent1=Entry(win,textvariable=clinic_id,width=10) clinic_id.set(next_num+1) ent1.grid(row=2,column=2,sticky=tk.W,padx=10,pady=10) label2=Label(win,textvariable=var2,bg="light blue") var2.set("Clinic Name") label2.grid(row=3,column=1,padx=10,pady=10) def caps(event): clinic_name.set(clinic_name.get().upper()) ent2=Entry(win,textvariable=clinic_name,width=40) ent2.bind("<KeyRelease>",caps) clinic_name.set(" ") ent2.grid(row=3,column=2,padx=10,pady=10) label3=Label(win,textvariable=var3,bg="light blue") var3.set("Phone No.") label3.grid(row=4,column=1,padx=10,pady=10) def validate_phone(new_value): if len(new_value) == 0 or len(new_value) <= 10 and new_value.isdigit(): return True else: return False ent3=Entry(win,width=40,textvariable=clinic_phone,validate="key",validatecommand=(win.register(validate_phone), "%S")) clinic_phone.set(" ") ent3.grid(row=4,column=2,padx=10,pady=10) btn=Button(win, text="ADD",command= clinic) btn.grid(row=5,column=2,padx=10,pady=10,sticky=tk.W) exit_button = Button(win, text="Exit", command=win.destroy) exit_button.grid(row=5,column=2,padx=10,pady=10,sticky=tk.E) win.mainloop()