توی آموزش قبلی صفحه اصلی برنامه رو طراحی کردیم
و توی این پست هم طبق قول داده شده میخوام آموزش قسمت دیتابیس رو + آموزش قسمت دکمه ایجاد مخاطب رو بزارم
من توی اینجا تابع دیتابیس رو براتون قرار میدم و بعدا شروع میکنم به توضیح خط به خطش
چون آموزش درست و درمونی توی سطح اینترنت راجب Sqlite نیستش
def Database():
conn = sqlite3.connect("Database.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS `user` (mem_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, contact TEXT, age TEXT, gender TEXT, lastname TEXT, firstname TEXT)")
cursor.execute("SELECT * FROM `user` ORDER BY `lastname` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
خب شروع کنیم دیگه D:
توی خط اول یه تابع با اسم Database درست کردیم
توی خط دوم اومدیم و متصل شدیم به فایل Database.db که اگه این فایل وجود نداشته باشه هم برامون ایجاد میشه و اتصال ایجاد شده رو ریختیم داخل متغیر conn که به کمکش میتونیم به متدهای دیگه دسترسی پیدا کنیم...
تو خط سوم به کمک دیتابیس ایجاد شده متد cursor رو فراخوانی کردیم داخل متغیر cursor که به کمکش میتونیم به متد execute دسترسی پیدا کنیم و به کمک این متد هم میتونیم جدول ایجاد کنیم و کارای دیگه....
حالا هم باید جدول ایجاد کنیم که اینکار هم به کمک متد execute انجام میشه
پس کار ما توی خط چهارم اینکار خواهد بود که جدول و فیلد های مورد نیاز رو ایجاد کنیم که دستور دادیم اگه جدول user وجود نداشت ، جدول user رو ایجاد کنه که فیلداش شامل : 1- mem_id هستش که چون از نوع عددی هست در نتیجه الزامی هست که AUTOINCREMENT رو هم بهش اضافه کنیم تا بصورت خودکار به شمارنده ها که همون تعداد شماره های مخاطبین هستن اضافه میشه ، 2- contact از نوع Text و بقیه ی متغیر ها که از نوع Text تعریف کردیم که قراره مخاطبین توی این فیلدها قرار بگیره...
تو خط پنجم دستور نمایش داده شدن فیلدهارو میدیم که اگه این دستور برداشته بشه ، بعد از اجرای برنامه اگه دیتابیسی با اطلاعاتی وجود داشته باشه دیگه چیزی برای ما به نمایش در نمیاد
توی خط ششم از متد fetchall استفاده کردیم که این متد برای جمع کردن داده های داخل ردیف ها هستش
بعدا به کمک حلقه همه اینارو وارد تری ویوو میکنیم و در آخر هم cursor و connection رو میبندیم
خب اینم از توضیحات کدهای دیتابیس و فقط کافیه که اینارو به عنوان یه متد به برنامه اضافه کنید
حالا باید کارای یه صفحه دیگه رو انجام بدیم که این صفحه میاد و چند تا تکست باکس به ما نمایش میده و ما باید موارد خواسته شده مثل نام و نام خانوادگی و اینجور چیزارو داخلش وارد کنیم و در نهایت روی دکمه ی ثبت کردن کلیک کنیم
def safeJadid():
global NewWindow
NAME.set("")
FAMILY.set("")
JENSIYAT.set("")
SEN.set("")
SHOMARE.set("")
NewWindow = Toplevel()
NewWindow.title("اضافه کردن مخاطب")
NewWindow.resizable(0, 0)
NewWindow.geometry('370x240')
ContactForm = Frame(NewWindow)
ContactForm.pack(side=TOP, pady=10)
RadioGroup = Frame(ContactForm)
Radiobutton(RadioGroup, text="مرد", variable=JENSIYAT, value="مرد", font=('arial', 14)).pack(side=LEFT)
Radiobutton(RadioGroup, text="زن", variable=JENSIYAT, value="زن", font=('arial', 14)).pack(side=LEFT)
lbl_firstname = Label(ContactForm, text="نام", font=('arial', 14), bd=5)
lbl_firstname.grid(row=0, sticky=E)
lbl_lastname = Label(ContactForm, text="نام خانوادگی", font=('arial', 14), bd=5)
lbl_lastname.grid(row=1, sticky=E)
lbl_gender = Label(ContactForm, text="جنسیت", font=('arial', 14), bd=5)
lbl_gender.grid(row=2, sticky=E)
lbl_age = Label(ContactForm, text="سن", font=('arial', 14), bd=5)
lbl_age.grid(row=3, sticky=E)
lbl_contact = Label(ContactForm, text="شماره", font=('arial', 14), bd=5)
lbl_contact.grid(row=5, sticky=E)
firstname = Entry(ContactForm, textvariable=NAME, font=('arial', 14))
firstname.grid(row=0, column=1)
lastname = Entry(ContactForm, textvariable=FAMILY, font=('arial', 14))
lastname.grid(row=1, column=1)
RadioGroup.grid(row=2, column=1)
age = Entry(ContactForm, textvariable=SEN, font=('arial', 14))
age.grid(row=3, column=1)
contact = Entry(ContactForm, textvariable=SHOMARE, font=('arial', 14))
contact.grid(row=5, column=1)
btn_addcon = Button(ContactForm, text="ثبت کردن", width=50, command=sabtData)
btn_addcon.grid(row=6, columnspan=2, pady=10)
من دیگه اینارو توضیح نمیدم چون اگه به کد ها دقت کنید با آموزشایی که تو پست قبل لینکشونو قرار دادم خیلی خوب میتونید همه ی اینارو درک کنید و فقط نیاز به کمی تمرین داره ، البته زیاد هم پیچیده نیست و یکمیشو که تو پست قبلی توضیح دادم ، یکمیشم مربوط به ساخت Label و TextBox و Button و تنظیماتشون هست که اینا هم دیگه کاری نداره
حالا هم نوبت میرسه به یه تابع دیگه که داخلش دستور میدیم بیاد و اطلاعاتی که داخل صفحه اضافه کردن مخاطب وارد میشه رو وارد دیتابیسمون کنه
def sabtData():
if NAME.get() == "" or FAMILY.get() == "" or JENSIYAT.get() == "" or SEN.get() == "" or SHOMARE.get() == "":
tkMessageBox.showwarning('', 'موارد خواسته شده رو پر کن ، وگرنه جفت پا میام تو صورتت', icon="warning")
else:
tree.delete(*tree.get_children())
conn = sqlite3.connect("Database.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO 'user' (contact, age, gender, lastname, firstname) VALUES(?, ?, ?, ?, ?)", (str(SHOMARE.get()), int(SEN.get()), str(JENSIYAT.get()), str(FAMILY.get()), str(NAME.get())))
conn.commit()
cursor.execute("SELECT * FROM `user` ORDER BY `lastname` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
NAME.set("")
FAMILY.set("")
JENSIYAT.set("")
SEN.set("")
SHOMARE.set("")
توی این کدها هم دستور میدیم که بیاد و مقادیر وارد شده رو چک کنه و اگه تکست باکسی خالی مونده بود به کاربر پیغام خطا نشون بده و تهدید کنه که جفت پا میره تو سینش D:
و اگرم خالی نبود میاد به دیتابیس متصل میشه و به کمک insert اطلاعات رو وارد دیتابیس میکنه و در نهایت اتصال رو میبنده و صفحه ی اصلی رو که مخاطبین روی تری ویوو نمایش داده میشن رو بروزرسانی کنه و تکست باکسارو خالی میکنه که میتونیم بعدش دستور بستن اون فورم رو هم بدیم که اونم یه چیز اختیاریه
حالا هم نوبت میرسه به تعریف متغیر هایی مثل نام و نام خانوادگی و اینجور چیزا که توی اینجا هم اتریب عزیز یه اشاره کوچیکی بهش کرده بود
NAME = StringVar()
FAMILY = StringVar()
SEN = StringVar()
SHOMARE = StringVar()
JENSIYAT = StringVar()
حالا اینو بیرون از تابع قبلی بزارید و ذخیره کنید
در نهایت به انتهای اسکریپت برید و تابع Database رو فراخوانی کنید که مطمئنم اونو دیگه بلدید :|
اگه فراخوانی نشه بعد از اجرای اسکریپت مخاطبینی که از قبل ایجاد شدن نمایش داده نمیشن چون توی تابع دیتابیس دستور دادیم همه ی داده هارو بخونه و نمایش بده ، پس حتما باید دستور فراخوانیشو بدیم
خب دیگه اینم که از این ، فقط چون چیزی راجب صفحه ایجاد مخاطب چیزی نگفتم اگه جاییشو متوجه نشدید بپرسید جواب میدم
یا اگه هر سوالی بود بپرسید
در پست بعدی هم راجب دکمه ی حذف مخاطب صحبت میکنیم و در نهایت هم نحوه ی بروزرسانی یه مخاطب از داخل دیتابیس رو بهتون خواهم گفت...
فعلا با همینا کار کنید و سعی کنید با کدها بازی کنید
قسمت اول آموزش ساخت دفترچه تلفن با پایتون
موفق باشید
MjAqKjIwDQoNCtin24zZiNmEIQ==
:)
2K7bjNmE24wg2LnYtNmC24wg2K/Yp9iv2KfYtCA6KQ0K2YXZhdmG2YjZhtiq2YU6KQ==