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:

Tkinter Grid Kullanımı

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 Frameveya simgesini kullanır ve veya öğesini hücrenin üzerine yerleştirirsiniz.LabelFrameFrameLabelFrame

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:

Tkinter Grid Kullanımı

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

weightSü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

SolCerCeve.grid_propagate(False)

 

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, stickywidget'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.

Tkinter Grid Kullanımı

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 stickyaş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:

Tkinter Grid Kullanımı

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:

Tkinter Grid Kullanımı

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

Tkinter Grid Kullanımı

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

Tkinter Grid Kullanımı

Dolgu malzemesi

Izgaranın hücreleri arasına dolgu eklemek için padxve padyseç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 ipadxve ipadyseç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:

Tkinter Grid Kullanımı

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:

Tkinter Grid Kullanımı

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=5Kod 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. stickySeç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 .
  • stickyWidget'ı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 ipadxve ipadytuşlarını kullanın .padxpady

Kaynak

Yorumunuzu Ekleyin


Yükleniyor...
    Yükleniyor...