Tkinter Pack Kullanımı
Bu eğitimde, Tkinter geometri yöneticisini ve onu bir penceredeki widget'ları düzenlemek için nasıl kullanacağınızı öğreneceksiniz .
Tkinter paket geometri yöneticisine giriş
pack()
Şu ana kadar bir pencereye widget ekleme yöntemini nasıl kullanacağınızı öğrendiniz .
Tkinter, bir penceredeki widget'ları düzenlemek için geometri yöneticisini kullanır. Yöntem pack()
, Tkinter'deki üç geometri yöneticisinden biridir. Diğer geometri yöneticileri grid()
ve'dir place()
.
Paket, kaplarının kenarlarına widget'lar yerleştirir. Kap kök pencere veya çerçeve olabilir .
Her seçeneği daha iyi anlamak için basit bir programla başlayalım.
Tkinter paketi geometri yöneticisi örneği
Geometri yöneticisinin pack
birçok konfigürasyonu vardır. En sık kullanılan seçenekler şunlardır: fill
, expand
, side
, anchor
, ipadx
, ipady
, padx
, ve pady
.
1) Varsayılan seçeneklerle paketleyin
Aşağıda, kök pencerede iki Labelpack
widget'ını düzenlemek için geometri yöneticisinin nasıl kullanılacağı gösterilmektedir :
import tkinter as tk
root = tk.Tk()
root.title('Pack Demo')
root.geometry("350x200")
# box 1
box1 = tk.Label(root, text="Box 1", bg="green", fg="white")
box1.pack()
# box 2
box2 = tk.Label(root, text="Box 2", bg="red", fg="white")
box2.pack()
root.mainloop()
Kod dili: PHP ( php )

Bu örnekte iki kutumuz var: yeşil ve kırmızı. pack()
Varsayılan seçenekleri kullandığı için kutuları üst üste yerleştirir .
Diğer seçeneklere geçmeden önce pencerenin koordinatlarını x
ve koordinatlarını anlamanız gerekir :y

Pencerenin sol üst köşesi koordinatlı başlangıç ??noktasıdır (0,0)
. X koordinatı soldan sağa doğru artarken, y koordinatı yukarıdan aşağıya doğru artar.
2) ipadx ve ipady: dahili dolguların ayarlanması
ipadx
Widget'lara yönelik dahili dolgular oluşturmak için ve parametrelerini kullanırsınız ipady
:
ipadx
sola ve sağa dolgu veya x ekseni boyunca dolgu oluşturur.ipady
üstte ve altta dolgu veya y ekseni boyunca dolgu oluşturur.
Örneğin, aşağıdaki program her kutunun iç dolgularını ayarlamak için ipadx
ve parametrelerini kullanır:ipady
import tkinter as tk
root = tk.Tk()
root.title('Pack Demo')
root.geometry("350x200")
# box 1
box1 = tk.Label(root, text="Box 1", bg="green", fg="white")
box1.pack(ipadx=10, ipady=10)
# box 2
box2 = tk.Label(root, text="Box 2", bg="red", fg="white")
box2.pack(ipadx=10, ipady=10)
root.mainloop()
Kod dili: Python ( python )
Çıktı:

3) Doldurma seçeneğini kullanma
Bu fill
seçenek, modülde tanımlanan üç dize sabitinden birini kabul eder tkinter
.
tkinter.X
– x ekseni boyunca mevcut alanı dolduruntkinter.Y
– y ekseni boyunca mevcut alanı dolduruntkinter.BOTH
– her iki eksen boyunca mevcut alanı doldurun
'x'
Bu dize sabitleri , 'y'
ve'ye eşdeğerdir 'both'
.
tkinter
Modülü olarak içe aktarırsanız tk
, , sabitlerine referans vermeniz ve örneğin , , ve önekini kullanmanız gerektiğini X
unutmayın .Y
BOTH
tk
tk.X
tk.Y
tk.BOTH
Aşağıdaki örnek, fill
ilk etiket seçeneğini ayarlamak için fill parametresini kullanır:
box1.pack(ipadx=20, ipady=20, fill=tk.X)
Kod dili: Python ( python )
… widget'ın x ekseni boyunca mevcut tüm alanı doldurduğunu göreceksiniz:

Ancak aşağıdaki şekilde değiştirirseniz fill=tk.Y
:
box1.pack(ipadx=20,ipady=20,fill=tk.Y)
Kod dili: Python ( python )
… ilk widget'ın tüm boşlukları dikey olarak doldurmadığını göreceksiniz:

Bunun nedeni, pack
aşağıdaki resimde vurgulandığı gibi her widget'a alan ayırmasıdır:

Bu seçeneği kullandığınızda fill
, her widget'ın doldurabileceği alan, kendilerine tahsis edilen alanlarla sınırlandırılır.
4) Genişletme seçeneğinin kullanılması
Bu expand
seçenek, widget'a daha fazla kullanılabilir alan ayırır. expand
Seçeneği ilk widget'a eklerseniz :
box1.pack(ipadx=20,ipady=20,expand=True)
Kod dili: Python ( python )
…aşağıdaki çıktıyı alacaksınız:

Bu örnekte, ilk widget, ikinci widget'a ayrılan alan dışında penceredeki tüm kullanılabilir alanı kaplar.
İlk widget'ın seçeneği olmadığından fill
tahsis edilen alanın ortasında yüzer.
fill
İlk widget'ın seçeneğini şu şekilde ayarlarsanız tk.BOTH
:
box1.pack(ipadx=20, ipady=20, fill=tk.BOTH, expand=True)
Kod dili: Python ( python )
…ilk widget'ın kendisine ayrılan alanın tamamını doldurduğunu göreceksiniz:

expand
Seçeneği her iki widget'a da eklerseniz , pack
yönetici alanı onlara eşit olarak tahsis edecektir. Örneğin:
import tkinter as tk
root = tk.Tk()
root.title('Pack Demo')
root.geometry("350x200")
# box 1
box1 = tk.Label(root, text="Box 1", bg="green", fg="white")
box1.pack(ipadx=20, ipady=20, fill=tk.BOTH, expand=True)
# box 2
box2 = tk.Label(root, text="Box 2", bg="red", fg="white")
box2.pack(ipadx=20, ipady=20, expand=True)
root.mainloop()
Kod dili: Python ( python )
Çıktı:

İkinci widget'ın bu seçeneğe sahip olmadığından ayrılan alanın tamamını kullanmadığına dikkat edin fill
.
expand
Tüm widget'lar için ayarını yaptığınızda True
, pack
geometri yöneticisi boşlukları onlara eşit şekilde tahsis edecektir. Ancak bu yalnızca tüm widget'ların aynı side
.
5) Bağlantı seçeneğini kullanma
anchor
Widget'ı ayrılan alanın kenarına sabitlemenize olanak tanır . Aşağıdaki değerlerden birini kabul eder:
Yapışkan | Tanım |
---|---|
N | Kuzey veya Üst Merkez |
S | Güney veya Alt Merkez |
e | Doğu veya Sağ Merkez |
K | Batı veya Sol Merkez |
Kuzeybatı | Kuzey Batı veya Sol Üst |
kuzeydoğu | Kuzey Doğu veya Sağ Üst |
GD | Güney Doğu veya Sağ Alt |
GB | Güney Batı veya Sol Alt |
MERKEZ | Merkez |
Aşağıdaki resimde bağlantı seçenekleri gösterilmektedir:

E
Örneğin, aşağıdaki program, bağlantıların ve bağlantıların kullanıldığı widget'ları gösterir W
:
import tkinter as tk
root = tk.Tk()
root.title('Pack Demo')
root.geometry("350x200")
# box 1
box1 = tk.Label(root, text="Box 1", bg="green", fg="white")
box1.pack(ipadx=20, ipady=20, anchor=tk.E, expand=True)
# box 2
box2 = tk.Label(root, text="Box 2", bg="red", fg="white")
box2.pack(ipadx=20, ipady=20, anchor=tk.W, expand=True)
root.mainloop()
Kod dili: PHP ( php )
Çıktı:

6) Yan seçeneğin kullanılması
Bu side
seçenek widget'ın hizalamasını belirtir:
tkinter.TOP
tkinter.LEFT
tkinter.RIGHT
tkinter.BOTTOM
'left'
Bunlar , 'top'
, 'right'
ve ile eşdeğerdir 'bottom'
.
Varsayılanlar side
olarak TOP
. Başka bir deyişle, widget'lar kapsayıcılarının üst kısmına hizalanır.
Aşağıdaki örnek, side
ilk widget'ın değerini şu şekilde ayarlar tkinter.LEFT
:
import tkinter as tk
root = tk.Tk()
root.title('Pack Demo')
root.geometry("350x200")
# box 1
box1 = tk.Label(root, text="Box 1", bg="green", fg="white")
box1.pack(ipadx=20, ipady=20, fill=tk.BOTH, expand=True, side=tk.LEFT)
# box 2
box2 = tk.Label(root, text="Box 2", bg="red", fg="white")
box2.pack(ipadx=20, ipady=20, fill=tk.BOTH, expand=True)
root.mainloop()
Kod dili: Python ( python )
Çıktı:

Bu örnekte expand
seçenek beklediğiniz gibi çalışmayabilir. Bunun nedeni widget'ların farklı taraflarının olmasıdır.
Alanlarını yeniden daha da güzelleştirmek için şunları yapabilirsiniz:
side
Her iki widget'ın da ayarını şu şekilde yapın:'left'
- Veya bir widget'in kenarını olarak
'left'
ve diğer widget'in kenarını da olarak ayarlayın'right'
.
Örneğin:
import tkinter as tk
root = tk.Tk()
root.title('Pack Demo')
root.geometry("350x200")
# box 1
box1 = tk.Label(root, text="Box 1", bg="green", fg="white")
box1.pack(ipadx=20, ipady=20, fill=tk.BOTH, expand=True, side=tk.LEFT)
# box 2
box2 = tk.Label(root, text="Box 2", bg="red", fg="white")
box2.pack(ipadx=20, ipady=20, fill=tk.BOTH, expand=True, side=tk.RIGHT)
root.mainloop()
Kod dili: Python ( python )
Çıktı:

6) padx ve pady: harici dolguları ayarlayın
padx
Widget'ların dış dolgularını ayarlamak için ve parametrelerini kullanırsınız pady
:
padx
– x ekseni boyunca mevcut alanı doldurunpady
– y ekseni boyunca mevcut alanı doldurun
Örneğin:
import tkinter as tk
root = tk.Tk()
root.title('Pack Demo')
root.geometry("350x200")
# box 1
box1 = tk.Label(root, text="Box 1", bg="green", fg="white")
box1.pack(ipadx=20, ipady=20, padx=20, pady=20,
fill=tk.BOTH, expand=True)
# box 2
box2 = tk.Label(root, text="Box 2", bg="red", fg="white")
box2.pack(ipadx=20, ipady=20, padx=20, pady=20,
fill=tk.BOTH, expand=True)
root.mainloop()
Kod dili: PHP ( php )
Çıktı:

Paket geometri yöneticisi ne zaman kullanılmalı?
Paket geometri yöneticisi aşağıdakiler için uygundur:
- Widget'ları yukarıdan aşağıya bir düzende yerleştirme.
- Widget'ları yan yana yerleştirme düzeni.
Aşağıdaki örneğe bakın:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title('Pack Demo')
root.geometry("300x200")
ipadding = {'ipadx': 10, 'ipady': 10}
# place widgets top down
label1 = tk.Label(root, text='Box 1', bg="red", fg="white")
label1.pack(**ipadding, fill=tk.X)
label2 = tk.Label(root, text='Box 2', bg="green", fg="white")
label2.pack(**ipadding, fill=tk.X)
label3 = tk.Label(root, text='Box 3', bg="blue", fg="white")
label3.pack(**ipadding, fill=tk.X)
# place widgets side by side
label4 = tk.Label(root, text='Left', bg="cyan", fg="black")
label4.pack(**ipadding, expand=True, fill=tk.BOTH, side=tk.LEFT)
label5 = tk.Label(root, text='Center', bg="magenta", fg="black")
label5.pack(**ipadding, expand=True, fill=tk.BOTH, side=tk.LEFT)
label6 = tk.Label(root, text='Right', bg="yellow", fg="black")
label6.pack(**ipadding, expand=True, fill=tk.BOTH, side=tk.LEFT)
root.mainloop()
Kod dili: Python ( python )
Çıktı:

Oturum açma formu örneği oluşturmak için paketi kullanma
Aşağıdaki örnek, bir oturum açma formu oluşturmak için pack() yöntemini kullanır:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title('Login')
root.geometry("350x220")
fields = {}
fields['username_label'] = ttk.Label(text='Username:')
fields['username'] = ttk.Entry()
fields['password_label'] = ttk.Label(text='Password:')
fields['password'] = ttk.Entry(show="*")
for field in fields.values():
field.pack(anchor=tk.W, padx=10, pady=5, fill=tk.X)
ttk.Button(text='Login').pack(anchor=tk.W, padx=10, pady=5)
root.mainloop()
Kod dili: JavaScript ( javascript )
Çıktı:

Nasıl çalışır.
İlk olarak, widget'ları depolamak için bir sözlük başlatın:
fields = {}
İkinci olarak, Etiket ve Giriş widget'larını oluşturun:
fields['username_label'] = ttk.Label(text='Username:')
fields['username'] = ttk.Entry()
fields['password_label'] = ttk.Label(text='Password:')
fields['password'] = ttk.Entry(show="*")
Kod dili: JavaScript ( javascript )
Üçüncüsü, widget'ları yineleyin ve paketleyin:
for field in fields.values():
field.pack(anchor=tk.W, padx=10, pady=5, fill=tk.X)
Son olarak giriş butonunu ekleyin:
ttk.Button(text='Login').pack(anchor=tk.W, padx=10, pady=5)
Kod dili: JavaScript ( javascript )
Özet
- Widget'ları yukarıdan aşağıya veya yan yana düzenlemek için Tkinter paketi geometri yöneticisini kullanın.
- Widget'ların nasıl düzenleneceğini kontrol etmek için paket geometri yöneticisinin
fill
,expand
ve seçeneklerini kullanın .side