آموزش ساخت دفترچه تلفن پایتون 2 :: V i R u s Ʒ²

V i R u s Ʒ²

هک و امنیت

V i R u s Ʒ²

هک و امنیت

Virus 32

💢 دوستانم بی دفاع و دشمنانم بی جواب نخواهند ماند 💢

-->
آخرین نظرات
  • ۶ ارديبهشت ۰۳، ۱۶:۱۵ - hidden
    test

توی آموزش قبلی صفحه اصلی برنامه رو طراحی کردیم

و توی این پست هم طبق قول داده شده میخوام آموزش قسمت دیتابیس رو + آموزش قسمت دکمه ایجاد مخاطب رو بزارم

من توی اینجا تابع دیتابیس رو براتون قرار میدم و بعدا شروع میکنم به توضیح خط به خطش

چون آموزش درست و درمونی توی سطح اینترنت راجب 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==

Virus32 MicRoB 32 :
2K7ZiNin2YfYtA==
  • Virus32
  • سعید حیاتی
  • ممنون

    موفق باشید

    میگم این کد امنیتیو بردارید

  • Virus32
  • علیرضا علیزاده
  • سلام

    میشه کد کامل این دفترچه رو بدید

    دیگه گـ*ـشادیه و هزار درد (:

     

    Virus32 32 Attacker ‌ :
    اگه منظورت سورسه، نه نمیشه 

    کدر‌نرو تورو خدا

    زنده باش

    چست بزار

    نزار دو باره گروه بپاشه 

    سایت دیگه مطلب نظاره

    بمون کار بمون

    بمون مار و شاد کن با پستای بس نگو

    نیازت داریم ...

    گیسمت یم کو په؟؟؟

    منتظرم خیلی !

    خیلی خوبه این یکی!

    شاید جزو 5 تا کار بهتر سایت باشه که خیلی عالین همشون!

    ممنون

    سلام به کدر گوزل خودم!

    این سورس کاملشه :

    import sqlite3
    from tkinter import *
    import tkinter.ttk as ttk
    import tkinter.messagebox as tkMessageBox
    
    def Database():
        conn = sqlite3.connect("Database.db")
        cursor = conn.cursor()
        try:
            cursor.execute("SELECT * FROM `user` ORDER BY `lastname` ASC")
        except:
            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)")
        fetch = cursor.fetchall()
        for data in fetch:
            tree.insert('', 'end', values=(data))
        cursor.close()
        conn.close()
    Database()
    
    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)
    
    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("")
    
    
    
    window = Tk()
    window.title('دفترچه تلفن')
    window.geometry('450x400')
    window.resizable(0,0)
    
    NAME = StringVar()
    FAMILY = StringVar()
    SEN = StringVar()
    SHOMARE = StringVar()
    JENSIYAT = StringVar()
    
    Mid = Frame(window, width=500,  bg="red")
    Mid.pack(side=TOP)
    MidLeft = Frame(Mid, width=100)
    MidLeft.pack(side=LEFT, pady=10)
    MidLeftPadding = Frame(Mid, width=200)
    MidLeftPadding.pack(side=LEFT)
    MidRight = Frame(Mid, width=100)
    MidRight.pack(side=RIGHT, pady=10)
    
    btn_add = Button(MidRight, text="+ اضافه کردن", bg="pink",foreground="black",command=safeJadid)
    btn_add.pack(side=RIGHT)
    
    btn_delete = Button(MidLeft, text="- حذف کردن", bg="pink",foreground="black")
    btn_delete.pack(side=LEFT)
    
    TableMargin = Frame(window, width=500)
    TableMargin.pack(side=TOP)
    scrollbarx = Scrollbar(TableMargin, orient=HORIZONTAL)
    scrollbary = Scrollbar(TableMargin, orient=VERTICAL)
    tree = ttk.Treeview(TableMargin, columns=("MemberID", "Contact", "Age" , "Gender", "Lastname", "Firstname"), height=300, selectmode="extended", yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set)
    scrollbary.config(command=tree.yview)
    scrollbary.pack(side=LEFT, fill=Y)
    scrollbarx.config(command=tree.xview)
    scrollbarx.pack(side=BOTTOM, fill=X)
    tree.heading('MemberID', text="MemberID", anchor=E)
    tree.heading('Firstname', text="نام", anchor=E)
    tree.heading('Lastname', text="نام خانوادگی", anchor=E)
    tree.heading('Gender', text="جنسیت", anchor=E)
    tree.heading('Age', text="سن", anchor=E)
    tree.heading('Contact', text="شماره تماس", anchor=E)
    tree.column('#0', stretch=NO, minwidth=0, width=0, anchor=E)
    tree.column('#1', stretch=NO, minwidth=0, width=0, anchor=E)
    tree.column('#2', stretch=NO, minwidth=0, width=100, anchor=E)
    tree.column('#3', stretch=NO, minwidth=0, width=50, anchor=E)
    tree.column('#4', stretch=NO, minwidth=0, width=70, anchor=E)
    tree.column('#5', stretch=NO, minwidth=0, width=90, anchor=E)
    tree.column('#6', stretch=NO, minwidth=0, width=70, anchor=E)
    tree.pack()
    
    window.mainloop()

    ولی برای بار دوم که راهش میندازیم اتفاقی که میفته اینه که این ارور میده :

    Traceback (most recent call last):
      File "C:/****************************************************/phone_note_boock/1.py", line 136, in <module>
        Database()
      File "C:/****************************************************/phone_note_boock/1.py", line 133, in Database
        tree.insert('', 'end', values=(data))
    NameError: name 'tree' is not defined

    اینو اگه میشه بگین چیکار کنم

    و یک چیز دیگه

    برای حذفش هیچ کاری نیاز نیست بکنیم!

    میگیم دیلیت کن از دیتابیس و از table,user اون مقداری رو که اسم و فامیلیش و شماره و زن و مرد بودن و سنش برابر یه چیزی باشه

    که برای راحتی کار به جای اون سن و اینا کلا یه آِدی در نظر بگیریم که برای ما mem_id هستش

    و میگیم این آیدی رو حذف کن!!!!!

    خیلی ممنونم کدر! اگه هنوز زنده هستی که امیدوارم باشی این اروره رو بگیر بی زحمت!

    راستی توی قسمت اولش یه چیزو دوباز زده بودی!

    خیلی عشقی داداش :)

    Virus32 Attrib32 32 32 :
    ماشاالله میلر چقدر کامنت میدی خخ
    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی