ابحث في المدونة

الخميس، 26 مارس 2020

للفائدة: أضع لكم الكود المصدري source code لأداة qr generator المكتوبة بلغة البايثون

تمت كتابة هذه الأداة لتعمل على نظام التشغيل ويندوز , وهي أداة بسيطة تمكننا من الحصول على رمز qr code للروابط التي نقوم بإدخالها
ويتم حفظ الناتج على شكل صورة بامتداد png مما يسهل تشغيلها في معظم المنصات والأجهزة.
الأداة مزودة بواجهة رسومية graphical user interface مبسطة تحتوي على مربع نصي text box لإدخال النص المراد إجراء عملية الحصول على qr code له , بالإضافة إلى زر لاستخراج ال qr code
وقد تم استخدام لغة البايثون لبرمجة الأداة.
ومن أجل الفائدة ؛ أحببت وضع الكود المصدري ليستفيد منه الجميع.

الملحقات الخارجية

-        مكتبة wx لإنشاء واجهات المستخدم

-        تنزيل المكتبة:
-        افتح موجه الأوامر cmd واكتب الكود التالي
-        Pip install wx python
نفذ الأمر بالضغط على مفتاح الدخول enter وانتظر حتى يتم تنزيل المكتبة وتثبيتها في بيئة بايثون الخاصة بك
-        مكتبة pyqrcode لإنشاء كائنات qr code
-        تنزيل المكتبة:
-        افتح موجه الأوامر cmd واكتب الكود التالي
-        Pip install pyqrcode
-        نفذ الأمر بالضغط على مفتاح الدخول enter وانتظر حتى يتم تنزيل المكتبة وتثبيتها في بيئة بايثون الخاصة بك
-        مكتبة pypng للتعامل مع الصور التي بصيغة png
-        تنزيل المكتبة:
-        افتح موجه الأوامر cmd واكتب الكود التالي
-        Pip install pypng
-        نفذ الأمر بالضغط على مفتاح الدخول enter وانتظر حتى يتم تنزيل المكتبة وتثبيتها في بيئة بايثون الخاصة بك

الكود:


# qr generator.py

# importing modules
import pyqrcode
import wx
import datetime


# define a function that generates the picture's default name based on the date and time
def file_name_create():
 # create a date and time object
 obj = datetime.datetime.now()
 # extracting needed data from datetime object
 year = str(obj.year)
 mon = obj.month
 day = obj.day
 hour = str(obj.hour)
 min = str(obj.minute)
 sec = str(obj.second)
 # formatting the month variable
 if mon <10:
  mon = "0"+str(mon)
 else:
  mon = str(mon)
 #formatting the day variable
 if day <10:
  day = "0"+str(day)
 else:
  day = str(day)
 # formatting and combining data to a new variable
 name = "{}-{}-{}_{},{},{}".format(year,mon,day,hour,min,sec)
 return name

# the main program's class
class main(wx.Frame):
 def __init__(self):
  # inicializing the app window
  wx.Frame.__init__(self,parent=None,title="qr generator",name="qr generator",size=(350,300))
  # centring the window
  self.Centre()
  # adding the controls containor
  p = wx.Panel(self)
  # creating the auto sizer for window controls which adjusts the location and size of the controls based on screen size
  sizer = wx.BoxSizer(wx.HORIZONTAL)
  # create controls
  self.edit = wx.TextCtrl(p,-1,value="",name="الرابط:")
  generate = wx.Button(p,-1,label="الحصول على qr code ")
  # binding the generate button to the event handler. this process makes the program to call a function when the user clicks the button
  generate.Bind(wx.EVT_BUTTON,self.onGenerate)
  # add the controls above to the sizer
  sizer.Add(self.edit,1,wx.EXPAND|wx.ALL,10)
  sizer.Add(generate,1,wx.EXPAND|wx.ALL,10)
  # setting the default sizer for the window
  self.SetSizer(sizer)
  # show the window
  self.Show()
 # creating the combined function with the generate button
 def onGenerate(self,event):
  # check the text box content
  if self.edit.GetValue() == "":
   # show a warning message box if the text box is empty
   wx.MessageBox("يُرجى إدخال الرابط أولًا",self.GetTitle(),wx.ICON_WARNING,parent=self)
   # refocusing on the text box
   self.SetFocus(self.edit)
  else:
   # get the text box's data and create the qr code object
   qr = pyqrcode.create(self.edit.GetValue())
   # show the file save dialog
   path = wx.SaveFileSelector(" ",".png","qr_"+file_name_create(),self)
   # save the png file on the retreaved path from the dialog
   qr.png(path,scale=8)
   # impty the text box
   self.edit.Value = ""

#running the program
app = wx.App()
main()
app.MainLoop()



لتحميل الأداة اضغط هنا
ولتحميل ال source code اضغط هنا

أطيب التحايا

هناك 8 تعليقات:

  1. السلام عليكم مشكور أخي الكريم
    لو ممكن تبعث لي رابط المحرر الخاص بلغة بايثون وكيفية تثبيته

    ردحذف
    الردود
    1. وعليكم السلام ورحمة الله وبركاته
      أهلًا وسهلًا بك أخي الفاضل
      بإمكانك استخدام أي محرر تشاء لكتابة أكواد البايثون
      حتى لو عندك فيجوال ستوديو تقدر تستخدمه لبرمجة بايثون
      أنا بعطيك رابط بيئة البايثون الي تثبته على جهازك وبعدين عاد أنت تقدر تستخدم المحرر الي تريد
      https://www.python.org/ftp/python/3.7.4/python-3.7.4.exe

      حذف
  2. أشكرك أخي الكريم على المساعدة
    عندما حاولت تثبيت المكتبة الخاصة بتحويل ملفات البايثون إلى ملفات تنفيذية
    .exe
    وعندما كتبت الأمر الخاص بتثبيت المكتبة في الcmd أظهر لي
    رسالة مفادها أنني أستخدم اصدار غير حديث من
    pip
    كيف أقوم بتحديث هذا الأخير
    والرسالة هي كالتالي :
    C:\Windows\System32>pip install pyinstaller
    Collecting pyinstaller
    Collecting pywin32-ctypes>=0.2.0 (from pyinstaller)
    Using cached https://files.pythonhosted.org/packages/9e/4b/3ab2720f1fa4b4bc924ef1932b842edf10007e4547ea8157b0b9fc78599a/pywin32_ctypes-0.2.0-py2.py3-none-any.whl
    Collecting altgraph (from pyinstaller)
    Using cached https://files.pythonhosted.org/packages/ee/3d/bfca21174b162f6ce674953f1b7a640c1498357fa6184776029557c25399/altgraph-0.17-py2.py3-none-any.whl
    Collecting pefile>=2017.8.1 (from pyinstaller)
    Using cached https://files.pythonhosted.org/packages/36/58/acf7f35859d541985f0a6ea3c34baaefbfaee23642cf11e85fe36453ae77/pefile-2019.4.18.tar.gz
    Requirement already satisfied: setuptools in c:\program files (x86)\python37-32\lib\site-packages (from pyinstaller) (40.8.0)
    Collecting future (from pefile>=2017.8.1->pyinstaller)
    Using cached https://files.pythonhosted.org/packages/45/0b/38b06fd9b92dc2b68d58b75f900e97884c45bedd2ff83203d933cf5851c9/future-0.18.2.tar.gz
    Installing collected packages: pywin32-ctypes, altgraph, future, pefile, pyinstaller
    Could not install packages due to an EnvironmentError: [WinError 5] Access is denied: 'c:\\program files (x86)\\python37-32\\Lib\\site-packages\\pywin32_ctypes-0.2.0.dist-info'
    Consider using the `--user` option or check the permissions.

    You are using pip version 19.0.3, however version 20.0.2 is available.
    You should consider upgrading via the 'python -m pip install --upgrade pip' command.

    C:\Windows\System32>

    ردحذف
    الردود
    1. أهلًا بك أخي الفاضل.

      ليس من الضرورة أن تكون المشكلة بسبب أن إصدار pip قديم
      لكن على أي حال طريقة تحديث pip تكون كالتالي
      1. اكتب في قائمة ابدأ كلمة cmd واضغط على الأيقونة بزر الفأرة الأيمن
      2. اختر تشغيل كمسؤول run as administrator
      3. اكتب الكود التالي
      pip install --upgrade pip
      4. نفذ الكود بالضغط على زر الإدخال enter


      إن شاء الله تنحل معك المشكلة بهذه الطريقة
      ولو ما نفع جرب تثبت مكتبة pyinstaller من بكتابة الكود في ال cmd المشغل كمسؤول

      حذف
  3. للأسف أخي الكريم
    هذه هي الرسالة التي ظهرت لي عندما كتبت الأمر الخاص بتحديث Pip
    مع العلم بأنني قمت بتحديث البايثون من الاصدار 3.7.4 وهو لحضرتك وضعته لي
    إلى الاصدار الأخير 3.8.2
    ولم يشتغل

    Microsoft Windows [Version 10.0.18363.720]
    (c) 2019 Microsoft Corporation. All rights reserved.

    C:\Windows\System32>pip install --upgrade pip
    Collecting pip
    Downloading https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl (1.4MB)
    |████████████████████████████████| 1.4MB 285kB/s
    Installing collected packages: pip
    Found existing installation: pip 19.2.3
    Uninstalling pip-19.2.3:
    ERROR: Could not install packages due to an EnvironmentError: [WinError 5] Access is denied: 'c:\\program files (x86)\\python38-32\\lib\\site-packages\\pip-19.2.3.dist-info\\entry_points.txt'
    Consider using the `--user` option or check the permissions.

    WARNING: You are using pip version 19.2.3, however version 20.0.2 is available.
    You should consider upgrading via the 'python -m pip install --upgrade pip' command.

    C:\Windows\System32>

    ردحذف
    الردود
    1. أخي هل شغلت ال cmd بصلاحيات المسؤول ؟

      حذف
  4. ولقد قمت بمحاولة لتحويل ملف بصيغة py
    بعض أن وضعت فيه كود بسيط
    وهو
    print "Hello Guys"?
    وكانت هذه هي النتيجة مع الأسف


    C:\Windows\system32>pyinstaller "C:\Users\GoMan\Documents\test.py"
    115 INFO: PyInstaller: 3.6
    115 INFO: Python: 3.8.2
    115 INFO: Platform: Windows-10-10.0.18362-SP0
    115 INFO: wrote C:\Windows\system32\test.spec
    115 INFO: UPX is not available.
    115 INFO: Extending PYTHONPATH with paths
    ['C:\\Users\\GoMan\\Documents', 'C:\\Windows\\system32']
    115 INFO: checking Analysis
    115 INFO: Building Analysis because Analysis-00.toc is non existent
    115 INFO: Initializing module dependency graph...
    130 INFO: Caching module graph hooks...
    146 INFO: Analyzing base_library.zip ...
    4631 INFO: Processing pre-find module path hook distutils
    4637 INFO: distutils: retargeting to non-venv dir 'c:\\program files (x86)\\python38-32\\lib'
    10697 INFO: Caching module dependency graph...
    10982 INFO: running Analysis Analysis-00.toc
    10987 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
    required by c:\program files (x86)\python38-32\python.exe
    11142 INFO: Analyzing C:\Users\GoMan\Documents\test.py

    Syntax error in C:\Users\GoMan\Documents\test.py
    File "C:\Users\GoMan\Documents\test.py", line 1
    print("Hello Guys")?
    ^
    SyntaxError: invalid syntax


    C:\Windows\system32>

    ردحذف
  5. نعم لقد شغلته كمسؤول

    ردحذف

قل شيئًا