كتبت كود برنامج على python tkinter خاص ببيانات الموظفين
وتم الاتصال بقواعد البيانات وإدخال المعلومات على الجدول بنجاح,
from tkinter import * from tkinter import ttk import pymysql class Employee: # ----------- إنشاء نافذة البرنامج ----------- def __init__(self, root): self.root = root self.root.geometry('1300x650+22+22') # الأرقام الإضافية بعد الطول والعرض (22) هي توصيت الشاشة مسافة من اليسار ومن الأعلى self.root.title('برنامج إدارة الموظفين') self.root.configure(background="#316df4") self.root.resizable(False, False) title = Label(self.root, text='[بيانات الموظفين]', bg='#316df4', font=('monospace',18), fg='white' ) title.pack(fill='x') # ----------- variable ----------- # -------- variable = البيانات الشخصية -------- self.id_var = StringVar() self.name_var = StringVar() self.mail_var = StringVar() self.id_number_var = StringVar() self.date_birth_var = StringVar() self.gender_var = StringVar() self.social_status_var = StringVar() self.family_var = StringVar() # -------- variable = معلومات الاتصال -------- self.nationality_var = StringVar() self.id_photo_var = StringVar() self.country_var = StringVar() self.governorate_var = StringVar() self.city_var = StringVar() self.phone_var = StringVar() self.skype_var = StringVar() self.telegram_var = StringVar() # ----------- تقسيم لأختيارات علوية ----------- nb = ttk.Notebook(self.root) nb.place(x=900,y=34, width=400, height=460) f1 = Frame(nb, width='500', height='100', bg='#fff') nb.add(f1, text='بيانات شخصية') f2 = Frame(nb, width='500', height='100', bg='#fff') nb.add(f2, text='معلومات الاتصال') # ----------- أدوات التحكم في البيانات الشخصية 1 ----------- # Manage_Frame = Frame(self.root, bg='white') # Manage_Frame.place(x=10,y=190, width=200, height=460) lbl_ID = Label(f1, text='الرقم التسلسلي', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_ID.pack() ID_Entry = Entry(f1, textvariable=self.id_var, bd='2', bg='#05234f', fg='#fff', justify='center') ID_Entry.pack() lbl_name = Label(f1, text='اسم الموظف', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_name.pack() Name_Entry = Entry(f1, textvariable=self.name_var, bd='2', bg='#05234f', fg='#fff', justify='center') Name_Entry.pack() lbl_email = Label(f1, text='البريد الإلكتروني', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_email.pack() Email_Entry = Entry(f1, textvariable=self.mail_var, bd='2', bg='#05234f', fg='#fff', justify='center') Email_Entry.pack() lbl_ID_Number = Label(f1, text='رقم الهوية', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_ID_Number.pack() ID_Number_Entry = Entry(f1, textvariable=self.id_number_var, bd='2', bg='#05234f', fg='#fff', justify='center') ID_Number_Entry.pack() lbl_Date_Birth = Label(f1, text='تاريخ الميلاد', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_Date_Birth.pack() Date_Birth_Entry = Entry(f1, textvariable=self.date_birth_var, bd='2', bg='#05234f', fg='#fff', justify='center') Date_Birth_Entry.pack() lbl_Gender = Label(f1, text='الجنس', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_Gender.pack() combo_Gender = ttk.Combobox( f1, value=('ذكر', 'أنثى'), state='readonly', textvariable=self.gender_var ) combo_Gender.pack() lbl_Social_Status = Label(f1, text='الحالة الاجتماعية', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_Social_Status.pack() combo_Social_Status = ttk.Combobox( f1, value=('أعزب', 'متزوج'), state='readonly', textvariable=self.social_status_var ) combo_Social_Status.pack() lbl_Family_Members = Label(f1, text='عدد أفراد الأسرة', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_Family_Members.pack() Family_Members_Entry = Entry(f1, textvariable=self.family_var, bd='2', bg='#05234f', fg='#fff', justify='center') Family_Members_Entry.pack() # ----------- أدوات التحكم في معلومات الاتصال 2 ----------- # Manage_Frame = Frame(self.root, bg='white') # Manage_Frame.place(x=900, y=190, width=200, height=460) lbl_Nationality = Label(f2, text='الجنسية', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_Nationality.pack() Nationality_Entry = Entry(f2, textvariable=self.nationality_var, bd='2', bg='#05234f', fg='#fff', justify='center') Nationality_Entry.pack() lbl_ID_Photo = Label(f2, text='صورة الهوية', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_ID_Photo.pack() ID_Photo_Entry = Entry(f2, textvariable=self.id_photo_var, bd='2', bg='#05234f', fg='#fff', justify='center') ID_Photo_Entry.pack() lbl_Country = Label(f2, text='الدولة', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_Country.pack() Country_Entry = Entry(f2, textvariable=self.country_var, bd='2', bg='#05234f', fg='#fff', justify='center') Country_Entry.pack() lbl_State = Label(f2, text='الولاية / المحافظة', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_State.pack() State_Entry = Entry(f2, textvariable=self.governorate_var, bd='2', bg='#05234f', fg='#fff', justify='center') State_Entry.pack() lbl_City = Label(f2, text='المدينة', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_City.pack() City_Entry = Entry(f2, textvariable=self.city_var, bd='2', bg='#05234f', fg='#fff', justify='center') City_Entry.pack() lbl_Phone_Number = Label(f2, text='رقم الموبايل', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_Phone_Number.pack() Phone_Number_Entry = Entry(f2, textvariable=self.phone_var, bd='2', bg='#05234f', fg='#fff', justify='center') Phone_Number_Entry.pack() lbl_Skype = Label(f2, text='سكايب', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_Skype.pack() Skype_Entry = Entry(f2, textvariable=self.skype_var, bd='2', bg='#05234f', fg='#fff', justify='center') Skype_Entry.pack() lbl_Telegram = Label(f2, text='تلغرام', bg='#fff', fg='#05234f', font=('monospace', 14)) lbl_Telegram.pack() Telegram_Entry = Entry(f2, textvariable=self.telegram_var, bd='2', bg='#05234f', fg='#fff', justify='center') Telegram_Entry.pack() # ----------- buttons الأزرار ----------- btn_Frame = Frame(self.root, bg="#fff") btn_Frame.place(x=900, y=500, width=400, height=148) title2 = Label(btn_Frame, text='لوحة التحكم', font=('monospace', 16), bg='#316df4', fg='#fff') title2.pack(fill='x') add_btn = Button(btn_Frame, text='إضافة موظف', bg='#05234f', fg='#fff', cursor='plus', command=self.add_student) add_btn.place(x=280, y=50, width=80, height=30) del_btn = Button(btn_Frame, text='حذف موظف', bg='#05234f', fg='#fff', cursor='target') del_btn.place(x=165, y=50, width=80, height=30) update_btn = Button(btn_Frame, text='تعديل بيانات', bg='#05234f', fg='#fff', cursor='circle') update_btn.place(x=50, y=50, width=80, height=30) clear_btn = Button(btn_Frame, text='إفراغ الحقول', bg='#05234f', fg='#fff', cursor='sizing') clear_btn.place(x=280, y=100, width=80, height=30) exit_btn = Button(btn_Frame, text='إغلاق البرنامج', bg='#05234f', fg='#fff', cursor='cross') exit_btn.place(x=165, y=100, width=80, height=30) about_btn = Button(btn_Frame, text='من نحن', bg='#05234f', fg='#fff', cursor='heart', bitmap='info') about_btn.place(x=50, y=100, width=80, height=30) # ----------- search manage البحث ----------- search_Frame = Frame(self.root, bg="#fff") search_Frame.place(x=2, y=35, width=896, height=50) lbl_search = Label(search_Frame, text='البحث', font=('monospace', 16), bg='#fff', fg='#05234f') lbl_search.place(x=830, y=12) combo_search = ttk.Combobox(search_Frame, justify='right') combo_search['value']=('الرقم التسلسلي', 'الاسم', 'الإيميل', 'رقم الهوية', 'الجنس', 'الحالة الاجتماعية', 'المدينة', 'رقم الهاتف', 'المؤهل العلمي', 'الجامعة', 'نوع المهارة', 'المسمى الوظيفي', 'المعرفة المهنية', 'برامج التصميم', 'برامج المونتاج', 'مهارات البرمجة') combo_search.place(x=680, y=14) search_Entry = Entry(search_Frame, bd='2', bg='#05234f', fg='#fff', justify='right') search_Entry.place(x=545, y=14) search_btn = Button(search_Frame, text='بحث', bg='#05234f', fg='#fff', cursor='circle') search_btn.place(x=460, y=10, width=80, height=30) # ----------- dietals عرض النتائج والبيانات ----------- Dietals_Frame = Frame(self.root, bg="#fff") Dietals_Frame.place(x=2, y=88, width=896, height=560) # -------- scroll -------- scroll_x = Scrollbar(Dietals_Frame, orient=HORIZONTAL) scroll_y = Scrollbar(Dietals_Frame, orient=VERTICAL) # -------- treeview -------- self.student_table = ttk.Treeview(Dietals_Frame, columns=('Telegram', 'Skype', 'Phone', 'City', 'Governorate', 'Country', 'ID photo', 'Nationality', 'Family', 'Social Status', 'Gender', 'Date Birth', 'ID Number', 'E-mail', 'Name', 'ID'), xscrollcommand=scroll_x.set, yscrollcommand=scroll_y.set) self.student_table.place(x=20, y=2, width=890, height=540) scroll_x.pack(side=BOTTOM, fill='x') scroll_y.pack(side=LEFT, fill='y') scroll_x.config(command=self.student_table.xview) scroll_y.config(command=self.student_table.yview) self.student_table['show'] = 'headings' self.student_table.heading('Telegram', text='تلغرام') self.student_table.heading('Skype', text='سكايب') self.student_table.heading('Phone', text='رقم الموبايل') self.student_table.heading('City', text='المدينة') self.student_table.heading('Governorate', text='المحافظة') self.student_table.heading('Country', text='الدولة') self.student_table.heading('ID photo', text='صورة الهوية') self.student_table.heading('Nationality', text='الجنسية') self.student_table.heading('Family', text='عدد أفراد الأسرة') self.student_table.heading('Social Status', text='الحالة الاجتماعية') self.student_table.heading('Gender', text='الجنس') self.student_table.heading('Date Birth', text='تاريخ الميلاد') self.student_table.heading('ID Number', text='رقم الهوية') self.student_table.heading('E-mail', text='البريد الإلكتروني') self.student_table.heading('Name', text='الاسم') self.student_table.heading('ID', text='الرقم التسلسلي') # ----------- con + add ----------- self.fetch_all() def add_student(self): con = pymysql.connect( host = 'localhost', user = 'root', password = '', database = 'stud') cur = con.cursor() cur.execute("insert into student values(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",( self.id_var.get(), self.name_var.get(), self.mail_var.get(), self.id_number_var.get(), self.date_birth_var.get(), self.gender_var.get(), self.social_status_var.get(), self.family_var.get(), self.nationality_var.get(), self.id_photo_var.get(), self.country_var.get(), self.governorate_var.get(), self.city_var.get(), self.phone_var.get(), self.skype_var.get(), self.telegram_var.get() )) con.commit() con.close() def fetch_all(self): con = pymysql.connect(host='localhost', user = 'root', password = '', database = 'employ') cur = con.cursor() cur.execute('select * from employees') rows = cur.fetchall() if len (rows) !=0: self.student_table.delete(*self.student_table.get_children) for row in rows: self.student_table.insert("", END, value=row) con.commit() con.close() root = Tk() ob = Employee(root) root.mainloop()
ولكن بعد كتابة دالة جديدة لعرض تلك المدخلات على واجهة البرنامج :
def fetch_all(self): con = pymysql.connect(host='localhost', user = 'root', password = '', database = 'employ') cur = con.cursor() cur.execute('select * from employees') rows = cur.fetchall() if len (rows) !=0: self.student_table.delete(*self.student_table.get_children) for row in rows: self.student_table.insert("", END, value=row) con.commit() con.close()
وعند استدعاء الدالة :
self.fetch_all()
يعطيني الخطأ التالي:
line 560, in fetch_all self.student_table.delete(*self.student_table.get_children) TypeError: tkinter.ttk.Treeview.delete() argument after * must be an iterable, not method
أرجو الإفادة
التعليقات