كتبت كود برنامج على 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
أرجو الإفادة