PYTHON TKINTER KÜTÜPHANESİ

Kaan Koska
7 min readMay 10, 2021

Tkinter python dilinde kullanıcı arayüzü oluşturmada kullanılan bir kütüphanedir projeye import edildiği taktirde Linux Windows ve mac os için yapılmış projelerde kullanıcı arayüzü oluşturmak için rahatça kullanılabilir Tkinter kütüphanesi frederik lundh tarafından yazılmıştır1 tkinter kütüphanesi pythonda gümülü sistem olarak çalışır. Tkinter içinde wigetlar bulundurur bu wigetların her biri sınıftır örneğin label kullanıcı UI kısmına yazı yazmak için kullandığımız bir tkinter wigetı aynı zamanda bir sınıfıdır kütüphanenin genel çalışma mantığı budur farklı classlar buton, label gibi ve bu wigetların her biri class olduğu için her birinin farklı farklı alt özellik ve fonksiyonları vardır. Tkinter kütüphanesi basit ve akıcı kullanımıyla öne çıkmaktadır basit ve sade arayüzler geliştirmek için idealdir projenin son kullanıcıya ulaşan kısmı olan kullanıcı UI bölümü her proje için büyük önem taşır. Python da tkinter gibi kullanıcı arayüzü oluşturabileceğiniz birkaç kütüphane vardır bunlar. PyGTK PyQT wxPython kütüphaneleridir ancak Tkinterı bu kütüphanelerden ayıran daha basit olması ve python tarafından desteklenen bir arayüz kütüphanesi olamasıdır.

Tkinter kütüphanesi ana widgetlarının incelenmesi

Tkinter kütüphanesinde label classı ve pack() fonksiyonu Tkinter ile kullanıcı arayüzü oluşturabilmemiz için ilk olarak bir ana pencereye ihtiyacımız var daha sonra uygulamaya eklediğimiz her UI değişkenini bu pencereye bağlayarak o pencerede gözükmesini sağlayacağız bunun için ilk olarak from Tkinter import * yazacağız böylece Tkinter kütüphanesinin bütün özelliklerini projemize import etmiş olacağız daha sonra from Tkinter import * şeklinde aktarmamızın diğer bir sebebi ise işimizi kolaylaştırmak eğer projeye bu şekilde import edersek Tk() yazdığımızda ekranda boş bir pencere görünecektir yani kütüphanenin kullanımını çok kolaylaştırmış olacağız ancak eğer import from tkinter şeklinde import etmiş olsaydık Tkinter.Tk() şeklide kod yazmamız gerekecekti bu örnekle karşımızda gözüken boş pencere kullandığınız işletim sistemine göre değişebilir bunu birkaç görsel ile göstereceğim

gördüğünüz gibi iki örnekte de aynı kodlar yazılmış olmasına rağmen arayüzler arasında görsel farklılıklar var ancak bu görsel farklılıklar işlevsel olarak bir sorun ya da farklılık oluşturmuyor

from Tkinter import * Tk() Bu kodları yazdığımızda Tkinter kütüphanesinin Tk classına ulaşıp boş bir pencere oluşturmuş oluyoruz evet ancak bu pencere hemen geri kapanıp çok kısa bir süre boyunca ekranda gözükecekitir bu oluşturduğumuz pencereyi biz kapatana kadar ekranda görmek istiyorsak eğer mainloop() yazmalıyız. Yani biz kapatana kadar gözükücek bir ekran için from Tkinter import * Tk() mainloop() yazmalıyız mainloop fonksiyonu sonsuz bir döngü gibi çalışarak kendisinden önce yazılımış kodlar Tk içerisinde çalıştırarak kullanıcı ekranı kapatmadığı sürece ekranı aktif tutmamızı sağlar ancak eğer bir python IDE si kullanıyorsanız bu fonksiyonu kullanmanıza gerek yok çünkü daha önce de söylediğim gibi tkinter kütüphanesi python tarafından desteklenen bir UI kütüphanesi bu yüzden neredeyse tüm python IDE leri tkinter fonksiyonlarını otomatik olarak destekliyor. Tkinter ile oluşturduğumuz UI wigetlarını o wigetlar göstermek istediğimiz pencereye atamamız gerekiyor bu atamayı bağlamak gibi düşünebiliriz örneğin çok pencereli bir kullanıcı arayüzünde iki farklı labelımız var bunlardan birini 1. Sayfaya diğerini 2. Sayfaya atmak istiyoruz bunun için iki label değişkenini de istediğimiz sayfalara bağlamamız lazım bu bağlama için tkinter da ve diğer bir kullanıcı arayüzü oluşturma kütüphanesi olan pyqt5 da birkaç farklı fonksiyon var bunlar Pack() Place() Grid() Bu fonksiyonların hepsinin farklı kullanım yerleri ve amaçları var ancak bütün olarak bakıldığında 3 fonksiyonda ekrana UI elementleri iliştirmemize yarıyor ancak tkinter kütüphanesinde bunun için pack fonksiyonunu kullanacağız

Örneğin bir labalı penceremizde görünebilir yapmak için ilk olarak temiz ve daha açık gözükmesi adına Tk() yi yani ana penceremi ekran değişkenime atıyorum from Tkinter import * ekran = Tk() lb = Label(text=”HOŞGELDİNİZ!!”) lb.pack() mainloop() yukarıda görüldüğü üzere ilk olarak Tkinter kütüphanemi import ediyorum daha sonra Tk() yani ana penceremi ekran değişkenime atıyorum daha sonra ise pencereme bir label ve bu labela bir text ekliyorum daha sonra bu labelı pencereme pack() fonksiyonu ile bağlıyorum böylece bir form ekranı ve o ekranın içinde hoş geldiniz yazan bir labalım olmuş olyor. Label içindeki yazının rengini lb = Label(text = “Hata”, fg=”red”) yazarak kırmızı olarak değiştirebiliriz

Tkinter Kütüphanesinde Buton Class’ı

Butonları basit bi şekilde düşünücek olursak tıklandıklarında işlev yerine getiren UI componentleridir diyebiliriz aslında buton componenti daha önce kullandığımız label componenti ile kullanım tazı açısından çok benzer yalnızca buton componentimizde comment bölümü var buraya butona tıklandığında o butonun hangi işlemi yapması gerektiğini söyleyeceğimiz fonksiyon bulunuyor böylece butona tıklanması sonucunda programımız fonksiyona yazdığımız kodları çalıştırıyor ve uygulamamıza bir mekaniklik bir işlev kazandırmış oluyoruz. from Tkinter import * ekran = Tk() tus = Button(text=”çık”, command = ekran.quit) tus.pack()

mainloop() yukarıdaki kod bloğunda tus değişkenine atadığım ve ekran.quit() yaparak ekranı kapamasını söylediğim butonumu pack ile pencereme bağlıyorum. def ac(self): self.dosya = open(“denene.txt”,”w”) yukarıda oluşturduğum basit dosya açma fonksiyonunu butona atamak için tek yapmam gereken self.tus = Button(text=”ac”, command=self.ac) self.tus.pack(side=LEFT) ayrıca pack fonksiyonun içine side=left ya da right yaparak butonumu pencerenin sağ ya da sol tarafına yaslıyabiliyorum. Ana hatları ile Tkinter kütüphanesi bu şekilde basit ve kullanışlı ayrıca python ile çok kordineli ve akıcı bir şekilde çalışıyor.

Tkinter Kütüphanesinde checkboxlar

Tkinter kütüphanesinin checkbox componentini oluşturmak ve penceremize eklemek için gerkli şeyleri ve bu checkboxları konumlandırmamız için gerekli kodları aşağıda paylaşarak örnek üzerinden açıklayacağım. ketçap = Checkbutton(text=” ketçap “) ketçap.pack() moyanez = Checkbutton(text=” moyanez “) moyanez.pack() yazarak kolay bir şekilde checkbox oluşturabiliriz şimdi bu checkboxları pencerenin sol tarafına yaslıyalım ketçap = Checkbutton(text=” ketçap “) ketçap.pack(side=LEFT) moyanez = Checkbutton(text=” moyanez “) moyanez.pack(side=LEFT) şimdi ise checkboxlarımızı alt alta dizelim çünkü şu an ikiside hoş bir görüntü sunmuyorlar bunu için place() fonksiyonunu kullanacağız. ketcap = Checkbutton(text=” ketçap “) ketcap.place(relx = 0.0, rely = 0.1) ketcap.pack(side=LEFT) moyanez = Checkbutton(text=” moyanez “) moyanez.place(relx = 0.0, rely = 0.2) moyanez.pack(side=LEFT) place fonksiyonumun içinde relx ve rely değerim var bu değerler x ve konumlarımı belirtiyor yukarıdaki örnekte görüldüğü gibi x düzleminde 0 boşluk bırakırken y düzleminde 0.1 boşluk bırakarak iki checkboxımın alt alta dizilmesinin sağladım.

Şimdi ise checkboxlarımızın seçili olup olmadığını anlamak için değer atamasını bi değişken yardımıyla yapalım ve bu değeri alalım. ket = IntVar() ket.set(0) bu değeri alabilmek için ilk olarak ket adında bir değişken oluşturuyorum ve bu değişkeni IntVar yani Integer Variable olarak eşitleyip değeri int olarak alıcağımı seçmiş oluyorum eğer değer string olarak alınıcaksa StringVar() olarak atama yapılmalı daha sonra bu değeri sıfıra set ediyorum bu ekran ilk açıldığında checkboxımın seçili bir şekilde gelmiyeceği anlamına geliyor eğer 1 olarak atama yaparsak checkbox seçili olarak gelicektir tabi önce bu değişkeni checkboxımıza atamamız lazım. ket = IntVar() ket.set(0) ketcap = Checkbutton(text=”Ketçap”, variable=ket) checkbox ın otomatik olarak çekili gelmesi için ise ket = IntVar() ket.set(1) ketcap = Checkbutton(text=”Ketçap”, variable=ket) Olarak yazmalıyız. Checkboxları bu şekilde kullanıp konumlandırarak hem kullanıcıdan gerekli bilgileri alıp hemde güzle kullanıcı ara yüzleri oluşturabiliriz.

Tkinter Kütüphanesinde Toplevel

Toplevel ana penceremizin yanında buton ya da benzeri bir tetikleme sonucunda ikinci bir ekran bir nevi pop up açmamızı sağlar bu fonksiyonu genelde uyarı ekranları için kullanırız Toplevel penceresini buton yardımıyla açmak için from Tkinter import * ekran = Tk() def ac_ekran(): ekran2 = Toplevel() btn_ac = Button(text=”aç”, command=ekle) btn_ac.pack() mainloop() yukarıda görüdüğünüz kodlar ile basit bir şekilde toplevel ile 2. Bir pencereyi açtık ancak eğer bu açtığımız pencereye bir label ya da bi buton gibi componentler eklemek istiyorsak kodlarımızda biraz değişiklik yapıp kodlarımıza eklediğimiz buton ya da label componentlerimizi pack fonksiyonu ile bağlarken ana ekrana değilde 2. Ekranımız olan ekran2 ye pack ediyoruz bu iki ekranlı projelerde Tkinter kütüphanesinde

pack() fonksiyonun çalışma prensibini daha iyi anlamış olduk.

def kapa():

ekran2=Toplevel() btn_kapa = Button(ekran2,text=”kapa”, command=ekran2.destroy) btn_kapa.pack() btn_ac = Button(pencere,text=”pop up aç”, command=ac_ekran) btn_ac.pack()

yukarıda gördüğünüz gibi ilk butonumu ikinci ekranımı açmak için ana ekranıma pack ediyorum ikinci yani ekranı kapatma butonumu ise ekran2 ye yani ikinci ekranıma pack ediyorum. Bu şekilde basitce toplevel kullanarak ikinci ekranlar açıp bu ikinci ekranlara label ,buton gibi componentleri atıyabilirsiniz.

Diğer yazılım Dillerinde Kullanıcı Arayüzü Oluşturabileceğimiz Kütüphaneler

C# da Kullanıcı Arayüzü Oluşturma Kütüphaneleri C# da kullanıcı arayüzü oluşturmak için pythonun aksine kod kısmında ekstra bir kütüphane import etmemize gerek yoktur c# projelerinde form ve wpf de kullanıcı UI componentleri hazır olarak gelmektedir özellikle form yapısındaki sürükle bırak tekniği bizlere büyük avantaj sunmaktadır wpf de ise grid yapısının işlevselliği ve kolaylığı c# ın bize sunduğu güzelliklerden biridir çok hızlı bir şekilde kullanıcı dostu dikkat çekici kullanıcı ara yüzleri tasarlıyabilirsiniz bunun için kod kısmında uğraşarak vakit kaybetmenize gerek kalmaz bu açıdan bakıldığında hızlı ve basit kullanıcı arayüzü oluşturmada c# form wpf diğer yazılım dillerinden çok ileridedir

Java da Kullanıcı Arayüzü Oluşturma Kütüphaneleri

Günümüzde java ile yapılan projelerde aktif olarak en çok kullanılan kullanıcı arayüzü kütüphanesi swıng dir swıng Tkinte ile kod ile ana iskeletin oluşturulması bakımından benzerlik gösterir swıng kütüphanesi sıfırdan yazılmış bir kütüphane değildir javanın ilk arayüz kütüphanesi olan awt üzerine yazılmış bir kütüphanedir Java projenize swıng kütüphanesini import etmek için import javax.swing.*; yazmanız yeterlidir

--

--

Kaan Koska

Computer programming student, currently working on computer vision, opencv, Yolo, Python