PDA

View Full Version : سوال: سازگاری با فارسی در tkinter



ravand
چهارشنبه 09 اسفند 1391, 09:12 صبح
این برنامه ای برای ایجاد یک برچسب هست:
from tkinter import *
barname = Tk()
barname.geometry("150x100")
barname.title('عنوان پنجره')
w = Label(barname, text="نام:")
w.pack()
mainloop()
اگه برنامه رو اجرا کنید می بینید که متن فارسی درست از راست به چپ چاپ نمیشه . برای اینکه متن فارسی از راست به چپ نوشته بشه باید چیکار کرد؟
متشکرم.

ehp_kz6597
چهارشنبه 09 اسفند 1391, 15:37 عصر
نبايد مشكلي باشه
از كدوم نسخه پايتون استفاده ميكني؟

ravand
چهارشنبه 09 اسفند 1391, 15:59 عصر
من فکر میکنم شما منظور منو درست متوجه نشدی. منم اشتباه کردم اینکه عنوان تاپیک رو درست ننوشتم.
ببینید مشکل من اینه که متن از راست به چپ نوشته نمیشه بلکه فقط از چپ به راست نوشته میشه توی بحث html یه دستوری هست برای حل این مشکل به شکل زیر:

dir="rtl"
یعنی متن را از راست به چپ نمایش بده.
ببینید برنامه ای که در پست اول گذاشتم توی پنجره اینطوری نمایش داده میشه:
100625
من روی برچسب نوشتم نام: ولی نوشته شده :نام
برنامه ی من:

from tkinter import *
barname = Tk()
barname.geometry("150x100")
barname.title('عنوان پنجره')
w = Label(barname, text="نام:")
w.pack()
mainloop()
برای حل این مشکل باید چیکار کرد؟
متشکرم.

eshpilen
پنج شنبه 10 اسفند 1391, 08:54 صبح
خب شاید tkinter از Layout راست به چپ پشتیبانی نمیکنه. اگر پشتیبانی بکنه فکر کنم باید یک پراپرتی ای متدی چیزی مخصوص راست به چپ کردن کل فرم داشته باشه. حالا نگی کل Layout، برای عناصری مثل همین لیبل و اینها دیگه باید داشته باشه.

بعد حالا یه ترفند هم میگم که شما تست کن شاید با کمی زحمت بیشتر مشکل رو حل کنه (حتی اگر tkinter ساپورت نکنه).

از کاراکترهای left to right mark و right to left mark در یونیکد استفاده کن ببین چی میشه. البته الان فکر کنم شما به right to left mark احتیاج داری.
کلا هرجایی که ترکیب کاراکترهای زبان راست به چپ و زبان چپ به راست، مثل فارسی و انگلیسی، پیش میاد و ترتیب مورد نظر بهم میریزه، شما میتونید با قرار دادن این کاراکترها در ابتدا یا انتهای رشته، بهم ریختگی رو درست کنید.
در یونیکد کد این کاراکترها U+200E و U+200F هست.
میتونید از نرم افزار Character map ویندوز هم برای کپی کردن این کاراکتر استفاده کنید.
راستی از ویندوز استفاده میکنید؟

اینم مثال:
مثلا من الان مینویسم c:\ یعنی آدرس ریشهء درایو C.
مشاهده میکنید که بک اسلش در جای نادرستی نشون داده شده.
ولی من میتونم با افزودن کاراکتر left to right mark به انتهای رشتهء انگلیسی خودم، این مشکل رو برطرف کنم. مثل این c:\‎ که الان درست شده!
البته یک روش دیگر هم میتونه جابجا تایپ کردن عبارت ها باشه. ولی روش اصولی ای نیست و صرفا نمایش رو درست میکنه و ترتیب واقعی رو خراب میکنه.

eshpilen
پنج شنبه 10 اسفند 1391, 08:59 صبح
بطور مثال این کد رو تست کن:

from tkinter import *
barname = Tk()
barname.geometry("150x100")
barname.title('عنوان پنجره')
w = Label(barname, text="نام:‏")
w.pack()
mainloop()

ravand
پنج شنبه 10 اسفند 1391, 08:59 صبح
این روش رو میدونستم ولی این روش اصولی نیست. اگه tkinter برای حل این مشکل راهی نداشته باشه خیلی مسخره است. حداقل اگه مثل جاوا از html پشتیبانی میکردم میشد به راحتی این مشکل رو حل کرد.

eshpilen
پنج شنبه 10 اسفند 1391, 09:02 صبح
زیاد هم مشکل نیست که آخه!
البته فعلا در همین حد برچسب ها و اینا. امیدوارم در جاهای دیگه مثل کادرهای تایپ متن مشکل نداشته باشی.
البته توی نمونه کدی که من گذاشتم کاراکتر right to left mark دیده نمیشه، چون همینطوری از character map کپی کردم گذاشتم؛ یادم نبود توی پایتون در رشته ها کدهای هگز رو چطوری میذارن. شما بصورت کد هگز بذار که دیده بشه و خوانا باشه.

pouyaweb7
جمعه 27 اردیبهشت 1392, 21:34 عصر
بچه ها برای اموزش چه مرجع خوبی هست جامع