إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

الكتابة بالعربية في PyGame

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [مشكلة] الكتابة بالعربية في PyGame

    السلام عليكم
    واجهتني مشكلة الكتابة بالعربية في PyGame و لم أتمكن من حلها، بحثت عن كتابة رموز Unicode لكن لم تنجح طريقة اضافة u قبل النص
    مثلا:
    كود:
    mytxt = u"النقاط"
    font = pygame.font.Font(None, 36) 
    score_txt = font.render(mytxt,1,(255,255,255))
    حيث None هي اسم ملف الخط و هنا أنا لم استعمل ملف خارجي بل نوع الخط الذي ياتي مع PyGame،


    و بعد استعمال أحد الخطوط العربية حصلت على هذه النتيجة



    مع هذا الكود
    كود:
    mytxt = u"النقاط"
    font = pygame.font.Font("KacstOne.ttf", 36)
    score_txt = font.render(mytxt,1,(255,255,255))
    تلاحظون استعمال خط KacstOne لكن الحروف غير "مربوطة" مع بعضها ، و هذا يتكرر مع أي خط آخر
    حاولت قلب الحروف مثلا "طاقنلا" لكن بلا فائدة

    للعلم فـ PyGame تستعمل SDL_ttf لتصيير (rendering) الخطوط. صفحة الدعم

    هل من فكرة ؟
    سبحان اللّه | سبحان اللّه | سبحان اللّه
    مجموعة دروس Inkscape
    مجموعة دروس CSS
    لا تنسى أن تدعوا لي بالخير :)

  • #2
    تم فتح علة :

    http://pygame.motherhamster.org/bugz..._bug.cgi?id=61
    (لَا تَحْسَبَنَّ الَّذِينَ يَفْرَحُونَ بِمَا أَتَوا وَّيُحِبُّونَ أَن يُحْمَدُوا بِمَا لَمْ يَفْعَلُوا فَلَا تَحْسَبَنَّهُم بِمَفَازَةٍ مِّنَ الْعَذَابِ وَلَهُمْ عَذَابٌ أَلِيمٌ)
    آل عمران 188
    قال رسول الله صلى الله عليه و سلم :
    {لا يشكر الله من لا يشكر الناس}
    {من كان يؤمن بالله واليوم الآخر،فليقل خيراً أو ليصمت}

    جميع المساهمات الحاملة لهذا التوقيع تخضع لرخصة وقف
    أسأل الله العظيم رب العرش العظيم أن يحسن من حال أمتي

    تعليق


    • #3
      بارك الله فيك أخي مصعب على مبادرتك

      الآن دخلت على رابط العلة و وجدت ردا. يقول بأن PyGame لا تدعم النصوص التي تكتب من اليمين لليسار RTL .
      و بالنسبة لقلب النص فأنا جربته و لكن لم يعمل، أحصل على حروف غير مترابطة.



      إذا سنعتمد على الصور مع العربية
      التعديل الأخير تم بواسطة م أمين; الساعة 27-01-2011, 11:12 PM. سبب آخر: إضافة صورة
      سبحان اللّه | سبحان اللّه | سبحان اللّه
      مجموعة دروس Inkscape
      مجموعة دروس CSS
      لا تنسى أن تدعوا لي بالخير :)

      تعليق


      • #4
        اليست تستخدم tk في الواجهة الرسومية؟

        تعليق


        • #5
          اليست تستخدم tk في الواجهة الرسومية؟
          لم أفهم بالضبط، و لكن PyGame تستعمل SDL.
          سبحان اللّه | سبحان اللّه | سبحان اللّه
          مجموعة دروس Inkscape
          مجموعة دروس CSS
          لا تنسى أن تدعوا لي بالخير :)

          تعليق


          • #6
            أعجبني سرعة الرد ،

            عموما رددت عليه بان العكس لا ينفع ،

            لنر إلى أين تتطور الأمور ،
            (لَا تَحْسَبَنَّ الَّذِينَ يَفْرَحُونَ بِمَا أَتَوا وَّيُحِبُّونَ أَن يُحْمَدُوا بِمَا لَمْ يَفْعَلُوا فَلَا تَحْسَبَنَّهُم بِمَفَازَةٍ مِّنَ الْعَذَابِ وَلَهُمْ عَذَابٌ أَلِيمٌ)
            آل عمران 188
            قال رسول الله صلى الله عليه و سلم :
            {لا يشكر الله من لا يشكر الناس}
            {من كان يؤمن بالله واليوم الآخر،فليقل خيراً أو ليصمت}

            جميع المساهمات الحاملة لهذا التوقيع تخضع لرخصة وقف
            أسأل الله العظيم رب العرش العظيم أن يحسن من حال أمتي

            تعليق


            • #7
              بسم الله الرحمن الرحيم

              صحيح أن الموضوع قديم ، لكن هناك تجربة تم حل المشكلة بها ، وقام بها ( سامي المحمدي ) بشهر تموز 2012 ،
              وذلك من خلال استدعاء fribidi ،

              وكانت تجربته ::

              كود PHP:
              #!/usr/bin/env python
              # coding=UTF-8

              import pygame
              from pygame
              .locals import *
              from fribidi import *
              import sys
              pygame
              .init()

              u'مرحبا بكم Welcome'
              txt log2vis(sNoneParType.RTL)

              screen pygame.display.set_mode((640480))
              screen.fill((255,255,255))
              font pygame.font.Font("Thabit.ttf"35);
              while 
              True:
                      for 
              event in pygame.event.get():
                              if 
              event.type == QUIT:
                                      
              pygame.quit()
                                      
              sys.exit()
                      
              surf font.render(txt,False,(000))
                      
              rect surf.get_rect()
                      
              rect.center = (300100)
                      
              screen.blit(surfrect)
                      
              pygame.display.update() 


              شكرا سامي على الحل ، و هل أنت معنا الآن ؟ .
              (لَا تَحْسَبَنَّ الَّذِينَ يَفْرَحُونَ بِمَا أَتَوا وَّيُحِبُّونَ أَن يُحْمَدُوا بِمَا لَمْ يَفْعَلُوا فَلَا تَحْسَبَنَّهُم بِمَفَازَةٍ مِّنَ الْعَذَابِ وَلَهُمْ عَذَابٌ أَلِيمٌ)
              آل عمران 188
              قال رسول الله صلى الله عليه و سلم :
              {لا يشكر الله من لا يشكر الناس}
              {من كان يؤمن بالله واليوم الآخر،فليقل خيراً أو ليصمت}

              جميع المساهمات الحاملة لهذا التوقيع تخضع لرخصة وقف
              أسأل الله العظيم رب العرش العظيم أن يحسن من حال أمتي

              تعليق


              • #8
                جرب
                arabic_rtlize

                http://www.linuxac.org/forum/threads...AB%D9%88%D9%86
                هل لديك الوقت لتلعب مع لغة البرمجة بايثون؟
                الأساسيات وتطوير البرامج - تطوير وبرمجة الويب
                --------
                جرب التدوين بقوة بايثون LightBlog

                تعليق


                • #9
                  السلام عليكم
                  شكرا أخي مصعب على نقل الحلّ إلى هذا الموضوع.
                  فقط لدي ملاحظة هي في استيراد fribidi المكتبة تسمى pyfribidi
                  و أيضا ParType.RTL ليست موجودة في النسخة التي لديّ (على ما أعتقد) تظهر رسالة خطأ تقول بأنها غير معرفة.
                  على كل حال بتمرير النص فقط للدالة log2vis ينجح الأمر
                  كود:
                  #!/usr/bin/env python
                  # coding=UTF-8
                  
                  import pygame
                  from pygame.locals import *
                  from pyfribidi import *
                  import sys
                  pygame.init()
                  
                  s = u'بسم الله الرحمن الرحيم'
                  txt = log2vis(s)
                  
                  screen = pygame.display.set_mode((640, 480))
                  screen.fill((255,255,255))
                  font = pygame.font.SysFont("KacstQurn", 48, bold=False, italic=False)
                  
                  while True:
                          for event in pygame.event.get():
                              if event.type == QUIT:
                                  pygame.quit()
                                  sys.exit()
                          surf = font.render(txt,False,(0, 0, 0))
                          rect = surf.get_rect()
                          rect.center = (300, 100)
                          screen.blit(surf, rect)
                          pygame.display.update()
                  اضغط على الصورة لعرض أكبر. 

الإسم:	pygame_ar.png 
مشاهدات:	1 
الحجم:	9.5 كيلوبايت 
الهوية:	840768

                  -----
                  جربتها أيضا مع arabic_rtlize و حصلت على نفس النتيجة
                  فقط ملاحظة عند استعمال arabic_rtlize هي ان لا تستعمل u (لتحويل النص إلى utf-8) لأن الدالة rtlize تقوم بهذا الأمر
                  مثال للدالة rtlize

                  كود:
                  #!/usr/bin/env python
                  # coding=UTF-8
                  
                  import pygame
                  from pygame.locals import *
                  import sys
                  pygame.init()
                  from arabic_rtlize.process import rtlize
                  
                  s = 'بسم الله الرحمن الرحيم'
                  txt=rtlize(unicode(s, 'UTF-8'))
                  screen = pygame.display.set_mode((640, 480))
                  screen.fill((255,255,255))
                  font = pygame.font.SysFont("KacstQurn", 48, bold=False, italic=False)
                  
                  while True:
                          for event in pygame.event.get():
                              if event.type == QUIT:
                                  pygame.quit()
                                  sys.exit()
                          surf = font.render(txt,False,(0, 0, 0))
                          rect = surf.get_rect()
                          rect.center = (300, 100)
                          screen.blit(surf, rect)
                          pygame.display.update()
                  --------------------------
                  البضاعة المحلّيّة أفضل
                  شكرا للجميع.
                  التعديل الأخير تم بواسطة م أمين; الساعة 02-01-2013, 03:18 PM.
                  سبحان اللّه | سبحان اللّه | سبحان اللّه
                  مجموعة دروس Inkscape
                  مجموعة دروس CSS
                  لا تنسى أن تدعوا لي بالخير :)

                  تعليق

                  يعمل...
                  X