Python programlama dilinin standart kütüphaneleri arasında yer alan ve grafik kullanıcı arayüzü (GUI) geliştirmek için kullanılan en yaygın araçlardan biridir.
Python’un resmi olarak desteklediği ve dil ile birlikte gelen bu kütüphane, kullanıcıların görsel uygulamalar geliştirmesine olanak sağlayan güçlü bir yapıya sahiptir.
Tkinter, aslında “Tcl/Tk” araç takımının Python dilindeki uyarlamasıdır ve ismi de “Tk Interface” kelimelerinin birleşiminden gelmektedir. Tcl programlama dili için geliştirilen Tk GUI araç takımı, Python ile Tkinter sayesinde erişilebilir hale gelmiştir. Bu kütüphane, hem başlangıç düzeyindeki programcılar için öğrenmesi kolay, hem de ileri düzey geliştiriciler için yeterince esnek ve güçlü özelliklere sahiptir.
Tkinter’in en büyük avantajlarından biri, Python’un standart kütüphanesinin bir parçası olmasıdır. Bu özellik, Tkinter’i kullanmak için ekstra bir kurulum gerektirmemesi anlamına gelir; Python kurulduğunda Tkinter de otomatik olarak kullanıma hazır hale gelir. Geliştiriciler için bu, projelerin taşınabilirliğini ve paylaşılabilirliğini önemli ölçüde artıran bir faktördür.
Kullanıcıların GUI uygulamaları için üçüncü taraf kütüphanelere bağımlı olmaması, platformlar arası uyumluluğu sağlamak açısından büyük bir avantaj sunmaktadır. Windows, macOS ve Linux gibi farklı işletim sistemlerinde sorunsuz bir şekilde çalışabilmesi, Tkinter’i evrensel bir çözüm haline getirmektedir.
Tkinter, widget denilen görsel bileşenler seti sunarak uygulama geliştirmeyi kolaylaştırır. Butonlar, etiketler, metin kutuları, menüler, çerçeveler ve daha pek çok widget, kullanıcı arayüzü oluşturmak için temel yapı taşları olarak kullanılır.
Her widget, belirli bir amaca hizmet eder ve özelleştirilebilir özelliklere sahiptir. Örneğin, bir “Button” widget’ı kullanıcının tıklayabileceği bir düğme oluşturur ve bu düğmeye tıklandığında belirli bir işlev çağrılabilir. “Label” widget’ı metin veya görüntü göstermek için kullanılırken, “Entry” widget’ı kullanıcıdan metin girdisi almak için tasarlanmıştır.
“Canvas” widget’ı ise çizim yapma, şekiller oluşturma ve görüntüleri manipüle etme gibi daha karmaşık grafik işlemleri için kullanılabilir. Bu widget’lar bir araya getirilerek, kullanıcı dostu ve işlevsel uygulamalar geliştirilebilir.
Tkinter’in geometri yöneticileri, widget’ların pencere içindeki yerleşimini kontrol etmek için kullanılır. “Pack”, “Grid” ve “Place” olmak üzere üç temel geometri yöneticisi bulunmaktadır.
“Pack” geometri yöneticisi, widget’ları belirli bir yönde (üst, alt, sol, sağ) bloklar halinde düzenler. Bu, basit arayüzler için kullanımı kolay bir seçenektir. “Grid” geometri yöneticisi, widget’ları satır ve sütunlardan oluşan bir ızgara yapısı içinde düzenler. Bu, daha karmaşık ve düzenli arayüzler için idealdir.
“Place” geometri yöneticisi ise widget’ları pencere içinde belirli “x”, “y” koordinatlarına veya göreceli konumlara yerleştirmeyi sağlar. Bu yöneticiler sayesinde, geliştiriciler widget’ların boyutlarını, hizalamalarını ve birbirleriyle olan ilişkilerini hassas bir şekilde kontrol edebilirler.
Tkinter, olay işleme mekanizması sayesinde kullanıcı etkileşimlerini yönetme yeteneğine sahiptir. Kullanıcının fare tıklamaları, klavye girişleri ve diğer etkileşimleri, olaylar olarak adlandırılır ve bu olaylar belirli işlevleri tetiklemek için kullanılabilir.
Örneğin, bir butona tıklandığında bir hesaplama yapacak bir fonksiyon çağrılabilir veya bir metin kutusundaki değer değiştiğinde bir doğrulama işlemi gerçekleştirilebilir.
Tkinter’in olay işleme sistemi, bind metodu aracılığıyla widget’lara olayların bağlanmasını sağlar. Bu, uygulamaların dinamik ve etkileşimli olmasını mümkün kılar.
Ayrıca, Tkinter’in sunduğu değişken sınıfları (StringVar, IntVar, DoubleVar, BooleanVar), kullanıcı arayüzü elemanları ile program verisi arasında otomatik senkronizasyon sağlamak için kullanılabilir.
Bu, model-görünüm mimarisini uygulama imkanı sunarak, uygulama mantığı ile kullanıcı arayüzünü birbirinden ayırmayı kolaylaştırır.
Tkinter ile geliştirilmiş uygulamalar, hem basit ve kullanıcı dostu hem de güçlü ve kapsamlı olabilir. Basit bir hesap makinesi veya not defteri gibi küçük uygulamalardan, veri analizi araçları veya grafik editörleri gibi karmaşık sistemlere kadar geniş bir yelpazede projeler geliştirilmesi mümkündür. Tkinter’in başka kütüphanelerle birlikte kullanılması durumunda, işlevselliği daha da genişletilebilir.
Örneğin, matplotlib gibi grafiğe yönelik bir kütüphane ile birlikte kullanıldığında, bilimsel veriler görselleştirilebilir ve interaktif grafikler oluşturulabilir. Ayrıca, “PyInstaller” veya “cx_Freeze” gibi araçlar ile Tkinter uygulamaları, bağımsız çalıştırılabilir dosyalara dönüştürülebilir ve böylece Python kurulumu olmayan sistemlerde de çalıştırılabilir.
Tkinter, uzun bir geçmişe ve geniş bir kullanıcı tabanına sahip olmasına rağmen, modern GUI kütüphaneleriyle karşılaştırıldığında bazı sınırlamaları bulunmaktadır. Varsayılan widget’ların görünümü biraz eski ve düz olabilir, bu da modern ve çekici arayüzler oluşturmak için ek çaba gerektirebilir.
Bununla birlikte, “ttk” (themed Tk) modülü, daha modern görünümlü widget’lar sağlayarak bu sorunu kısmen gidermektedir. “ttk”, işletim sisteminin temasını kullanarak, uygulamaların platform doğal görünüme sahip olmasını sağlar.
Ayrıca, Tkinter’in belgelendirmesi ve eğitim materyalleri de zengindir; çok sayıda kitap, çevrimiçi eğitim ve topluluk desteği bulunmaktadır. Bu kaynaklar, hem yeni başlayanlar hem de deneyimli geliştiriciler için öğrenme sürecini kolaylaştırır.
Tkinter’in kullanımı oldukça basittir ve genellikle temel bir uygulama oluşturmak için birkaç satır kod yeterlidir. Bir Tkinter penceresi oluşturmak için öncelikle Tkinter modülü içe aktarılır ve sonra Tk sınıfından bir örnek oluşturulur.
Bu örnek, uygulamanın ana penceresini temsil eder. Ardından, gerekli widget’lar oluşturulup pencereye yerleştirilir ve son olarak pencereyi göstermek için mainloop metodu çağrılır. Bu mainloop, kullanıcı uygulamayı kapatana kadar çalışmaya devam eder ve kullanıcı etkileşimlerini yakalar.
Tkinter’in en önemli avantajlarından biri de, küçük uygulamalar için bile yüksek performans sunmasıdır. Basit arayüzler hızlı bir şekilde yüklenir ve sistem kaynaklarını minimal düzeyde kullanır. Bu, özellikle kaynak sınırlı sistemlerde çalışacak uygulamalar geliştirirken önemli bir avantaj sağlar.
Sonuç olarak, Tkinter, Python programcıları için erişilebilir, taşınabilir ve güçlü bir GUI kütüphanesidir. Öğrenmesi kolay olması, platformlar arası uyumluluğu ve Python’un standart kütüphanesinin bir parçası olması gibi özellikleri, onu Python GUI geliştirme dünyasında popüler bir seçenek haline getirmektedir.
Başlangıç düzeyindeki programcılar için ideal bir başlangıç noktası olan Tkinter, aynı zamanda deneyimli geliştiriciler için de tatmin edici sonuçlar sunabilecek kapasiteye sahiptir. Modern uygulamalar geliştirmek için daha gelişmiş alternatifler mevcut olsa da, Tkinter’in sağladığı kolaylık ve erişilebilirlik, onu hala değerli bir araç olarak korumaktadır.
Aşağıda bu kütüphaneye ait açıklamaları bulabilirsiniz. Görüşmek üzere.
PYTHON Tkinter Kütüphanesi
Ön Bilgilendirme
Bu yazı Python’daki binlerce kütüphaneden biri olan “Tkinter“ kütüphanesinin tanıtılması ve öğretilmesi amacıyla yazılmıştır.
Girişte Tkinter kütüphanesiyle ilgili basit tanımlar yapıldıktan sonra görseller ile birlikte anlatımın ve öğretimin güçlendirilmesi amaçlanmıştır. Şimdi izninizle bu bilgilendirici yazıya bir giriş yapalım.
Herkese iyi okumalar !
- 1.1- Tkinter Nedir ?
- 1.2- Neden Tkinter ?
- 1.3– Bazı Temel Widget’lar
- 2.1 – Tkinter ile GUI oluşturmak ( Başlangıç )
- 2.2– Tkinter ile GUI oluşturmak ( Orta Seviye )
Tkinter Nedir ?
Tkinter, Python için standart bir GUI (Graphical User Interface – Grafik Kullanıcı Arayüzü) kütüphanesidir. Tkinter, Tcl/Tk GUI aracılığıyla Python programında kullanıcı arayüzü oluşturmak için kullanılır. Python kurulumunda otomatik yüklenir, ek bir kurulum gerektirmez. CustomTkinter(CTk) gibi uzantılara sahiptir.
Neden Tkinter ?
Tkinter kullanmamızın birden çok nedeni var. Öncelikle belirtmemiz gerekirse Tkinter , Python’un basit ve anlaşılır yapısıyla oldukça uyumludur ve öğrenmemiz görece daha kolay olacakır.Uyumlu olduğu için de Python’daki diğer kütüphanelerle entegre şekilde kullanılabilir.
Tkinter’ ın bir diğer avantajı da istediğimiz işletim sisteminde çalıştırabilmemizdir. Windows, Linux , macOS veya başka bir işletim sistemi kullanmamızın Tkinter için hiçbir engeli yoktur.
Tkinter barındırdığı Widget’lar sayesinde bize oldukça çeşitli standart GUI bileşenleri sunar. CustomTkinter(CTk) gibi uzantıları sayesinde çok daha kaliteli bir hale getirilebilir
Bazı Temel Widget’ler
Tkinter’de kullanılabilecek bazı temel widget’lar şunlardır:
- Label: Girilen metinin ekranda gözükmesini sağlar,
- Button: Tıklandığında bir eylem gerçekleştirmek için kullanılır,
- Entry: Kullanıcının metin girişi yapabileceği bir kutu oluşturur,
- Text: Çok satırlı metin girişi ve düzenleme alanı sağlar. Entry’nin çok satırlı hali diyebiliriz,
- Canvas: Çizimler yapmak için kullanılır. Bunlar resim veya herhangi karmaşık şekiller olabilir,
- Frame: Diğer widget’ları gruplamak için kullanılır,
- Menu: Uygulama içinde farklı farklı menüler oluşturmak için kullanılır.
Yazının bu kısmından itibaren görsellerle anlatım pekiştirilecektir. Resimlerin üzerinde de işleyeceğimiz konuyla ilgili bilgiler bulunmaktadır, o yüzden lütfen görselleri detaylı inceleyiniz.
Tkinter ile GUI oluşturmak ( Başlangıç )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import tkinter as tk # burada tkinter kütüphanemizi import ediyoruz ve "tk" olarak tanımlıyoruz window=tk.Tk() # window komutu sayesinde komutu çalıştırdığımızda önümüze bir ekran çıkacak greet=tk.Label(text="MoEP", # burada Label widget'inin özelliklerini kullandık ve şekillendirdik, fg="red", # fg = foreground bg="black", # bg = backgorund width=12, height=8 ) button=tk.Button(text="Tkinter öğreniyoruz", # burada "Button" widget'inden faydalandık, bu buton tıklanabilir olacak bg="blue", fg="yellow", width=20, height=5, ) greet.pack() # pack komutunu kullanarak bu girdiğimiz değerlerin açılacak ekranda aktif olarak görünmesini sağlıyoruz button.pack() window.mainloop() # mainloop komutu da tüm kod dizisinin çalışıp ekranın gözükmesini sağlıyor |
Yaptıklarımızın üstünden geçmemiz gerekirse ilk önce Tkinter kütüphanemizi çağırdık ve onu “tk” olarak adlandırdık. Daha sonrasında bir “window” oluşturarak bu window’un içine istediğimiz widget’leri eklemeye başladık. İlk olarak “Label” widget’ini ekledik ve özelliklerini belirledik.
Sonrasında ise “Button” widget’i ile bir buton oluşturduk, bu buton tıklanabilir bir buton ama şu anda üstüne bir fonksiyon işlemediğimiz için bassak bile hiçbir sonuç vermeyecek.
İlerleyen bölümlerde bu butona komutlar atayacağız ve her butona bastığımızda komutlarımızı uygulayarak bize sonuçlar verecek. Sondaki “pack” komutu eklediğimiz widget’lerin ekranda gözükmesini sağlıyor. ”Mainloop” ise tüm bu kod satırını çalıştırmayı ve ekranın oluşmasını sağlıyor.
Şimdi ise bu yaptığımız modelin biraz daha gelişmiş bir halini gösterelim ve sonra da ilk Tkinter çalışmamızı sonlandıralım.
Tkinter ile GUI oluşturmak ( Orta Seviye )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import tkinter as tk # tkinter çağırdık ve tanımladık sonrasında window oluşturduk window=tk.Tk() window.title("MoEP Tkinter Öğreniyorum") # window'a bir isim girdik ve boyutlarını belirledik window.minsize(height=80,width=400) def click(x): # burada bir fonksiyon tanımladık inp=entry.get() # buradaki "get.()" fonksiyonu sayesinde entry'e girdiğimiz değeri bu fonksiyona alıyor ve kullanıyoruz. print(inp) # burada ise entry'e girilen değerin sonuç olarak karşımıza çıkmasını sağlıyoruz. label=tk.Label(text="MoEP",font=("arial",30,"italic")) # burada Label'in özelliklerini giriyoruz label.config(bg="black",fg="white") #"config" komutu farklı özellikleri(yazı tipi, arka plan rengi, vb.)ayarlamak için kullanılır label.grid(row=0,column=0) #"grid" önceki çalışmada gördüğümüz pack ile aynı işlevde, grid kullanınca tekrar pack yazmaya gerek yok entry=tk.Entry(width=60) entry.grid(row=0,column=1) # burada grid yazdıktan sonra entry widget'inin ekranda nerede gözükeceğini belirtiyoruz # row satırı column ise sütunu temsil eder , entry widgeti 0.satır 1.column'da gözükecek button=tk.Button(text="sonucu göster") button.bind("<Button-1>",click) # bind komutu sayesinde butona basınca çalışmasını sağlarız,button-1 farede sol tuşu temsil eder button.grid(row=0,column=2) # virgülden sonra yazdığımız da bu butonda hangi fonksiyonun kullanılacağı, biz click'i kullanacağız # yani buton tuşuna farenin sol tuşuyla basarsak click fonksiyonu çalışacak. window.mainloop() |
İlk önce Tkinter kütüphanemizi çağırdık ve onu “tk” olarak adlandırdık. Daha sonrasında bir “window” oluşturarak bu window’un özelliklerini belirledik. Daha sonrasında “click”adında bir fonksiyon tanımladık ve bu fonksiyonun “entry” widget’ine yazılan değerleri “print” etmesini sağladık, bunu “get()” komutuyla sayesinde yapabildik.
Label’in özelliklerini yazdık ve burada “config” komutunu da kullandık. Label widget’inde “grid” komutunu kullandığımız için “pack” komutunu kullanmamıza gerek kalmadı, ikisi de widget’in oluşturulan ekranda görüntülenmesini sağlıyor. Grid sayesinde widget’in ekrandaki tam konumunu belirledik bu da girdiğimiz değerlere göre 0.satır ve 1.sütun oluyor.
Aşağı satırda “button” widget’i için “bind” komutunun yazıldığını gördük ,bu komut sayesinde butona bastığımızda istediğimiz komutu çalıştırabileceğiz.
Gördüğünüz “Button-1” butona hangi tuşla basılırsa fonksiyonun çalışacağını belirler, biz de burada”Button-1” yazarak farenin sol tıklamasını seçmiş olduk(Button-2 farede orta tuşu,Button-3 ise farede sağ tuşu temsil eder).
Hemen yanına yazdığımız “click” ise butona basılınca hangi fonksiyonun çalışacağını belirlememize yarıyor, yani biz butona farenin sol tuşuyla basınca “click” fonksiyonu çalışacak ve bize bir sonuç göstermiş olacak.
Kod dizisini çalıştırdığımızda karşımıza çıkan ekranda entry’e girersek ve daha sonrasında butona basarsak sonuç olarak karşımıza entry’e yazdığımız değer çıkacak.
Şimdi size bir de küçük bir tüyo vermek istiyorum, bu sayede butona komut atayabilmek için elinizde birden çok alternatif olmuş olacak.
1 2 3 4 5 6 7 8 9 10 11 12 | def click(x): inp=entry.get() print(inp) button=tk.Button(text="sonucu göster") button.bind("<Button-1>",click) def click(): inp=entry.get() print(inp) button=tk.Button(text="sonucu göster",command=click) |
Gördüğünüz gibi buton için ayrı bir “bind” komutu kullanmadan da “button” widget’imize komut atayabiliyoruz ve bunu da “command” sayesinde yapıyoruz. Burada dikkat etmeniz gereken şey eğer “command” kullanmak isterseniz buton sadece farenin sol tuşu ile çalışır, eğer farklı bir tuşun butonu çalıştırmasını isterseniz “bind” kullanmalısınız.
Böylelikle Tkinter ile ilgili ilk bilgilendirme yazımızı bitirmiş bulunduk. Serinin devamı için takip etmeyi unutmayın !
Aşağıda Tkinter kütüphanesiyle ilgili bir “worksheet” bulabilir ve bu yazımızdan öğrendiğiniz bilgileri pekiştirebilirsiniz !
Dosyayı İndir
Aşağıdaki dosyayı indirdikten sonra, “Trusted Window” modunda çalıştırınız.