Results 1 to 3 of 3

Thread: ตอน : การแสดงข้อความภาษาไทย บน TkInter ต้องถอดรหัสก่อนเสมอ !

  1. #1
    Senior Member
    Join Date
    Sep 2003
    Location
    Thailand
    Posts
    136


    ตอน : การแสดงข้อความภาษาไทย บน 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 เยอะ ๆ นะครับ.. สำหรับวันนี้ขอกล่าวคำว่า สวัสดีครับ !!

  2. #2
    Anonymous
    Guest


    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="สวัสดี")

  3. #3
    Anonymous
    Guest


    Re: ตอน : การแสดงข้อความภาษาไทย บน TkInter ต้องถอดรหัสก่อนเส

    ลืมบอกไปอีกอย่างคือถ้าเราเกิดอยากเขียน code ที่มีสาระพัดภาษา
    ไทย จีน อังกฤษ เกาหลี ก็ทำได้ด้วยการใช้ editor ที่เก็บเป็น utf-8 ได้
    อย่างเช่น JEdit แล้วใช้วิธีแรกแต่เปลี่ยนหัวเป็น

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

Similar Threads

Members who have read this thread : 0

Actions : (View-Readers)

There are no names to display.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •