ใน 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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ยัวร์คอนเนคส์ -Yourconnect.com
โดย webhosting พฤ 02 ก.ค. 2009 1:49 pm บอร์ด Web Hosting Review - Free Host Share Host VPS
0
1565
พฤ 02 ก.ค. 2009 1:49 pm โดย webhosting View Topic ยัวร์คอนเนคส์ -Yourconnect.com
บางกอกเวปโฮสติ้ง - Bangkokwebhosting.com
โดย webhosting พฤ 02 ก.ค. 2009 1:37 pm บอร์ด Web Hosting Review - Free Host Share Host VPS
0
1562
พฤ 02 ก.ค. 2009 1:37 pm โดย webhosting View Topic บางกอกเวปโฮสติ้ง - Bangkokwebhosting.com
บางกอกอินเตอร์โฮสท์ Bangkokinterhost
โดย webhosting พฤ 02 ก.ค. 2009 1:29 pm บอร์ด Web Hosting Review - Free Host Share Host VPS
1
5135
อ 23 พฤษภาคม 2017 10:53 am โดย mindphp View Topic บางกอกอินเตอร์โฮสท์ Bangkokinterhost
ตุ๊กตุ๊กเซิฟเวอร์ - tuktukserver.com
โดย webhosting พฤ 02 ก.ค. 2009 1:23 pm บอร์ด Web Hosting Review - Free Host Share Host VPS
0
1385
พฤ 02 ก.ค. 2009 1:23 pm โดย webhosting View Topic ตุ๊กตุ๊กเซิฟเวอร์ - tuktukserver.com
การเช็ค ว่าภาพในเพจ โหลดสำเร็จหรือไม่ ทำไงครับ
โดย niponnet พฤ 02 ก.ค. 2009 10:38 am บอร์ด HTML CSS
1
1855
พฤ 02 ก.ค. 2009 2:01 pm โดย mindphp View Topic การเช็ค ว่าภาพในเพจ โหลดสำเร็จหรือไม่ ทำไงครับ
ปัญหาของมือใหม่ joomla ติดตั้งอะไรไม่ได้เลย
โดย max_joomla พฤ 02 ก.ค. 2009 3:42 am บอร์ด สอบถามปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
10
8547
อ 22 พ.ย. 2011 11:21 am โดย mindphp View Topic ปัญหาของมือใหม่ joomla ติดตั้งอะไรไม่ได้เลย
generic host process for win32 services
โดย mindphp พฤ 02 ก.ค. 2009 2:54 am บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
1497
พฤ 02 ก.ค. 2009 2:54 am โดย mindphp View Topic generic host process for win32 services
อยากรู้วิธีส่งข้อมูลไปยังเครื่องอื่นครับ
โดย paojung พฤ 02 ก.ค. 2009 2:28 am บอร์ด Programming - PHP
1
748
พฤ 02 ก.ค. 2009 2:55 am โดย mindphp View Topic อยากรู้วิธีส่งข้อมูลไปยังเครื่องอื่นครับ