Label, Entry , Combobox, Checkbutton, Action Button တို့ပါဝင်သည့် Bio Data Entry

နာမည်, အသက် နှင့် အချက်အလက်များကို ထည့်သွင်းပြီး ပြန်ဖော်ပြပေးမည် GUI တစ်ခုကို Label, Textbox Entry , Checkbutton, Action Button စသည့် widget များဖြင့် နမူနာ တည်ဆောက်ပြပါမည်။ အဆင့်(၆) ဆင့်ပါဝင်သည်။

အဆင့်(၁) ပါဝင်မည့် widget များ

Main Window တွင်
(က)"Enter a name:"ဟု စာတန်းထိုးရန် Label widget တစ်ခု နှင့် နာမည် ထည့်ရန် Entry widget တစ်ခု
(ခ)Checkbutton တစ်ခု
(ဂ)Combobox တစ်ခု
(ဃ)Action Button တစ်ခု နှင့် ClickMe Function တစ်ခု တို့ ပါဝင်ပါသည်။

In [1]:
# အောက်မှ code သည် jupyter ipython notebook တွင် ပုံများကို ဖော်ပြရန်အတွက် ဖြစ်သည်။ 
from IPython.display import Image
Image(filename="before_data_input.jpg")
Out[1]:
In [2]:
# User ၏  Bio Data များ ထည့်ပြီး မြင်ရမည် window
Image(filename="bio_data.jpg")
Out[2]:

အဆင့်(၂) Grid Layout

Window ကို အကွက် (၉) ကွက် ဖြစ်အောင် စိတ်ပိုင်းရပါမည်။ ထို့ကြောင့် row= 3 , column =3 ဖြစ်သည်။

In [3]:
Image(filename="grid_layout.jpg")
Out[3]:

အဆင့်(၃) "Enter a name:" Label နှင့် Entry widget တည်ဆောက်ခြင်း

ပထမဦးစွာ 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)
In [4]:
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()
In [5]:
Image(filename="Label_and_Entry.jpg")
Out[5]:

အဆင့်(၄) Combobox တည်ဆောက်ခြင်း

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" ဖြစ်သည်။

In [6]:
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()
In [7]:
Image(filename="Combobox.jpg")
Out[7]:

အဆင့်(၅) Creating three checkbuttons

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 ထည့်ပေးရသည်။

In [8]:
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()
In [9]:
Image(filename="checkbutton.jpg")
Out[9]:

အဆင့်(၆) Creating Action Button and Define ClickMe Function

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())))
In [10]:
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()
In [11]:
Image(filename="Data_input.jpg")
Out[11]:
In [12]:
Image(filename="complete.jpg")
Out[12]:

Ref: Python GUI Programming Cookbook by Burkhard A. Meier

  • End - ကောင်းထက်ညွန့်
In [ ]: