နာမည်, အသက် နှင့် အချက်အလက်များကို ထည့်သွင်းပြီး ပြန်ဖော်ပြပေးမည် GUI တစ်ခုကို Label, Textbox Entry , Checkbutton, Action Button စသည့် widget များဖြင့် နမူနာ တည်ဆောက်ပြပါမည်။ အဆင့်(၆) ဆင့်ပါဝင်သည်။
Main Window တွင်
(က)"Enter a name:"ဟု စာတန်းထိုးရန် Label widget တစ်ခု နှင့် နာမည် ထည့်ရန် Entry widget တစ်ခု
(ခ)Checkbutton တစ်ခု
(ဂ)Combobox တစ်ခု
(ဃ)Action Button တစ်ခု နှင့် ClickMe Function တစ်ခု တို့ ပါဝင်ပါသည်။
# အောက်မှ code သည် jupyter ipython notebook တွင် ပုံများကို ဖော်ပြရန်အတွက် ဖြစ်သည်။
from IPython.display import Image
Image(filename="before_data_input.jpg")
# User ၏ Bio Data များ ထည့်ပြီး မြင်ရမည် window
Image(filename="bio_data.jpg")
Window ကို အကွက် (၉) ကွက် ဖြစ်အောင် စိတ်ပိုင်းရပါမည်။ ထို့ကြောင့် row= 3 , column =3 ဖြစ်သည်။
Image(filename="grid_layout.jpg")
ပထမဦးစွာ name Label တစ်ခုနှင့် name ထည့်ရန် entry တစ်ခု တည်ဆောက်ပါမည်။
Label ကို နေရာချထားမည့် row နှင့် column မှာ .grid(column=0, row=0) ဖြစ်သည်။
Entry widget ၏ နေရဦမှာ .grid(column=0, row=1) ဖြစ်သည်။
Entry widget တွင် user က ထည့်ပေးမည့် name ကို လက်ခံ user_name ဆိုသည့် variabel လက်ခံယူပါမည်။ Python သည် dynamically-typed language ဖြစ်သောကြောင့် variable type ကို ကြိုတင် ကြေငြာရန် မလိုအပ်ပေ။ သို့သော် tkinter တွင် variable name နှင့် variable type ကို ကြိုတင် ကြေငြာရန် လိုအပ်သည်။ Tkinter သည် Python နှင့် မတူပါ။ Tkinter တွင် user က ထည့်ပေးသည့် input များကို လက်ခံရန် အတွက် variable name နှင့် variable type ကို ကြိုတင် ကြေငြာရန် လိုအပ်သည်။ ဥပမာ - user က ထည့်ပေးသည့် နာမည်(name)ကို လက်ခံရန်အတွက် user_name နှင့် ထည့်ပေးမည့် ဒေတာသည် string ဖြစ်သည်။ String variable ဖြစ်သည်ဟု user_name = tk.StringVar() ဆိုပြီး ကြိုတင် ကြေငြာပေးရသည်။
user_name = tk.StringVar()
nameEntered = ttk.Entry(root, width=18, textvariable=user_name)
nameEntered.grid(column=0, row=1)
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Bio Data")
# Enter a name Label
ttk.Label(root, text="Enter a name:").grid(column=0, row=0)
# Adding a Entry widget
user_name = tk.StringVar()
nameEntered = ttk.Entry(root, width=18, textvariable=user_name)
nameEntered.grid(column=0, row=1)
root.tk.call('tk', 'scaling', 5.0)
root.mainloop()
Image(filename="Label_and_Entry.jpg")
user_age = tk.StringVar()
အသက်ကို ၃၀ မှ ၄၀ ကြား စသည်ဖြင့် အသက်ပိုင်းအခြားဖြင့် လက်ခံယူသောကြောင့် tk.StringVar() ဖြင့် ကြေငြာပါသည်။
numberChosen['values'] = ("30-40", "41-50", "51-60", "61-70", "71-80", "81-90")
numberChosen.grid(column=1, row=1)
numberChosen.current(1)
အသက်ကို နှစ်( ၂၀နှစ်, ၃၀နှစ်) ဖြင့်လက်ခံပါက tk.IntVar() ကို အသုံးပြုရမည်။ numberChosen.current(1) သည် ပေါ်် နေမည့် ပေါ်နေမည့် values ဖြစ်သည်။ zero မှာ စသည်။ current(1) ဖြစ်သောကြောင့် "41-50" ဖြစ်သည်။
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Bio Data")
# Enter a name Label
ttk.Label(root, text="Enter a name:").grid(column=0, row=0)
# Adding a Entry widget
user_name = tk.StringVar()
nameEntered = ttk.Entry(root, width=18, textvariable=user_name)
nameEntered.grid(column=0, row=1)
# Creating Combobox
ttk.Label(root, text="Choose your age:").grid(column=1, row=0)
user_age = tk.StringVar()
numberChosen = ttk.Combobox(root, width=12, textvariable=user_age )
numberChosen['values'] = ("30-40", "41-50", "51-60", "61-70", "71-80", "81-90")
numberChosen.grid(column=1, row=1)
numberChosen.current(1)
root.mainloop()
Image(filename="Combobox.jpg")
Checkbutton (၃) မျိုးထည့်ပြထားသည်။ Checkbutton မှ variable=chVarMale နှင့် variable=chVarMarried နှစ်ခုသည် clickMe() function သို့ရောက်လိမ့်မည်။
Checkbutton တွင် onvalue=1 နှင့် offvalue=0 ကို define လုပ်နိုင်သည်။ 1 or 0 သို့မဟုတ် True or False အဖြစ် ထည့်ပေးနိုင်သည့် two states variable ဖြစ်သည်။
clickMe() function သို့ onvalue=1 နှင့် offvalue=0 ရောက် သွားစေရန်အတွက် command = clickMe ထည့်ပေးရသည်။
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Bio Data")
# Enter a name Label
ttk.Label(root, text="Enter a name:").grid(column=0, row=0)
# Adding a Textbox Entry widget
user_name = tk.StringVar()
nameEntered = ttk.Entry(root, width=18, textvariable=user_name)
nameEntered.grid(column=0, row=1)
# Creating Combobox
ttk.Label(root, text="Choose your age:").grid(column=1, row=0)
user_age = tk.StringVar()
numberChosen = ttk.Combobox(root, width=12, textvariable=user_age )
numberChosen['values'] = ("30-40", "41-50", "51-60", "61-70", "71-80", "81-90")
numberChosen.grid(column=1, row=1)
numberChosen.current(1)
# Creating three checkbuttons
chVarDis = tk.IntVar()
check1 = tk.Checkbutton(root, text="Disabled", variable=chVarDis, state='disabled')
check1.select()
check1.grid(column=0, row=2, sticky=tk.W)
chVarMale = tk.IntVar()
check2 = tk.Checkbutton(root, text="Male", variable=chVarMale, onvalue=1, offvalue=0)
check2.deselect()
check2.grid(column=1, row=2, sticky=tk.W)
chVarMarried = tk.IntVar()
check3 = tk.Checkbutton(root, text="Married", variable=chVarMarried, onvalue=1, offvalue=0)
check3.select()
check3.grid(column=2, row=2, sticky=tk.W)
root.mainloop()
Image(filename="checkbutton.jpg")
Action Button နှင့် ထို action button ကို click လိုက်လျှင် အလုပ်လုပ်မည့် function တစ်ခုကို တည်ဆောက်သည်။ action_button.configure() ကို အသုံးပြု၍ Entry , Combobox, Checkbutton တို့မှ variabel တန်ဖိုးများကို .get() ဖြင့် ယူသည်။
str(bool(chVarMale.get()))
str(bool(chVarMarried.get())
chVarMale.get() နှင့် chVarMarried.get() တို့၏ တန်ဖိုး(value) သည် 0 နှင့် 1 ဖြစ်သည်။ (onvalue=1, offvalue=0)။ True or False ဖြင့် ဖော်ပြရန် bool အဖြစ်ပြောင်းသည်။ ထို့နောက် string အဖြစ် ထပ်ပြောင်းသည်။
label တွင် text ဖြင့် ဖော်ပြရန်အတွက် string များကို concatenate လုပ်ရသည်။
text='Hello ' + user_name.get() + ", age " +
numberChosen.get() + ", Male = " +
str(bool(chVarMale.get()))
text ဖော်ပြရန်အတွက် .format() ပုံစံဖြင့်လည်း အောက်ပါအတိုင်း ရေးနိုင်သည်။
text="Hello {} , age {}, Male = {}, Married = {} ".
format(user_name.get(), numberChosen.get(),
str(bool(chVarMale.get())), str(bool(chVarMarried.get())))
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Bio Data")
# Action Button Click Function
def clickMe():
action_button.configure(text='Hello '+
user_name.get()+
", age "+
numberChosen.get() +
", Male = "+
str(bool(chVarMale.get())) +
", Married= "+
str(bool(chVarMarried.get())))
# Position Button in second row, second column (zero-based)
action_button.grid(column=2, row=1)
# Label for result
result_label=ttk.Label(root, text='Hello '+
user_name.get() +
", age " +
numberChosen.get() + ", Male = "+
str(bool(chVarMale.get())) +
", Married= " +
str(bool(chVarMarried.get())),
font="Raleway",
foreground="blue")
result_label.grid(row=3, column=0, columnspan=3)
# result ကို .format() ဖြင့်လည်း ရေးပြထားသည်။
result_label2=ttk.Label(root,
text="Hello {}, age:{}, Male={}, Married={}"
.format(user_name.get(),
numberChosen.get(),
str(bool(chVarMale.get())),
str(bool(chVarMarried.get()))),
foreground="blue")
result_label2.grid(row=4, column=0, columnspan=3)
# Action Button
action_button = ttk.Button(root, text="Click Me!", command=clickMe)
action_button.grid(column=2, row=1)
# Enter a name Label
ttk.Label(root, text="Enter a name:").grid(column=0, row=0)
# Adding a Textbox Entry widget
user_name = tk.StringVar()
nameEntered = ttk.Entry(root, width=18, textvariable=user_name)
nameEntered.grid(column=0, row=1)
# Creating Combobox
ttk.Label(root, text="Choose your age:").grid(column=1, row=0)
user_age = tk.StringVar()
numberChosen = ttk.Combobox(root, width=12, textvariable=user_age )
numberChosen['values'] = ("30-40", "41-50", "51-60", "61-70", "71-80", "81-90")
numberChosen.grid(column=1, row=1)
numberChosen.current(1)
# Creating three checkbuttons
chVarDis = tk.IntVar()
check1 = tk.Checkbutton(root, text="Disabled", variable=chVarDis, state='disabled')
check1.select()
check1.grid(column=0, row=2, sticky=tk.W)
chVarMale = tk.IntVar()
check2 = tk.Checkbutton(root, text="Male", variable=chVarMale, onvalue=1, offvalue=0, command = clickMe)
check2.deselect()
check2.grid(column=1, row=2, sticky=tk.W)
chVarMarried = tk.IntVar()
check3 = tk.Checkbutton(root, text="Married", variable=chVarMarried, onvalue=1, offvalue=0, command = clickMe)
check3.select()
check3.grid(column=2, row=2, sticky=tk.W)
root.tk.call('tk', 'scaling', 5.0) # window resolution ကောင်းစေရန်
root.mainloop()
Image(filename="Data_input.jpg")
Image(filename="complete.jpg")
Ref: Python GUI Programming Cookbook by Burkhard A. Meier