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

كمال شلبي

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

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

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

أجوبة بواسطة كمال شلبي

  1. بتاريخ 5 دقائق مضت قال Mahmoud Hassan19:

    ممكن ترسل ملف المشروع

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

  2. بتاريخ 18 ساعة قال Mahmoud Hassan19:

    مرحبا
    من الممكن استخدام مكتبة reportlab لإنشاء ملفات PDF بواسطة بايثون وتحويل جدول إلى مستند PDF ثبت المكتبة عن طريق ذاللك الامر
     

    pip install reportlab

    يمكن تحويل جدول الي pdf عن طريق استخدام هذه الكود
     

    from reportlab.lib.pagesizes import letter
    from reportlab.lib import colors
    from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
    
    #    هنا بيانات الجدول 
    data = [
        ["كود المنتج", "اسم المنتج", "السعر", "الكمية"],
        ["001", "منتج 1", "50", "10"],
        ["002", "منتج 2", "30", "15"],
        ["003", "منتج 3", "20", "20"]
    ]
    
    # هنا انشاء اسم ال pdf 
    pdf_filename = "جدول.pdf"
    document = SimpleDocTemplate(pdf_filename, pagesize=letter)
    
    #اعداد ال style الخاص بالجدول 
    table = Table(data)
    table.setStyle(TableStyle([
        ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
        ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
        ('FONTNAME', (0, 0), (-1, 0), 'Arabic'),
        ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
        ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
        ('GRID', (0, 0), (-1, -1), 1, colors.black),
    ]))
    
    # اضافة الجدول الي مستند pdf
    document.build([table])

    بالنسبة للارقام العربية من المككن استخدام مكتبة arabicreshaper,  bidi عن طريق تثبيتهم
     

    pip install arabic-reshaper
    pip install python-bidi

    بعد ذاللك في اعدادات الجدول استخدم هذا الكود
     

    from arabic_reshaper import reshape
    from bidi.algorithm import get_display
    
    reshaped_data = [[get_display(reshape(cell)) for cell in row] for row in data]  # هنا لتحويل كل cell من الجدول والي االغة العربيى 
    table = Table(reshaped_data)

    اذن الكود ككل يحب ان يكون هكذا
     

    from reportlab.lib.pagesizes import letter
    from reportlab.lib import colors
    from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
    from arabic_reshaper import reshape
    from bidi.algorithm import get_display
    
    # بيانات الجدول
    data = [
        ["كود المنتج", "اسم المنتج", "السعر", "الكمية"],
        ["001", "منتج 1", "50", "10"],
        ["002", "منتج 2", "30", "15"],
        ["003", "منتج 3", "20", "20"]
    ]
    
    # إعداد مستند PDF
    pdf_filename = "جدول.pdf"
    document = SimpleDocTemplate(pdf_filename, pagesize=letter)
    
    # تشكيل البيانات للعرض الصحيح للنصوص العربية
    reshaped_data = [[get_display(reshape(cell)) for cell in row] for row in data]
    
    # إعداد الجدول
    table = Table(reshaped_data)
    table.setStyle(TableStyle([
        ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
        ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
        ('FONTNAME', (0, 0), (-1, 0), 'Arabic'),
        ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
        ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
        ('GRID', (0, 0), (-1, -1), 1, colors.black),
    ]))
    
    # إضافة الجدول إلى المستند
    document.build([table])

     

     

    بارك الله فيك وزادك علما وفضلا
    بعد أن نسخت الكود الذي تكرمت بارساله ظهرت لي سلسلة الأخطاء التالية علما بأن المكتبات المطلوبة مثبة بواسطة الpip. ههلا أرشدتني إلى خطأي؟ وشكرا  لك
    C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\python.exe H:\sqlite\pdf5h.py 
    Traceback (most recent call last):
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 697, in getFont
        return _fonts[fontName]
               ~~~~~~^^^^^^^^^^
    KeyError: 'Arabic'

     

    During handling of the above exception, another exception occurred:

     

    Traceback (most recent call last):
      File "H:\sqlite\pdf5h.py", line 35, in <module>
        document.build([table])
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\doctemplate.py", line 1317, in build
        BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\doctemplate.py", line 1082, in build
        self.handle_flowable(flowables)
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\doctemplate.py", line 931, in handle_flowable
        if frame.add(f, canv, trySplit=self.allowSplitting):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\frames.py", line 158, in _add
        w, h = flowable.wrap(aW, h)
               ^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 1346, in wrap
        self._calc(availWidth, availHeight)
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 735, in _calc
        self._calc_width(availWidth,W=W)
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 542, in _calc_width
        t = self._elementWidth(v,s)
            ^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 608, in _elementWidth
        return max([stringWidth(x,fontName,fontSize) for x in v])
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\platypus\tables.py", line 608, in <listcomp>
        return max([stringWidth(x,fontName,fontSize) for x in v])
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 733, in stringWidth
        return getFont(fontName).stringWidth(text, fontSize, encoding=encoding)
               ^^^^^^^^^^^^^^^^^
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 699, in getFont
        return findFontAndRegister(fontName)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 681, in findFontAndRegister
        face = getTypeFace(fontName)
               ^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\k.shalabi\AppData\Local\Programs\Python\Python311\Lib\site-packages\reportlab\pdfbase\pdfmetrics.py", line 638, in getTypeFace
        return _typefaces[faceName]
               ~~~~~~~~~~^^^^^^^^^^
    KeyError: 'Arabic'

     

    Process finished with exit code 1

     

  3. 1. كيف يمكنني إنشاء ملفات pdf بواسطة بايثون بحيث تكون على شكل جدول مثلا

    كود المنتج  اسم المنتج السعر الكمية 

    يوجد ملف مرفق فيه الخانات كبيرة جدا فأريد تصغيرها لحجم مناسب

    2. أريد استخدام الأرقام العربية  بدلا من الأرقام اللاتينية في العديد من البرامج. كيف ذلك؟ 

    في الملف المرفق مثال.

    وشكرا لكم

    mydoc.pdf

    • أعجبني 2
  4. import tkinter as tk

    def cb(event): label['text'] = str(event) + '\n' + str(lb.curselection())

    root = tk.Tk()

    var = tk.StringVar(value=dir(tk)) label = tk.Label(root) label.grid() lb = tk.Listbox(root, listvariable=var, selectmode='extended') lb.grid() lb.bind('<<ListboxSelect>>', cb) #print(lb.bind('<<ListboxSelect>>', cb))

    x = lb.curselection()

    print(x)

    root.mainloop()

    ما أريده بالضبط أنه من خلال الزر الأيسر للماوس عندما يختار المستخدم قيمة من القائمة listboxمثلا فهذه القيمة أريدها في متغير ثم أتصرف في هذا المتغير كما في المصال السابق والذي لم ينجح

  5. بتاريخ 44 دقائق مضت قال Kais Hasan:

    من أجل ال listbox يمكنك الحصول على العناصر المحددة على شكل tuple باستعمال التابع curselection()، و الذي يعيد أرقام الأسطر التي تم اختيارها، من ثم يمكنك استعمال رقم السطر لمعرفة القيمة (حيث يجب أن يكون لديك ما يحويه ال listbox).

    من أجل ال comboBox يمكنك الحصول على القيمة الحالية باستعمال الدالة get.

    ممكن مثال بسيط؟

    أنا جديد في البايثون وبتعلم من خلال النت ودراسة أكواد جاهزة وأبني عليها

    بتاريخ 22 ساعة قال عمر قره محمد:

    بحسب التوثيق الرسمي يمكنك الوصول إلى العنصر كالتالي :

    comboBox1.Items[i].ToString()

    حيث ان الـ i هو الـ index الخاص بالعنصر،

    والـ comboBox1 هو الـ comboBox الخاص بك.

    يمكنك الاطلاع على التوثيق الرسمي من هنا

     

    ليست للبايثون

    • أعجبني 1
  6. كيف يمكنني معرفة قيمة عنصر من listbox او combobox عندما يختار المستعمل هذا العنصر. أريد استعمال هذه القيمة في عمليات حسابية مثلا إو إدخالها على جدول في قاعدة البيانات...الخ

    لا أريد استعمال دوال functions بل الاستعمال المباشر مثل x=listbox.item أو ماشابه

×
×
  • أضف...