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

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

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

     เมธอด place() จะเป็นการอาศัยการระบุจุดพิกัดหรือระยะเทียบกับคอนเทนเนอร์ ซึ่งทิศทางจะเป็นในแนวแกน X และ Y โดยเมธอด place() มีออปชันหรือคีย์เวิร์ด สำหรับกำหนดลักษณะการจัดวางตำแหน่งต่างๆ ดังต่อไปนี้

X, Y เป็นการกำหนดตำแหน่งจากแนวแกน x และ y โดยมุมบนซ้ายของวิดเจ็ตจะอยู่ตรงตำแหน่ง x,y หรือระยะจากแนวขอบด้านซ้ายบนนั่นเอง
relx, rely เป็นการกำหนดตำแหน่งระยะในแนวแกน x และ y ให้สัมพันธ์กับขนาดของคอนเทนเนอร์ ซึ่งเราต้องกำหนดค่าให้อยู่ระหว่าง 0-1 และค่าดังกล่าวจะถูกนำไปเปรียบเทียบเป็นเปอร์เซ็นของความกว้างและความสูงคอนเทนเนอร์
width, height ขนาดของความกว้างและความสูงของวิดเจ็ตตามลำดับ
relwidth, relheight เป็นการกำหนดขนาดความกว้างและความสูง ให้สัมพันธ์กับขนาดของคอนเทนเนอร์ ซึ่งต้องกำหนดค่าให้อยู่ระหว่าง 0-1 และค่าดังกล่าวจะถูกนำไปเปรียบเทียบเป็นเปอร์เซ็นต์ของความกว้างและสูงคอนเทนเนอร์

     ออปชัน x และ y หากเราจัดวางด้วยเมธอด place() แม้จะเปลี่ยนขนาดของคอนเทนเนอร์ แต่วิดเจ็ตจะอยู่ที่ตำแหน่งเดิมตลอด แต่ออปชัน relx และ rely หากเราจัดวางด้วยเมธอด place() เมื่อเราเปลี่ยนขนาดของคอนเทนเนอร์ วิดเจ็ตจะเปลี่ยนตำแหน่งตามไปด้วย เพื่อรักษาระยะให้สัมพันธ์กันเท่าเดิม

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

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.place(x=10,y=20)
bt2.place(relx=0.5,rely=0.5)
bt3.place(x=10, y=100,width=80, relheight=0.2)

mainloop()

ผลลัพธ์

ผลลัพธ์การกำหนดโครงร่าง

ผลลัพธ์ที่ 1

 

ผลลัพธ์การขยายขนาด

ผลลัพธ์ที่ 2

     และถ้าหากเราใช้ออปชัน width/height วิดเจ็ตจะมีขนาดคงที่แต่หากใช้ relwidth/relheight วิดเจ็ตจะเปลี่ยนไปตามขนาดของคอนเทนเนอร์ ซึ่งเราไม่จำเป็นต้องกำหนดทั้ง width และ height หรือทั้ง relwidth และ relheight ก็ได้ อาจมีเพียงอันใดอันหนึ่งก็พอ

 

 

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

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

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

Chayapol
, การจัดโครงร่างด้วยเมธอด place() ในโมดูล 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