ตอน : การแสดงข้อความภาษาไทย บน TkInter ต้องถอดรหัสก่อนเสมอ !
จากที่เพื่อน ๆ ในบอร์ดได้เคยติดปัญหาไม่สามารถเขียนภาษาไทย บนตัว TkInter ได้ ดังนั้น วันนี้เราจะไปพบวิธีการแก้ปัญหา กันครับ..
หัวใจอยู่ที่คำสั่ง decode ครับขอให้พิจารณาตัวอยางต่อไปนี้
mytext = "สวัสดีประเทศไทย"
mytext = mytext.decode('cp874')
เมื่อเราต้องการวาดอักษรภาษาไทยลงบน TkInter สามารถทำได้ตามปกติ เพราะเราได้ถอดรหัสเป็น cp874 (ตรงตามข้อกำหนดของไพธอนเปิดอ่านคู่มือได้นะครับ)
>>> from Tkinter import Label
>>> widget = Label(None,text="สวัสดี".decode('cp874'))
>>> widget.pack()
>>> widget.mainloop()
นอกจากนั้นแล้ว การเข้ารหัสแบบนี้ยังสามารถนำไปใช้ในการเขียนข้อความลงบนภาพกราฟิกได้อีกด้วย..
ผมหมายถึงพวก .jpg, .gif, .bmp อื่น ๆ ที่สนับสนุนโดยโมดูล PIL (Python Image Library) ครับ..
หวังว่าความรู้นี้ จะทำให้ท่านสามารถต่อยอดงานของท่านได้อย่างไม่เสียเวลา..
และเกิด productivity เยอะ ๆ นะครับ.. สำหรับวันนี้ขอกล่าวคำว่า สวัสดีครับ !!
Re: ตอน : การแสดงข้อความภาษาไทย บน TkInter ต้องถอดรหัสก่อนเส
ผมมีวิธีอื่นที่ดีกว่านะครับ
วิธีแรกคือการพิมพ์ 2 บรรทัดนี้เอาไว้ที่หัวของทุกไฟล็ .py
(ความจริงแล้วที่จำเป็นคือบรรทัดที่ 2 แต่บรรทัดแรกเป็นธรรมเนียมนิยม
ของชาว unix, ยังไงก็ตาม ห้ามให้อยู่เกินบรรทัดที่ 2)
#!/usr/bin/env python
# -*- coding: cp874 -*-
จากนั้น string literal ในโปรแกรมที่เป็นภาษาไทยให้ใช้ unicode
โดยใส่ u ไว้ข้างหน้า quote(")
>>> widget = Label(None,text=u"สวัสดี")
เท่านี้ก็เรียบร้อย
วิธีที่สองวุ่นหน่อย ไม่ค่อยแนะนำ แต่บางครั้งก็จำเป็นสำหรับโปรแกรม
เก่าๆที่ไม่ได้เขียนไว้ support unicode เต็มที่ อย่างเช่น zope 2
คือการไปเพิ่มไฟล์ชื่อ sitecustomize.py ที่ directory:
python/Lib/site-packages
โดยในไฟล็นั้นจะเป็น code ดังนี้
import sys
sys.setdefaultencoding('cp874')
จากนั้นก็สามารถเขียน code ได้ตามปกติเลย
>>> widget = Label(None,text="สวัสดี")
Re: ตอน : การแสดงข้อความภาษาไทย บน TkInter ต้องถอดรหัสก่อนเส
ลืมบอกไปอีกอย่างคือถ้าเราเกิดอยากเขียน code ที่มีสาระพัดภาษา
ไทย จีน อังกฤษ เกาหลี ก็ทำได้ด้วยการใช้ editor ที่เก็บเป็น utf-8 ได้
อย่างเช่น JEdit แล้วใช้วิธีแรกแต่เปลี่ยนหัวเป็น
#!/usr/bin/env python
# -*- coding: utf-8 -*-