مشكلة في python tkinter عند استدعاء دالة لعرض المدخلات على واجهة البرنامج !!
كتبت كود برنامج على 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
أرجو الإفادة
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد
دخول