ดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

     ในการสร้างแอปพลิเคชันเพื่อใช้งานจริงนั้น อาจต้องมีวิดเจ็ตมากกว่า 1 ตัวอยู่บนวินโดว์เดียวกัน ดังนั้น เราจำเป็นต้องจัดวางวิดเจ็ตเหล่านั้นให้เป็นระเบียบและดูสวยงาม เพื่อให้ใช้งานง่ายและลดความสับสน ซึ่งใน Tkinter จะกำหนดโครงร่างเพื่อจัดวางวิดเจ็ตลงบนสิ่งที่เรียกว่า คอนเทนเนอร์ (Container) เพื่อจัดการกับตำแหน่งหรือโครงสร้างของปุ่มต่างๆ ทำให้เราสามารถวางหรือขยายปุ่มได้ และในบทเรียนนี้เราจะมาพูดถึงการจัดโครงร่างด้วยเมธอด pack() กัน

การจัดโครงร่างด้วยเมธอด pack()

     วิดเจ็ตเกือบทั้งหมดของ Tkinter จะต้องมีเมธอด pack() เพื่อใช้ในการกำหนดโครงสร้างของตัวมันเองบนคอนเทอเนอร์ เช่น วินโดว์ หรือ เฟรม โดยเมธอดดังกล่าวจะมีออปชัน (Option) หรือคีย์เวิร์ดอาร์กิวเมนต์ สำหรับกำหนดลักษณะการจัดวางดังนี้

side เป็นการกำหนดทิศทางการจัดเรียงว่าจะเริ่มจากด้านใด โดยมีค่า คือ TOP, LEFT, RIGHT, BOTTOM
padx เป็นการกำหนดระยะห่างในแนวแกน x (แนวนอน) กับวิดเจ็ตอันที่อยู่ติดกัน
pady เป็นการกำหนดระยะห่างในแนวแกน y (แนวตั้ง) กับวิดเจ็ตอันที่อยู่ติดกัน
ipadx เป็นการกำหนดระยะห่างในแนวแกน x ระหว่างเนื้อหากับขอบของวิดเจ็ต
ipady เป็นการกำหนดระยะห่างในแนวแกน y ระหว่างเนื้อหากับขอบของวิดเจ็ต
fill หากมีพื้นที่ว่างในแนวแกน x,y จะยืดวิดเจ็ตออกไปจนเต็มพื้นที่ หรือมากที่สุด
expand หากมีการขยายวินโดว์ จะกระจายตำแหน่งให้พอดีกับพื้นที่โดยอัตโนมัติ
anchor เป็นการกำหนดตำแหน่งจัดวางหรือจุดยึด โดยระบุเป็นชื่อทิศตามแนวขอบของคอนเทนเนอร์ โดยมีค่า คือ N, E, S, W, NE, SE, NW, SW และ CENTER

     จากออปชัน หรือคีย์เวิร์ดของเมธอด pack() ที่ได้กล่าวมานั้น ตามปกติแล้วเรามักจะเลือกกำหนดเพียงบางอัน แต่จะต้องให้สอดคล้องกันและไม่ขัดแย้งกัน หรือบางกรณีอาจใช้ร่วมกันจึงจะเห็นผลอย่างชัดเจน ไม่อย่างนั้นผลลัพธ์ที่ได้อาจจะผิดเพี้ยนไปจากที่เราคาดหวัง

ตัวอย่างการใช้งาน

from tkinter import *

window = Tk()
window.geometry('300x150')
window.config(bg='light green')

bt1 = Button(text='ONE')
bt2 = Button(text='TWO')
bt3 = Button(text='THREE')

bt1.pack(side=TOP, fill=X)
bt2.pack(anchor=CENTER,expand=YES)
bt3.pack(side=BOTTOM, fill=X)

mainloop()

ผลลัพธ์

ผลลัพธ์การใช้งานออปชันต่างๆ

ผลลัพธ์การจัดโครงร่าง

     จากผลลัพธ์หากเรากำหนดออปชัน fill วิดเจ็ตจะขยายขนาดให้เต็มพื้นที่ตามแนวที่เราได้กำหนด (X, Y) แต่จะต้องไม่มีวิดเจ็ตอื่นขวางอยู่ในแนวแกนนั้นๆ ส่วนออปชัน expand จะทำให้วิดเจ็ตกระจายตำแหน่งจนพอดีกับขนาดของคอนเทนเนอร์ หากเราทำการขยายขนาดของคอนเทนเนอร์ ตำแหน่งของวิดเจ็ตนั้นก็จะเปลี่ยนตามไปด้วย

 

 

ช่องทางการศึกษาเพิ่มเติม

การจัดโครงร่างด้วยเมธอด place() ในโมดูล Tkinter

การจัดโครงร่างด้วยเมธอด grid() ในโมดูล Tkinter 

Chayapol
, การจัดโครงร่างด้วยเมธอด pack() ในโมดูล Tkinter - by บทเรียน Python GUI,
0 1 0 5
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
Q - สอบถามทำให้ mouse over ที่ไอคอนรูปวงกลม แล้วให้แสดงรูปที่เป็นข้อความขึ้น
โดย eange08 ศ 05 มี.ค. 2021 4:52 pm บอร์ด Joomla Dev
1
4
ศ 05 มี.ค. 2021 5:47 pm โดย tsukasaz
กลุ่มประเทศผู้ส่งออกข้าว
โดย jataz2 ศ 05 มี.ค. 2021 11:07 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
11
ศ 05 มี.ค. 2021 11:07 am โดย jataz2
Q - พอมี module หรือ plugin ที่เป็นพวก social อย่าง line, ig บ้างไหมค่ะ
โดย eange08 พฤ 04 มี.ค. 2021 5:21 pm บอร์ด Joomla Dev
1
7
พฤ 04 มี.ค. 2021 5:26 pm โดย tsukasaz
reboot เครื่องไม่ได้ครับ
โดย chakirin.bfds พฤ 04 มี.ค. 2021 12:25 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
2
34
พฤ 04 มี.ค. 2021 3:14 pm โดย chakirin.bfds
แก้ css ส่วน padding ด้วย override แล้วไม่เปลี่ยนตาม
โดย eange08 พ 03 มี.ค. 2021 4:43 pm บอร์ด Joomla Development
1
22
พ 03 มี.ค. 2021 4:47 pm โดย tsukasaz
Joomla PDPA ใช้ EB Sticky Cookie Notice โมดูล แสดงแจ้งเตือนการเก็บข้อมูล Cookie ของผู้ใช้งาน
โดย tsukasaz พ 03 มี.ค. 2021 4:39 pm บอร์ด Joomla Extension Review
0
21
พ 03 มี.ค. 2021 4:39 pm โดย tsukasaz
อัพเดทหรือยัง? ปรับปรุงเรื่องความปลอดภัย 9 จุด ใน Joomla 3.9.25
โดย tsukasaz พ 03 มี.ค. 2021 12:28 pm บอร์ด MindPHP News & Feedback
0
43
พ 03 มี.ค. 2021 12:28 pm โดย tsukasaz
B - เปิดหน้าเว็บด้วย template เป็น Shaper_megadeal_ii แล้ว Error 404
โดย eange08 พ 03 มี.ค. 2021 12:04 pm บอร์ด เว็บไซต์ Rnyard - Tester
2
7
พ 03 มี.ค. 2021 7:25 pm โดย tsukasaz