إنشاء رمز QR باستخدام Python في 5 تعليمات
يتيح لك إنشاء رمز QR باستخدام Python تحويل رابط أو نص إلى صورة يمكنك مشاركتها. ستستخدم في هذا المقال مكتبة Segno، وهي مكتبة Python مخصّصة لرموز QR. يتكوّن المثال من خمس تعليمات: يمكنك تعديل الكود وتشغيله في هذه الصفحة ثم تنزيل الصورة الناتجة.
يحتوي الرمز في المثال الأول على العنوان https://mlwebapp.com/. عند مسحه بهاتف، يسترجع القارئ هذا العنوان. يمكنك استبداله برابطك أو برسالة قصيرة. يُرمَّز المحتوى داخل الصورة نفسها، ولذلك يتطلّب تغييره إنشاء رمز QR جديد.
قبل البدء. تحتاج إلى متصفح حديث واتصال بالإنترنت. تُحمَّل بيئة Python عند الضغط على «تشغيل الكود» للمرة الأولى. لا تحتاج إلى تثبيت Python على جهازك لاستخدام المحرر أدناه.
المحتويات
إنشاء رمز QR باستخدام Python: شغّل المثال
في السطر content = "https://mlwebapp.com/"، غيّر النص الموجود بين علامتي الاقتباس فقط. احتفظ بالعلامتين، ثم اضغط على تشغيل الكود. قد يستغرق التشغيل الأول بعض الوقت، ثم تعيد عمليات التشغيل اللاحقة استخدام بيئة Python التي حُمّلت بالفعل.
تظهر الصورة في قسم «نتيجة التشغيل». ويبيّن سطر المحتوى المقروء من الصورة ما استطاع قارئ مستقل استخراجه فعلًا. قارن هذا النص بما أدخلته قبل تنزيل الملف.
افهم تعليمات Python الخمس
عند إنشاء رمز QR باستخدام Python، ميّز بين ثلاثة أشياء: النص الذي تريد مشاركته، والكائن الذي يمثّل الرمز، وملف الصورة المحفوظ. يوضّح المخطط متى يُنشأ كل منها. افتح شرح كل تعليمة أدناه لتفهم دورها.

1. import segno: إتاحة المكتبة للبرنامج
توفّر المكتبة كودًا قابلًا لإعادة الاستخدام. تسمح التعليمة import هنا باستخدام Segno من خلال الاسم segno. وهي تتيح الوصول إلى دوال المكتبة، لكنها لا تنشئ رمز QR أو صورة بعد.
مكتبة Segno متاحة بالفعل في محرر هذا المقال. إذا نسخت البرنامج إلى بيئة Python أخرى، فيجب أن تكون المكتبة مثبتة فيها أيضًا. تعني الرسالة ModuleNotFoundError أن البيئة لا تجد الوحدة البرمجية؛ تغيير العنوان المراد ترميزه لا يحل هذه المشكلة.
2. content = "...": اختيار المحتوى الذي سيسترجعه القارئ
content اسم متغير. تربط العلامة = هذا الاسم بالسلسلة النصية الموجودة على يمينها. تحدّد علامتا الاقتباس بداية السلسلة ونهايتها داخل البرنامج، ولا تدخلان في الرسالة المرمَّزة.
عند استخدام "https://mlwebapp.com/"، يحتوي الرمز على عنوان ويب. وعند استخدام "Hello from Python"، يحتوي على نص. في الحالة الأولى، لا تتضمّن الصورة نسخة من الموقع؛ يظل فتح الصفحة مرتبطًا بعمل الرابط وتوفّر اتصال على الهاتف.
3. qr = segno.make_qr(...): بناء الرمز في الذاكرة
تدل النقطة في segno.make_qr على دالة تنتمي إلى وحدة Segno. يستقبل الاستدعاء المحتوى المراد ترميزه، ويبني رمز QR قياسيًا، ثم يعيد كائنًا من النوع QRCode. يشير المتغير qr إلى هذا الكائن، ولم يُحفظ أي ملف PNG بعد.
يحدّد الخيار encoding="utf-8" كيفية تمثيل النص، بما فيه الأحرف العربية والأحرف ذات العلامات في اللغات الأخرى. ويطلب eci=True تضمين مؤشر للترميز داخل الرمز. لا تدعم جميع تطبيقات القراءة ECI؛ لذا يفيد التحقق من النص المقروء في هذه الصفحة، ثم تجربة الرمز على هاتفك أيضًا. تشرح وثائق واجهة Segno البرمجية هذين الخيارين.
4. qr.save(...): إنشاء ملف PNG
save دالة مرتبطة بالكائن qr، أي method. تحفظ تمثيلًا لهذا الكائن في ملف اسمه mon-qrcode.png. ويحدّد الامتداد .png تنسيق الصورة هنا. يُنشأ الملف أولًا داخل المتصفح في هذا المحرر، ثم يتيح لك زر التنزيل حفظه على جهازك.
يجعل scale=8 طول ضلع كل وحدة، أي كل مربع صغير في الشبكة، ثمانية بكسلات. ويُبقي border=4 هامشًا أبيض بعرض أربع وحدات في كل جانب. هذان إعدادان مختلفان: تكبير الوحدات يغيّر أبعاد الصورة، والإبقاء على الهامش يحافظ على مساحة خالية حول الرسم.
5. print(...): عرض رسالة تأكيد دون إنشاء الصورة
تكتب print رسالة في قسم «مخرجات Python». تأتي بعد save في هذا المثال. إذا وقع خطأ أثناء الحفظ، يتوقّف البرنامج قبل الوصول إلى هذه الرسالة.
اسم الملف الظاهر في الرسالة نص يختاره المبرمج، ولا يتحكّم في حفظ الصورة. إذا غيّرت الاسم في save، فحدّث الرسالة أيضًا لتظل واضحة.
يشغّل الزر برنامج Python المعروض في المحرر. إذا عدّلت الكود بعد تشغيله، فأعد تشغيله لتحديث النتيجة. يقرأ القارئ المدمج الصورة الناتجة بصورة مستقلة عن رسالة print؛ قارن المحتوى المقروء بما أردت ترميزه.
غيّر محتوى رمز QR وحجم صورته
لإنشاء رمز QR باستخدام Python يحتوي على رسالة، استبدل الرابط بالنص "Hello from Python" ثم شغّل الكود مجددًا. تحقّق من أن النص المقروء من الصورة يطابق الرسالة الجديدة. يمكنك أيضًا تجربة نص يتضمّن أحرفًا ذات علامات، مع الإبقاء على خيارات الترميز.
يحدّد المعامل scale عدد البكسلات المستخدمة لكل وحدة صغيرة. غيّر 8 إلى 12 للحصول على صورة أكبر. يكبّر هذا التعديل الرسم، ولا يغيّر النص المرمَّز.
يحدّد المعامل border عرض الهامش الخالي حول الرمز، مقاسًا بوحدات الشبكة. احتفظ بالقيمة border=4 في هذا المثال؛ تساعد هذه المساحة القارئ على تمييز الرمز من محيطه. تشرح وثائق Segno الخاصة بإخراج الصور الإعدادات والهامش.
رمز QR باستخدام Python: ثلاث تجارب موجّهة
تساعدك هذه التجارب على فهم ما يتغيّر فعلًا عند إنشاء رمز QR باستخدام Python. استعد المثال الأصلي وغيّر شيئًا واحدًا في كل مرة. توقّع النتيجة قبل التشغيل، ثم قارن توقّعك بالمخرجات وبالنص المقروء من الصورة.
غيّر رسالة التأكيد
استبدل التعليمة الأخيرة فقط بـprint("Hello!"). هل ينبغي أن يتغيّر شكل الرمز؟ شغّل الكود، ثم افتح الشرح.
اعرض شرح التجربة الأولى
تصبح المخرجات النصية Hello!. ويبقى المحتوى المقروء https://mlwebapp.com/ لأن المتغير content واستدعاء save لم يتغيّرا. في التشغيل الذي جرى التحقق منه، كانت الصورة المحفوظة مطابقة للأصل؛ عرض رسالة أخرى لا يعيد بناء الرمز.
كبّر الصورة دون تغيير محتواها
استعد المثال، ثم استبدل scale=8 بـscale=12. قارن الأبعاد الظاهرة أسفل الصورة والنص المقروء منها.
اعرض شرح التجربة الثانية
عند استخدام العنوان الأول وإعدادات هذا المقال، تبلغ أبعاد الملفين اللذين جرى التحقق منهما 264 × 264 و396 × 396 بكسلًا على الترتيب. والمحتوى المقروء منهما واحد. يتكوّن ضلع المصفوفة هنا من 25 وحدة؛ ومع هامش من أربع وحدات في كل جانب، يصبح المجموع 33 وحدة. يعطي ضرب 33 في 8 أو في 12 أبعاد ملف PNG. وقد يتطلّب نص آخر مصفوفة بحجم مختلف.

انقل تعليمة الإسناد: لماذا يهم ترتيب الأسطر؟
استعد المثال. أضف content = "Hello from Python" مباشرة بعد السطر الذي يستدعي segno.make_qr، ثم شغّل الكود. هل سيسترجع القارئ الرابط الأول أم الرسالة الجديدة؟
اعرض شرح التجربة الثالثة
يسترجع القارئ الرابط الأول. بُني الكائن qr باستخدام القيمة المتاحة لحظة استدعاء الدالة. ولا تؤدّي إعادة الإسناد إلى content بعد ذلك إلى تغيير هذا الكائن. لترميز الرسالة الجديدة، ضع تعليمة الإسناد قبل استدعاء segno.make_qr، ثم شغّل البرنامج مجددًا. جرى التحقق من هذا السلوك بمقارنة الصور الناتجة.
يمكنك الآن توضيح فرق مفيد: تغيير نص، وإعادة بناء كائن، وحفظ ملف ثلاث عمليات مستقلة. تعتمد آثارها على التعليمات التي تُنفَّذ وترتيب تنفيذها.
نزّل الصورة وتحقّق منها
بعد نجاح التشغيل، اضغط على تنزيل PNG. لا يُحفظ الملف تلقائيًا على جهازك. يمكنك بعد تنزيله إضافته إلى مستند أو ملصق أو عرض تقديمي.
اختبر الصورة بتطبيق لقراءة رموز QR على هاتفك، بالحجم وعلى الوسيط اللذين تنوي استخدامهما. تحقّق من العنوان المقترح قبل مشاركة الرمز. قد يتوقّف الرابط عن العمل إذا حُذفت الصفحة المقصودة أو نُقلت.

عالج الأخطاء الشائعة
- تظهر الرسالة SyntaxError. تحقّق من علامتي الاقتباس والأقواس. يجب أن يبقى النص سلسلة نصية محاطة بعلامتي اقتباس.
- لا تظهر صورة PNG. احتفظ باستدعاء
qr.saveواسم ملف ينتهي بـ.png. لا يعرض هذا المحرر ملفات SVG. - النص المقروء غير صحيح. أعد الخيارين
encoding="utf-8"وeci=True، ثم شغّل الكود مجددًا. تحقّق أيضًا من الهامش والتباين. - يفشل التحميل. تحقّق من اتصالك وأعد المحاولة. يحمّل التشغيل الأول Python، ويتيح زر «إيقاف» مقاطعة عملية جارية.
يعيد زر استعادة المثال الكود الأصلي. ويمكنك نسخ برنامجك قبل تعديله.
ما الذي يبقى داخل المتصفح؟
يعمل الكود الذي تدخله في مساحة معزولة داخل هذا المتصفح. ولا يرسله هذا المحرر إلى WordPress. يُستخدم الاتصال الأول بخدمة jsDelivr لتحميل بيئة Python. يختفي الكود والصور عند إعادة تحميل الصفحة أو إغلاقها؛ نزّل النتيجة التي تريد الاحتفاظ بها.
يعرض المحرر أول ملف PNG يُنشأ في مجلد عمله. ويعالج ثلاثة ملفات كحد أقصى، بحجم لا يتجاوز 2 ميغابايت للصورة و4096 بكسلًا لكل ضلع. يُوقَف أي حساب يستغرق أكثر من عشر ثوانٍ. تجعل هذه الحدود المحرر مناسبًا لمثال صغير داخل المقال.
يتيح رمز QR محتواه لكل من يستطيع قراءته. اختر المعلومات التي تريد إتاحتها.
واصل التدرّب على Python
أنشأت رمز QR باستخدام Python بتغيير متغير، واستدعاء دالة، وحفظ نتيجتها. لاستكشاف تنفيذ الخلايا والمتغيرات المتاحة، افتح مختبر Python للخلايا والذاكرة. تتوفّر مكتبة Segno في محرر هذا المقال، بينما يحتفظ المختبر العام ببيئته الخاصة.
للتوسّع في إنشاء رموز QR القياسية وأنواعها وإعداداتها، راجع وثائق Segno الرسمية. وتشرح وثائق Pyodide كيفية تشغيل Python داخل المتصفح.