اذهب إلى المحتوى

Ahmed Ahmed64

الأعضاء
  • المساهمات

    222
  • تاريخ الانضمام

  • تاريخ آخر زيارة

أجوبة بواسطة Ahmed Ahmed64

  1. import openpyxl
    wb = openpyxl.load_workbook("test.xlsx")
    ws=wb['ورقة1']
    
    if ws['E2'].value >50:
       ws['G2'] = ws['E2'].value
    elif  ws['F2'].value >50: 
        ws['G2'] = ws['F2'].value
    elif  ws['F3'].value >50: 
        ws['G2'] = ws['F3'] .value
     
    else:
       ws['L2'] = ws['E2'].value
    
    wb.save("test.xlsx")

    تعديل الكود حيث يمر على كل إسم وينفذ كما نفذ هذا الكود 

    image.png.97eb3516b08acbd05c773ac9eefbe5b6.png

  2. from openpyxl import *
    from openpyxl.styles import Font
    from openpyxl.styles import Border, Side
    from openpyxl.styles import PatternFill
    from tkinter import *
    root = Tk() 
    root.configure(background='light green') 
    root.title("registration form") 
    root.geometry("400x300") 
    
    wb = load_workbook('excel2.xlsx') 
    sheet = wb.active 
                                    
    sheet.column_dimensions['A'].width = 30
    sheet.column_dimensions['B'].width = 15
    sheet.column_dimensions['C'].width = 10
    sheet.column_dimensions['D'].width = 10
    sheet.column_dimensions['E'].width = 10
    
    
    current_row = sheet.max_row 
    current_column = sheet.max_column  
    
    sheet.cell(row=1, column=1).value = "الإسم"
    sheet.cell(row=1, column=2).value = "رقم الجلوس"
    sheet.cell(row=1, column=3).value = "النتيجة"
    sheet.cell(row=1, column=4).value = "أعمال السنة"
    sheet.cell(row=1, column=5).value = "النهائي"
    
    
                                         
    def insert(): 
        sheet.cell(row=current_row + 1, column=1).value = Entry1.get()
        sheet.cell(row=current_row + 1, column=2).value = Entry2.get()
        sheet.cell(row=current_row + 1, column=3).value = ("دور أول")
        sheet.cell(row=current_row + 2, column=3).value = ("دور ثاني")
        sheet.cell(row=current_row + 1, column=4).value = Entry3.get() 
        sheet.cell(row=current_row + 1, column=5).value = Entry4.get() 
        
          
        wb.save('excel10.xlsx') 
    
    Label1 = Label(root, text="إسم الطالب", bg="light green").grid(row=1, column=0)
    Label2 = Label(root, text="رقم الجلوس", bg="light green").grid(row=2, column=0)
    Label3 = Label(root, text="أعمال السنة", bg="light green").grid(row=3, column=0)
    Label4 = Label(root, text="النهائي", bg="light green").grid(row=4, column=0)
    
      
    Entry1 = Entry(root)
    Entry1.grid(row=1, column=1, ipadx="100")
    Entry2 = Entry(root)
    Entry2.grid(row=2, column=1, ipadx="100")
    Entry3 = Entry(root)
    Entry3.grid(row=3, column=1, ipadx="100")
    Entry4 = Entry(root)
    Entry4.grid(row=4, column=1, ipadx="100")
    
    
    submit = Button(root, text="Submit", fg="Black",bg="Red", command=insert).grid(row=8, column=1) 
      
    root.mainloop()

    هل يمكن تصحيح الكود حتى أصل لهذه النتيجة

    image.png.974c367726a230f63b6220d8c05fe3d9.png

    • أعجبني 1
  3. بتاريخ 2 دقائق مضت قال Kais Hasan:

    العفو، هذا واجبنا.

    إن المكون Entry بشكل عام يستعمل لإدخال نص و ليس لعرض نص، في حال كنت متأكداً بأنه لن يتم إدخال نص يمكن القيام بذلك كما يلي:

    Entry1.insert(0, str(...))

    يجب وضع ما تريده بدلاً من الثلاث نقاط.

    في حال كان من الممكن أن يتم إدخال نص و لكن تريد محي النص المدخل و إظهار ما تريده فقط يمكن القيام بذلك كما يلي:

    n = len(Entry1.get())
    Entry1.delete(0, n)
    Entry1.insert(0, str(...))

    و لكن أنصحك باستعمال المكون label في حال كنت تريد عرض شيء فقط بدون إدخال.

    أشكرك أخي فعلا هذا ماقمت به الأن قبل الحصول على الجواب من حضرتك حيث أني إستخدمت label لذلك

    تحياتي أخي ( بارك الله فيك ) وزادك الله علماً

    طلب لو سمحت لو تدلني على كورس لكيفية طباعة ورقة تقرير أي أني أريد أن أستخرج تقرير مطبوع

    • شكرًا 1
  4. بتاريخ 14 دقائق مضت قال Kais Hasan:

    عفوا و لكن هل يمكنك توضيح الخطأ عبر لقطة شاشة، او تحديد تماما ما الذي يحدث.

    أخي الحبيب أشكرك جزيل الشكر والإمتنان على الوقت والجهذ المبذول منك لكي توصل المعلومة ولك مني كل التقدير والإحترام

    أخي الأن وصلت إلى المعلومة التي كنت أعجز عن القيام بها والأن وقفت عند جزئية بسيطة ولا أدري الخطأ أين

    المطلوب الأن بعد التحصل على قيمة المتغير A1 تمريرها إلى Entry

    def callbackFunc(event):
        value1=Combo1.get()
        A1= d[int(value1)]
        Entry1.config(text=A1)

     

    • أعجبني 1
  5. بتاريخ 4 دقائق مضت قال Kais Hasan:

    إن القيم تصبح سلاسل نصية في ال combo box لذلك كل ما عليك هو تحويلها إلى رقم كما يلي:

    d[int(value1)]

    عند محاولة الطباعة لم يظهر لي شي ؟

    print= d[int(value1)]

     

    بتاريخ 7 دقائق مضت قال Ahmed Ahmed:

    عند محاولة الطباعة لم يظهر لي شي ؟

    print= d[int(value1)]

     

    رائع جداً 

    مشكلة في تمرير القيمة (أين الخطأ )

    def callbackFunc(event):
        value1=Combo1.get()
        A1= d[int(value1)]
        Entry1.text=A1

     

    • أعجبني 1
  6. def callbackFunc(event):
        value1=Combo1.get()
        print (d[value1])
        
    numbers = [row["Employee-number"] for row in employee.values()] 
    names = [row["Employee-name"] for row in employee.values()] 
    
    d = {k:v for (k, v) in zip(numbers, names)}
    
    Combo1=ttk.Combobox(FORM_A,width=50,values=numbers)
    Combo1.bind("<<ComboboxSelected>>", callbackFunc)
    Combo1.pack(pady=30)

    يبد أن لدي خطأ هنا النتيجة تظهر لي قيمة نفس العمود بوجود خطأ كالتالي

    image.png.161844e5d7e7137bc99363856052f2a4.png

    • أعجبني 1
  7. def callbackFunc(event):
        value1=Combo1.get()
        print(value1)
    
    Combo1=ttk.Combobox(FORM_A,width=50,values=numbers)
    Combo1.bind("<<ComboboxSelected>>", callbackFunc)
    Combo1.pack(pady=30)

    النتيجة تظهر القيمة المختارة من Combo1 

    أين الخطأ .... أريد إظهار القيمة المقابلة للقيمة المختارة من القاموس للمتغبر الذي أعطيته إسم d

    d = {k:v for (k, v) in zip(numbers, names)} 

    • أعجبني 1
  8. numbers = [row["Employee-number"] for row in employee.values()] 
    names = [row["Employee-name"] for row in employee.values()] 
    d = {k:v for (k, v) in zip(numbers, names)}
    
    

    هل ماقمت به الأن صححيح ,, إذا كان ذلك كيف أتعامل مع الكومبوبكس في ذلك أم ينقص أم ما ,, هل حان الأمر الأن لأتعامل مع الكود التالي 

    combo.bind("<<ComboboxSelected>>", callbackFunc)

    مثال هل يعمل الكود السابق بهكذا طريقة

    def callbackFunc(event😞

        print("ok")         

    Combo1.bind("<<ComboboxSelected>>", callbackFunc)

    • أعجبني 1
  9. ذكرت أني أحتاج أن أقوم بإنشاء قاموس إضافي مفاتيحة القيم من ال combo box

    حاولت برمجة هذا الكود ولاكن لم أستفد منه 

    namme= {key:val for key,val in employee.items()}

    الرجاء توجيهي خطوة بخطوة  لكي أستوعب المطلوب بشكل أفضل

    ما المطلوب أولا

    • أعجبني 1
  10. أرجو المساعدة كيف أستطيع عند إختيار قيمة من أداة combo أن تظهر القيمة المقابلة لها من العمود الثاني أو على سبيل المثال العمود الثالت حيث أضهر النتيحة في مربع النص

    from tkinter import *
    
    from tkinter import ttk
    
    from openpyxl.workbook import workbook
    
    from openpyxl import load_workbook
    
    
    
    FORM_A=Tk()
    
    FORM_A.geometry('800x500')
    
    
    
    w_book1=load_workbook('Employee.xlsx')
    
    sheet_1=w_book1.active
    
    
    
    employee={}
    
    i=1
    
    for row in sheet_1.iter_rows(min_row=1, max_row=9,min_col=1,max_col=5,values_only=True):
    
        id=i
    
        st={"Employee-number":row[0],"Employee-name":row[1],"employee-phone":row[2],"Employee-email":row[3],}
    
        i+=1
    
        employee[id]=st
    
    numbers = [row["Employee-number"] for row in employee.values()]
    
    names = [row["Employee-name"] for row in employee.values()]
    
    Combo1=ttk.Combobox(FORM_A,width=50,values=numbers).pack(pady=30)
    
    Combo2=ttk.Combobox(FORM_A,width=50,values=names).pack(pady=30)
    
    print(employee)
    
    
    
    # هنا أريد إدراج قيمة العود الثاني المقابلة للعمود الأول عند الإختيار من أداة الكومبوبكس
    
    Entry1=Entry(FORM_A,width=50).pack(pady=30)
    
    
    
    
    FORM_A.mainloop()

    Employee.xlsx

    • أعجبني 1
  11. رائع أخي Kais Hasan أشكرك جزيل الشكر :,,,, لقد قمت بتطبيق الكود وتحصلت على النتيجة التي أردتها داخل أداة combo

    أرجو من حضرتك لو تساعدني كيف أستطيع عند إختيار قيمة من أداة combo أن تظهر القيمة المقابلة لها من العمود الثاني أو على سبيل المثال العمود الثالت حيث أضهر النتيحة في مربع النص

    from tkinter import *

    from tkinter import ttk

    from openpyxl.workbook import workbook

    from openpyxl import load_workbook

     

    FORM_A=Tk()

    FORM_A.geometry('800x500')

     

    w_book1=load_workbook('Employee.xlsx')

    sheet_1=w_book1.active

     

    employee={}

    i=1

    for row in sheet_1.iter_rows(min_row=1, max_row=9,min_col=1,max_col=5,values_only=True):

        id=i

        st={"Employee-number":row[0],"Employee-name":row[1],"employee-phone":row[2],"Employee-email":row[3],}

        i+=1

        employee[id]=st

    numbers = [row["Employee-number"] for row in employee.values()]

    names = [row["Employee-name"] for row in employee.values()]

    Combo1=ttk.Combobox(FORM_A,width=50,values=numbers).pack(pady=30)

    Combo2=ttk.Combobox(FORM_A,width=50,values=names).pack(pady=30)

    print(employee)

     

    # هنا أريد إدراج قيمة العود الثاني المقابلة للعمود الأول عند الإختيار من أداة الكومبوبكس

    Entry1=Entry(FORM_A,width=50).pack(pady=30)


     

    FORM_A.mainloop()

  12. مساعدة في إدراج قيم من القاموس إلى أداة Combobox

    مساعدة على هذا الكود

    from tkinter import *
    
    from tkinter import ttk
    
    from openpyxl.workbook import workbook
    
    from openpyxl import load_workbook
    
    # قمت بإنشاء نافذه
    
    FORM_A=Tk()
    
    FORM_A.geometry('800x500')
    
    # قمت بفتح ملف الأكسل و ورقة العمل
    
    w_book1=load_workbook('Employee.xlsx')
    
    sheet_1=w_book1.active
    
    
    
    # قمت بتحويل الحدول بورقة العمل إلى قاموس
    
    employee={}
    
    i=1
    
    for row in sheet_1.iter_rows(min_row=1, max_row=9,min_col=1,max_col=5,values_only=True):
    
        id=i
    
        st={"Employee-number":row[0],"Employee-name":row[1],"employee-phone":row[2],"Employee-email":row[3],}
    
        i+=1
    
        employee[id]=st
    
    print(employee)
    
    
    
    # هنا أريد إدراج قيم العود الأول
    
    Combo1=ttk.Combobox(FORM_A,width=50).pack(pady=30)
    
    
    
    # هنا أريد إدراج قيمة العود الثاني المقابلة للعمود الأول عند الإختيار من أداة الكومبوبكس
    
    Entry1=Entry(FORM_A,width=50).pack(pady=30)
    
    
    
    FORM_A.mainloop()

    Employee.rar

    • أعجبني 1
  13. أخي لقد طرحت سؤالي بعد تجريب الكود وهذا ما ظهر لدي وهوا رقم الخلية وليس القيمة الموجودة بالخلية

    أرجو تبسيط الكود أكثر أو طريقة أخرى لذلك

    from tkinter import *
    from tkinter import ttk
    from openpyxl.workbook import workbook
    from openpyxl import load_workbook

    form_A=Tk()
    form_A.geometry('500x500')

    wb=load_workbook('2003-2004.xlsx')
    ws=wb.active

    class KeyValueCombobox(ttk.Combobox):

        def __init__(self, master=None, cnf={}, **options):

            self.dict = None

            if 'values' in options:
                if isinstance(options.get('values'), dict):
                    self.dict = options.get('values')
                    options['values'] = sorted(self.dict.keys())

         
            ttk.Combobox.__init__(self, **options)

        
        def get(self):                              
            if self.dict:
                return self.dict[ttk.Combobox.get(self)]
            else:
                return ttk.Combobox.get(self)

        def get_key(self):
            return ttk.Combobox.get(self)

        def get_value(self):                              
            return self.get()
    colum_A = ws['A']
    items = {}
    for key, cell in enumerate(colum_A):
        items[str(key)] = str(cell.value)
    Combo1= KeyValueCombobox(form_A,values= items)
    def onSelect(event):
        cell_b = ws[f'B{Combo1.get_key()}']
        print(cell_b.value)
        
    Combo1.bind('<<ComboboxSelected>>', onSelect)
    Combo1.pack(pady=30)

    form_A.mainloop()

    2003-2004.xlsx

  14. أشكرك جزيل الشكر أخي < مسعود زاهي > بارك الله فيك على الإجابة.

    أخي مسعود أطمع في مساعدة أخرى وقد عجزت عن تنفيذها 

    ماذا لو كان لديا عمود أخر على سبيل المثال العمود B وأريد أن أجلب قيمة معينه من هذا العمود بناءا على القيمة التي تقابلها من العمود A  وذلك تكمله للمثال السابق عن الأختيار من combobox حيث أريد عرض النتيجة في مربع النص.

    • أعجبني 1
  15. بتاريخ منذ ساعة مضت قال Ahmed Ahmed:

    السلام عليكم

     

    كيف أستطيع جلب بيانات عمود معين من ملف إكسل إلى أداة combobox بلغة البايثون

    grab columns into combobox py python

    المكتبات المستخدمة  tkinter  ,  openpyxl

    أرجو التوضيح ولو بمثال عملي

    أرجو تصحيح الكود

    from tkinter import *

    from tkinter import ttk

    from openpyxl.workbook import workbook

    from openpyxl import load_workbook

    form_A=Tk()

    form_A.geometry('500x500')

    wb=load_workbook('2003-2004.xlsx')

    ws=wb.active

    colum_A = ws['A']

    Combo1=ttk.Combobox(form_A,value=column_A)

    Combo1.pack(pady=30)

    form_A.mainloop()

    • أعجبني 1
×
×
  • أضف...