نشریه‌ی الکترونیکی رایانا

گروه کامپیوتر مرکز راهنمایی علامه حلی یک تهران

نشریه‌ی الکترونیکی رایانا

گروه کامپیوتر مرکز راهنمایی علامه حلی یک تهران

نشریه‌ی الکترونیکی رایانا
طبقه بندی موضوعی
آخرین نظرات

چطور در Pygame متن فارسی را نمایش دهیم؟

جمعه, ۳ ارديبهشت ۱۳۹۵، ۰۲:۰۰ ق.ظ

اگر تابحال امتحان کرده باشید که در PyGame متن فارسی بنویسید حتما به مشکلی که در تصویر سمت چپ می بینید برخورده اید. این مشکل فقط در pygame نیست و در بسیاری از کتابخانه ها که خروجی گرافیکی می گیرند یا رابط گرافیکی هستند بوجود می آید. جالب اینجاست که مختص به زبان شیرین فارسی هم نیستند و زبان های عربی، عبری و هر زبانی که نوشتار آن از راست به چپ است را شامل می شوند.

امّا چگونه این مشکل را حل کنیم تا بجای تصویر چپ به تصویر راست برسیم؟

منطق Pygame دربرابر متون زبان های راست به چپ چگونه است؟ ترتیب کلمات و ترتیب حروف درون کلمات وارونه می شود. پس آیا می شود به Pygame یا این دست نرم افزارها طوری کلمات را فهماند که به درستی نمایش دهند؟ 

جواب این است که بله البتّه؛ امّا آیا به تنهایی وارونه کردن کلمات و حروف کافی است؟ باید بگوییم نه؛ متاسّفانه Pygame ماری است که حتی در حد چسباندن کلمات هم فارسی بلد نیست. گریه 

اگر فقط کاری کنیم ترتیب ها درست نمایش داده شوند به تصویر زیر می رسیم.

آیا این نتیجه ای بود که ما می خواستیم؟ مسلّما نه؛ ما می خواستیم یک متن درست و حسابی فارسی روی صفحه ی Pygame برایمان ظاهر شود.

یعنی شکست خوردیم و نمی شود و ...؟

حالا اگر بدانیم که حروفی مثل "ﻌ" و "ﻟ" و "ﻴ" در کامپیوتر تعریف می شوند و عددی شبیه به عدد Ascii  دارند چطور؟ 

کمی فکر کن. بله می شود!ولی برای این که این چسباندن حروف را بجای Pygame نفهم انجام بدهی کلّی خرکدی دارد.

به آن الگوریتمی که خود جمله و کلمات را در جمله برعکس می کند، الگوریتم bidi می گویند. و به الگوریتمی که حروف کلمه را به حالت مقطّعشان در می آورد، الگوریتم reshape می گویند.

خوشبختانه برای bidi و reshape در پایتون کتابخانه های زیادی وجود دارند.

نصب کتابخانه و استفاده از آن

1. با اجرای دستور py -m pip install python-bidi کتابخانه ی python-bidi نصب کنید.

2. فایل کتابخانه ی persian_reshaper را از اینجا دانلود کنید و در مسیر C:\Python\Lib قرار دهید. (مسیر گفته شده بسته به درایو ویندوز نصب شده یا نسخه ی پایتون شما می تواند متغیر باشد.)

3. حالا می توانید براحتی متون درست و حسابی فارسی در محیط Pygame یا محیط های دیگری که با زبان شیرینمان مشکل دارند، داشته باشید.

این قطعه کد نمونه است، به دلخواه می توانید آن را ویرایش کنید ولی حتما برای ویرایش حواستان باشد باید از فونتی فارسی استفاده کنید چون Pygame خودش فونت فارسی ندارد: (می توانید فونتی که من از آن در برنامه ام استفاده کردم را از اینجا دانلود کنید)

#In the name of Allah

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

from bidi import algorithm
import persian_reshaper

DSP = pygame.display.set_mode((300, 300))

FNT = pygame.font.Font("bZb.ttf", 72)
txt = FNT.render(algorithm.get_display(persian_reshaper.reshape(u'سلام حلی')), True, (255, 255, 255))
txtCor = txt.get_rect()
txtCor.center = (150, 150)
DSP.blit(txt, txtCor)

pygame.display.update()
و این هم نتیجه...
۹۵/۰۲/۰۳
مهدی امیری

pygame

آموزش

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

نظر دادن تنها برای اعضای بیان ممکن است.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.