Tkinter Grid Kullanımı
Bu eğitimde, pencere öğelerini konumlandırmak için Tkinter ızgara geometri yöneticisini nasıl kullanacağınızı öğreneceksiniz.
Tkinter ızgara geometri yöneticisine giriş
Izgara geometri yöneticisi, widget'ları düzenlemek için satır ve sütun kavramlarını kullanır .
Aşağıda dört satır ve üç sütundan oluşan bir ızgara gösterilmektedir:

Izgaradaki her satır ve sütun bir indeksle tanımlanır. Varsayılan olarak, ilk satırın dizini sıfırdır, ikinci satırın dizini birdir vb. Benzer şekilde, ızgaradaki sütunların indeksleri sıfır, bir, iki vb.'dir.
Bir ızgaradaki satır ve sütunların dizinlerinin sıfırdan başlaması gerekmez. Ayrıca satır ve sütun indekslerinde boşluklar olabiliyor.
Örneğin, sütun indeksleri 1, 2, 10, 11 ve 12 olan bir ızgaraya sahip olabilirsiniz. Daha sonra ızgaranın ortasına daha fazla widget eklemeyi planladığınızda bu kullanışlıdır.
Bir satır ile bir sütunun kesişimine hücre denir . Hücre, widget yerleştirebileceğiniz bir alandır. Bir hücre yalnızca bir widget'ı tutabilir. Bir hücreye iki widget yerleştirirseniz birbirlerinin üstünde olurlar.
Bir hücreye birden fazla widget yerleştirmek için, widget'ları sarmak üzere Frame
veya simgesini kullanır ve veya öğesini hücrenin üzerine yerleştirirsiniz.LabelFrame
Frame
LabelFrame
Bir sütunun genişliği, içerdiği widget'ın genişliğine bağlıdır. Benzer şekilde bir satırın yüksekliği, satırın içerdiği widget'ların yüksekliğine bağlıdır.
Satırlar ve sütunlar yayılabilir. Aşağıda, iki sütuna yayılan hücreye (1,1) ve iki satıra yayılan hücreye (0,2) sahip bir ızgara gösterilmektedir:

Izgarayı ayarlama
Widget'ları bir ızgaraya yerleştirmeden önce, ızgaranın satırlarını ve sütunlarını yapılandırmanız gerekir.
Tkinter, ızgara satırlarını ve sütunlarını yapılandırmak için size iki yöntem sunar:
container.columnconfigure(index, weight)
container.rowconfigure(index, weight)
Kod dili: CSS ( css )
Yöntem , bir kılavuzun columnconfigure()
sütununu yapılandırır .index
weight
Sütunun diğer sütunlara göre ne kadar genişlikte yer kaplayacağını belirler .
Örneğin ağırlığı 2 olan bir sütun, ağırlığı 1 olan bir sütunun iki katı genişlikte olacaktır.
Izgarayı kilitleyin ki içeriğe göre uzamasın
Bir widget'ı ızgaraya yerleştirme
Izgaraya bir widget yerleştirmek için widget'ın grid()
yöntemini kullanırsınız:
widget.grid(**options)
Kod dili: Python ( python )
Yöntem grid()
aşağıdaki parametrelere sahiptir:
Parametreler | Anlam |
---|---|
column | Widget'ı yerleştirmek istediğiniz sütun dizini. |
row | Widget'ı yerleştirmek istediğiniz satır dizini. |
rowspan | Widget'ın yayılabileceği bitişik satırların sayısını ayarlayın. |
columnspan | Widget'ın yayılabileceği bitişik sütunların sayısını ayarlayın. |
sticky | Hücre widget'tan büyükse seçenek, sticky widget'in hangi tarafa yapışması gerektiğini ve hücre içinde widget'ın orijinal boyutunda kaplamadığı fazladan alanın nasıl dağıtılacağını belirtir. |
padx | Widget'ın üstüne ve altına harici dolgu ekleyin. |
çeltik | Widget'ın soluna ve sağına harici dolgu ekleyin. |
ipadx | Widget'ın içine sol ve sağ taraftan dahili dolgu ekleyin. |
ipady | Widget'ın içine üst ve alt taraftan dahili dolgu ekleyin. |
Sticky / Yapışkan
Varsayılan olarak, bir hücre içerdiği widget'tan daha büyük olduğunda ızgara geometri yöneticisi, widget'ı hücrenin merkezine yatay ve dikey olarak yerleştirir.

Bu varsayılan davranışı değiştirmek için seçeneği kullanabilirsiniz sticky
. Yapışkan seçeneği, widget'ın hücrenin hangi kenarına yapışması gerektiğini belirtir.
the değeri sticky
aşağıdaki geçerli değerlere sahiptir:
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 |
NW | Kuzey Batı veya Sol Üst |
NE | Kuzey Doğu veya Sağ Üst |
GD | Güney Doğu veya Sağ Alt |
GB | Güney Batı veya Sol Alt |
NS | NS, widget'ı dikey olarak uzatır. Ancak widget'ı yatay olarak ortalanmış halde bırakır. |
EW | EW, widget'ı yatay olarak uzatır. Ancak widget'ı dikey olarak ortalanmış halde bırakır. |
Widget'ı hücrenin köşesine konumlandırmak istiyorsanız N, S, E ve W tuşlarını kullanabilirsiniz.
Aşağıdaki örnekte, yapışkan seçeneği şu şekilde ayarlanmış bir widget'ın nasıl konumlandırılacağı gösterilmektedir N
:

Widget'ı hücrenin bir tarafına ortalayacak şekilde konumlandırmak istiyorsanız NW (sol üst), NE (sağ üst), SE (sağ alt) ve SW (sol alt) kullanabilirsiniz.
Aşağıdaki örnek, yapışkan seçeneği şu şekilde ayarlandığında bir widget'ın nasıl konumlandırılacağını gösterir NW
:

NS, widget'ı dikey olarak uzatır. Ancak widget'ı yatay olarak ortalanmış halde bırakır:

EW, widget'ı yatay olarak uzatır. Ancak widget'ı dikey olarak ortalanmış halde bırakır:

Dolgu malzemesi
Izgaranın hücreleri arasına dolgu eklemek için padx
ve pady
seçeneklerini kullanırsınız. ve harici dolgulardır padx
:pady
grid(column, row, sticky, padx, pady)
Kod dili: Python ( python )
Widget'ın içine dolgu eklemek için ipadx
ve ipady
seçeneklerini kullanırsınız. ve iç dolgulardır ipadx
:ipady
grid(column, row, sticky, padx, pady, ipadx, ipady)
Kod dili: Python ( python )
İç ve dış dolgular varsayılan olarak sıfırdır.
Tkinter ızgara geometri yöneticisi örneği
Bu örnekte, aşağıdaki gibi bir giriş ekranı tasarlamak için ızgara geometri yöneticisini kullanacağız:

Giriş ekranı, iki sütun ve üç satırdan oluşan bir ızgara kullanır. Ayrıca ikinci sütun, birinci sütunun üç katı genişliğindedir:

Aşağıda tam oturum açma penceresi gösterilmektedir:
import tkinter as tk
from tkinter import ttk
# root window
root = tk.Tk()
root.geometry("240x100")
root.title('Login')
root.resizable(0, 0)
# configure the grid
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=3)
# username
username_label = ttk.Label(root, text="Username:")
username_label.grid(column=0, row=0, sticky=tk.W, padx=5, pady=5)
username_entry = ttk.Entry(root)
username_entry.grid(column=1, row=0, sticky=tk.E, padx=5, pady=5)
# password
password_label = ttk.Label(root, text="Password:")
password_label.grid(column=0, row=1, sticky=tk.W, padx=5, pady=5)
password_entry = ttk.Entry(root, show="*")
password_entry.grid(column=1, row=1, sticky=tk.E, padx=5, pady=5)
# login button
login_button = ttk.Button(root, text="Login")
login_button.grid(column=1, row=3, sticky=tk.E, padx=5, pady=5)
root.mainloop()
Kod dili: Python ( python )
Nasıl çalışır.
İlk olarak, columnconfigure()
ızgaranın birinci ve ikinci sütunlarının ağırlığını ayarlamak için yöntemi kullanın. İkinci sütunun genişliği, birinci sütunun genişliğinden üç kat daha büyüktür.
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=3)
Kod dili: Python ( python )
İkinci olarak, kullanıcı adı etiketini kılavuzun ilk satırının ilk sütununa ve kullanıcı adı girişini ikinci sütuna yerleştirin:
username_label = ttk.Label(root, text="Username:")
username_label.grid(column=0, row=0, sticky=tk.W, padx=5, pady=5)
username_entry = ttk.Entry(root, textvariable=username)
username_entry.grid(column=1, row=0, sticky=tk.E, padx=5, pady=5
Kod dili: Python ( python )
Üçüncü olarak, şifre etiketini ve girişi ikinci satırın birinci ve ikinci sütunlarına yerleştirin:
password_label = ttk.Label(root, text="Password:")
password_label.grid(column=0, row=1, sticky=tk.W, padx=5, pady=5)
password_entry = ttk.Entry(root, textvariable=password, show="*")
password_entry.grid(column=1, row=1, sticky=tk.E, padx=5, pady=5)
Kod dili: Python ( python )
Son olarak giriş butonunu üçüncü sıraya konumlandırın. sticky
Seçeneği olarak ayarlandığından düğme E
üçüncü satırın sağına hizalanır.
login_button = ttk.Button(root, text="Login")
login_button.grid(column=1, row=3, sticky=tk.E, padx=5, pady=5)
Kod dili: Python ( python )
Aşağıda aynı program gösterilmektedir. Ancak bunun yerine nesne yönelimli programlamayı kullanır:
import tkinter as tk
from tkinter import ttk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry("240x100")
self.title('Login')
self.resizable(0, 0)
# configure the grid
self.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=3)
self.create_widgets()
def create_widgets(self):
# username
username_label = ttk.Label(self, text="Username:")
username_label.grid(column=0, row=0, sticky=tk.W, padx=5, pady=5)
username_entry = ttk.Entry(self)
username_entry.grid(column=1, row=0, sticky=tk.E, padx=5, pady=5)
# password
password_label = ttk.Label(self, text="Password:")
password_label.grid(column=0, row=1, sticky=tk.W, padx=5, pady=5)
password_entry = ttk.Entry(self, show="*")
password_entry.grid(column=1, row=1, sticky=tk.E, padx=5, pady=5)
# login button
login_button = ttk.Button(self, text="Login")
login_button.grid(column=1, row=3, sticky=tk.E, padx=5, pady=5)
if __name__ == "__main__":
app = App()
app.mainloop()
Kod dili: Python ( python )
Özet
- Izgaradaki bir sütunun ve bir satırın ağırlığını belirtmek için
columnconfigure()
ve yöntemlerini kullanın .rowconfigure()
grid()
Bir widget'ı ızgaraya yerleştirmek için yöntemi kullanın .sticky
Widget'ın bir hücredeki konumunu hizalamak ve widget'ın nasıl uzatılacağını tanımlamak için seçeneği kullanın .- İç ve dış dolgular eklemek için
ipadx
veipady
tuşlarını kullanın .padx
pady
Kaynak