GUI Tkinter ဖြင့် app တစ်ခု ပြုလုပ်ခြင်း

PDF ဖိုင်မှ text များ ထုတ်ယူခြင်းကို တစ်ဆင့်ခြင်းစီ ရှင်းပြထားသည်။

ပထမ ဦးစွာ အောက်က link မှ logo.jpg ဖိုင်နှင့် ဖတ်ယူမည့် PDF ဖိုင်ကို download လုပ်ယူပြီး python code ဖိုင်ရှိသည့် directory အောက်တွင် အတူတူ ထည့်ထားပါ။

www.acmv.org/python/tkinter/pdf_extract/logo.png
www.acmv.org/python/tkinter/pdf_extract/test.pdf

python code ဖိုင် နှင့် logo.jpg ဖိုင်၊ ဖတ်ယူမည့် PDF ဖိုင်တို့သည် directory တစ်ခု အောက်တွင် အတူတူရှိနေပြီး code များ တစ်ဆင့်ခြင်း စတင် စမ်းနိုင်ပါပြီ။

(၁) import လုပ်ခြင်း

(၁) PyPDF2 ကို install မလုပ်ရသေးပါက

pip install PyPDF2

သို့မဟုတ် Jupyter notebook အတွက်

conda install -c conda-forge pypdf2

ဖြင့် install လုပ်နိုင်ပါသည်။

(၂)pillow module ကို install မလုပ်ရသေးပါက

pip install pillow

သို့မဟုတ် Jupyter notebook အတွက်

conda install -c anaconda pillow

ဖြင့် install လုပ်နိုင်ပါသည်။

install လုပ်ပြီးပါက အောက်မှ code များဖြင့် import လုပ်ပါမည်။

import tkinter as tk
import PyPDF2
from PIL import Image, ImageTk
from tkinter.filedialog import askopenfile
In [1]:
# ရှိရမည့် module များ ရှိ မရှိ စစ်ဆေးရန်
import tkinter as tk
import PyPDF2
from PIL import Image, ImageTk
from tkinter.filedialog import askopenfile

print("Is this working?")
Is this working?

(၂) root window တည်ဆောက်ခြင်း

In [2]:
import tkinter as tk
import PyPDF2
from PIL import Image, ImageTk
from tkinter.filedialog import askopenfile

root = tk.Tk()

root.mainloop()
In [3]:
# အောက်မှ code သည် jupyter ipython notebook တွင် ပုံများကို ဖော်ပြရန်အတွက် ဖြစ်သည်။ 
from IPython.display import Image
Image(filename="root.jpg")
Out[3]:

(၃) root တွင် logo image ထည့်ခြင်း

(၃.၁) canvas တည်ဆောက်ခြင်း

canvas = tk.Canvas(root, width=600, height=300)
canvas.grid(columnspan=3, rowspan=3)

ဖြင့် width=600 နှင့် height=300 အရွယ်အစားရှိသော canvas တစ်ခု တည်ဆောက်သည်။ canvas ကို ကော်လံ (၃)ခု row (၃) ခု ဖြင့် အပိုင်း ၆ ပိုင်း ပိုင်းထားသည်။

canvas တည်ဆောက်ခြင်းကို လေ့လာလိုပါက အောက် link တွင် ဖတ်ရှုနိုင်သည်။
http://www.acmv.org/python/tkinter/Tk_canvas.html

အောက်မှ code များသည် logo image ထည့်ခြင်း အတွက်ဖြစ်သည်။

logo = Image.open('logo.png')
logo = ImageTk.PhotoImage(logo)
logo_label = tk.Label(image=logo)
logo_label.image = logo
logo_label.grid(column=1, row=0)
In [4]:
import tkinter as tk
import PyPDF2
from PIL import Image, ImageTk
from tkinter.filedialog import askopenfile

root = tk.Tk()

canvas = tk.Canvas(root, width=600, height=300)
canvas.grid(columnspan=3, rowspan=3)

# logo image ထည့်ခြင်း
logo = Image.open('logo.png')
logo = ImageTk.PhotoImage(logo)
logo_label = tk.Label(image=logo)
logo_label.image = logo
logo_label.grid(column=1, row=0)


root.mainloop()
In [5]:
from IPython.display import Image
Image(filename="logo_image_on_root.jpg")
Out[5]:

(၄) instructions စာတန်း(label)ထည့်ခြင်း

အောက်မှ code များသည် instructions စာတန်း(label)ထည့်ရန်အတွက် ဖြစ်သည်။

instructions = tk.Label(root, text="Select a PDF file on your computer to extract all its text", font="Raleway")
instructions.grid(columnspan=3, column=0, row=1)

(၅)browse button ထည့်ခြင်း

အောက်မှ code များသည် browse button ထည့်ရန်အတွက် ဖြစ်သည်။
browse_text အတွက် tk.StringVar() ဖြင့် string variable ကြေငြာသည်။
browse_button ကို click လျှင် ဖိုင်ဖွင့်ရန်အတွက် dialog box ပေါ်လာလိမ့်မည်။
browse_btn.grid ဖြင့် column=1, row=2 နေရာတွင် browse_button ကို နေရာချသည်။
font="Raleway", bg="#20bebe", fg="white", height=2, width=15 တို့သည် browse_button ၏ option များ ဖြစ်သည်။

browse_text = tk.StringVar()
browse_btn = tk.Button(root, textvariable=browse_text, command=lambda:open_file(), font="Raleway", bg="#20bebe", fg="white", height=2, width=15)
browse_text.set("Browse")
browse_btn.grid(column=1, row=2)
In [6]:
import tkinter as tk
import PyPDF2
from PIL import Image, ImageTk
from tkinter.filedialog import askopenfile

root = tk.Tk()

canvas = tk.Canvas(root, width=600, height=300)
canvas.grid(columnspan=3, rowspan=3)

# logo image ထည့်ခြင်း
logo = Image.open('logo.png')
logo = ImageTk.PhotoImage(logo)
logo_label = tk.Label(image=logo)
logo_label.image = logo
logo_label.grid(column=1, row=0)

#instructions စာတန်းထည့်ခြင်း 
instructions = tk.Label(root, text="Select a PDF file on your computer to extract all its text", font="Raleway")
instructions.grid(columnspan=3, column=0, row=1)


# browse button ထည့်ခြင်း
browse_text = tk.StringVar()
browse_btn = tk.Button(root, textvariable=browse_text, command=lambda:open_file(), font="Raleway", bg="#20bebe", fg="white", height=2, width=15)
browse_text.set("Browse")
browse_btn.grid(column=1, row=2)

canvas = tk.Canvas(root, width=600, height=250)
canvas.grid(columnspan=3)

root.mainloop()
In [7]:
from IPython.display import Image
Image(filename="instruction_and_browse_button.jpg")
Out[7]:

(၆)Pdf ဖိုင်မှ ဖတ်ယူထားသည့် text များကို ဖော်ပြခြင်း

open_file() function ဖြင့်

(၁) browse_button ကို click လျှင် ဖိုင်ဖွင့်ရန်အတွက် dialog box ပေါ်လာလိမ့်မည် (၂) မိမိဖတ်လိုသည့် pdf ဖိုင်ကို ရွေးချယ်လိုက်ပါ။ (၃) ရွေးပေးသည့် pdf ဖိုင်ကို ဖတ်သည်။ (၄) ထို pdf ဖိုင်ထဲမှ text များကို page_content variable ဖြင့် မှတ်ထားသည်။

def open_file():
    browse_text.set("loading...")
    file = askopenfile(parent=root, mode='rb', title="Choose a file", filetype=[("Pdf file", "*.pdf")])
    if file:
        read_pdf = PyPDF2.PdfFileReader(file)
        page = read_pdf.getPage(0)
        page_content = page.extractText()

(၇) text များကို root ပေါ်တွင် ဖော်ပြရန်အတွက် text_box တစ်ခုတည်ဆောက်ခြင်း

page_content မှ text များကို root ပေါ်တွင် ဖော်ပြရန်အတွက် text_box တစ်ခုတည်ဆောက်သည်။

text_box.insert() ဖြင့် text_box ထဲသို့ text များကို ဖော်ပြရန်အတွက် ထည့်သည်။

#text box
        text_box = tk.Text(root, height=10, width=50, padx=15, pady=15)
        text_box.insert(1.0, page_content)
        text_box.tag_configure("center", justify="center")
        text_box.tag_add("center", 1.0, "end")
        text_box.grid(column=1, row=3)

(၈) အစမှ အဆုံးအထိ code အားလုံး

အောက်မှာ code များသည် အထက်တွင် ရှင်းပြခဲ့သည့် code များ အစမှ အဆုံးအထိ ဖြစ်သည်။

In [8]:
import tkinter as tk
import PyPDF2
from PIL import Image, ImageTk
from tkinter.filedialog import askopenfile

root = tk.Tk()

canvas = tk.Canvas(root, width=600, height=300)
canvas.grid(columnspan=3, rowspan=3)

# logo image ထည့်ခြင်း
logo = Image.open('logo.png')
logo = ImageTk.PhotoImage(logo)
logo_label = tk.Label(image=logo)
logo_label.image = logo
logo_label.grid(column=1, row=0)

#instructions စာတန်းထည့်ခြင်း 
instructions = tk.Label(root, text="Select a PDF file on your computer to extract all its text", font="Raleway")
instructions.grid(columnspan=3, column=0, row=1)

def open_file():
    browse_text.set("loading...")
    file = askopenfile(parent=root, mode='rb', title="Choose a file", filetype=[("Pdf file", "*.pdf")])
    if file:
        read_pdf = PyPDF2.PdfFileReader(file)
        page = read_pdf.getPage(0)
        page_content = page.extractText()

        #text box ထည့်ခြင်း
        text_box = tk.Text(root, height=10, width=50, padx=15, pady=15)
        text_box.insert(1.0, page_content)
        text_box.tag_configure("center", justify="center")
        text_box.tag_add("center", 1.0, "end")
        text_box.grid(column=1, row=3)

        browse_text.set("Browse")

# browse button ထည့်ခြင်း
browse_text = tk.StringVar()
browse_btn = tk.Button(root, textvariable=browse_text, command=lambda:open_file(), font="Raleway", bg="#20bebe", fg="white", height=2, width=15)
browse_text.set("Browse")
browse_btn.grid(column=1, row=2)

canvas = tk.Canvas(root, width=600, height=250)
canvas.grid(columnspan=3)

root.mainloop()
In [9]:
from IPython.display import Image
Image(filename="final_result.jpg")
Out[9]:

အသေးစိတ် ပိုနားလည်လိုပါ အောက် ဗွီဒီယိုဖိုင်တွင် ဆက်လက် လေ့လာနိုင်ပါသည်။
Ref: https://www.youtube.com/watch?v=itRLRfuL_PQ
End-

In [ ]: