Python Tkinter Projeleri [Adım Adım Açıklama]
Yayınlanan: 2020-09-14Python'da GUI hakkında bilgi edinmek oldukça zor olabilir. Endişelenme çünkü arkandayız! Bu makalede, Python GUI projeleri üzerinde verimli bir şekilde çalışabilmeniz için bir Tkinter öğreticisi paylaştık. Bu öğreticiyi tamamladıktan sonra, Python Tkinter projeleri oluşturmaya yönelik yapı taşlarına aşina olacaksınız. Python konusunda daha fazla uzmanlık kazanmak istiyorsanız, veri bilimi programlarımıza göz atın.
Ayrıca her adımın kodunu da paylaştık. Ancak, yalnızca nasıl çalıştığını anladığınızda kopyalayıp yapıştırmanızı öneririz. Aksi takdirde pek bir faydası olmaz.
İçindekiler
Tkinter nedir?
Tkinter, Python'un Tk GUI araç setini kullanması için bir pakettir. Python aracılığıyla GUI programları oluşturmak için Tkinter'ı kullanabilirsiniz. Tkinter birçok program üretebilirken, gelişmiş uygulamalar için modülleri kullanmanız gerekebilir. Python Tkinter projeleri üzerinde çalışmadan önce Tkinter'ın temellerini bilmelisiniz:
Tkinter'da Merhaba Dünya Programı
İşte Tkinter'da bir merhaba dünya programı örneği:
tkinter'ı tk olarak içe aktar
sınıf Uygulaması(tk.Frame):
def __init__(self, master=Hiçbiri):
super().__init__(master)
self.master = usta
self.pack()
self.create_widgets()
def create_widgets(self):
self.hi_there = tk.Button(self)
self.hi_there[“metin”] = “Merhaba Dünya\n(beni tıklayın)”
self.hi_there["komut"] = self.say_hi
self.hi_there.pack(yan=”üst”)
self.quit = tk.Button(self, text=”ÇIKIŞ”, fg=”kırmızı”,
komut=self.master.destroy)
self.quit.pack(yan=”alt”)
def say_hi(self):
print(“Merhaba, herkese!”)
kök = tk.Tk()
uygulama = Uygulama(usta=kök)
app.mainloop()
Tkinter'da Geometri Yöneticileri
Python Tkinter projeleri üzerinde çalışırken bilmeniz gereken bir diğer ana kavram da geometri yöneticileridir. Bir geometri yöneticisi kullanmadan, widget'larınız ekranda görünmez. Bir geometri yöneticisi eklemenin başlıca üç yolu vardır:
Kafes
Ebeveyne bir ızgara ekler ve buna göre widget'ları göstermesine izin verir. Izgara, widget'larının uzunluğunu ve yüksekliğini ölçmek için satır ve sütunlara sahiptir.
Ambalaj
Bu yöntem, pencere aracına kendisini üst öğe içinde paketlemesini söyler. Widget'ı yalnızca ebeveyn için bir alt widget listesine ekler. Basit bir ifadeyle, onları bir üst widget'a yerleştirmeden önce bir bloğa ekler.
Yer
Bu yöntem, pencere öğelerini ana pencere bileşenine göre belirli bir konuma yerleştirir.
Aşağıdaki öğreticimizde, widget'larımızın konumunu işlemek için paket yöneticisini kullandık. Bu yüzden bu kavramlara aşina olmanız en iyisi olacaktır. Projemizin işleyişini daha iyi anlamanıza yardımcı olacaktır.
Ödeme: Yeni Başlayanlar için 42 Heyecan Verici Python Projesi Fikirleri ve Konuları
Python'da GUI Oluşturma (Tkinter Eğitimi)
Adım #1: Modülü İçe Aktarma
Uygulama üzerinde çalışmaya başlamak için önce gerekli modülü içe aktarmalıyız. Modülü ad alanınıza aktararak bunu yapabilirsiniz. Sabitleri ve sınıfları nitelemek yerine adlarına göre kullanmanıza izin verir. Bu, "TkinterLabel" olarak nitelendirmek yerine adını kullanarak "Etiket" kullanabileceğiniz anlamına gelir. İşleri nispeten kolaylaştıracaktır ve her sınıfa ve sabit bir sınıfa hak kazanmak çok zahmetli olabileceğinden çok zaman kazanabilirsiniz. Modülü içe aktarmak için aşağıdaki kodu kullanın:
>>> Tkinter import'dan *
Sisteminizde Python Tk (veya Tcl) ile bağlantılı değilse veya sisteminizde Tk (veya Tcl) kurulu değilse, bu bölümde bir hata mesajı görürsünüz. Bu sorunu çözmek için, erişim için sisteminizin yöneticisine ihtiyacınız olacaktır. Aynısını yaparak bu sorunu çözdüğünüzden emin olun.
Öte yandan, bu bölümlerde herhangi bir hata mesajı görmüyorsanız, bir sonraki adıma geçerek bir pencere oluşturabilirsiniz:
>>> kazanmak = Tk()
Penceremize “win” değişkenini atadık. Yukarıdaki kodu uyguladıktan sonra ekranda küçük bir pencere göreceksiniz. Başlık çubuğu, içinde yazılı “tk” göstermelidir.
Bu, bu adımı başarıyla tamamladığınız ve artık Python'da GUI oluşturmaya başlayabileceğiniz anlamına gelir.
Adım #2: Düğme Ekleme
Artık Tkinter'ımız çalıştığına göre programımıza butonlar ekleyebiliriz. Düğmeler, herhangi bir GUI programının en basit bölümüdür, bu yüzden onlarla başlayacağız:
>>> b1 = Düğme(kazan, metin=”Bir”)
>>> b2 = Düğme(kazan, metin=”İki”)
Son bölümde oluşturduğumuz pencere şimdi yaptığımız butonların ebeveynidir. Daha fazla Python Tkinter projesi üzerinde çalışacağınız için, çerçevelerin diğer sınıflar için ebeveyn işlevi görebileceğini göreceksiniz. Şimdi, bu kodu uyguladığınızda, garip bir olay fark edeceksiniz – Düğmeler pencerede görünmüyor!
Çünkü programımıza bir grid ve bir paket eklememiz gerekiyor. Bunlara geometri yöneticileri denir ve bunları bu makalede daha önce tartışmıştık. Paket yöneticisini bir sonraki bölümümüze ekleyeceğiz:
Adım#3: Paket Yöneticisini Uygulama
Düğmelerimizi ana widget'a eklemek için pack yöntemini kullanacağız. Paket yöneticisi ile, alt pencere bileşeninizin ana pencere bileşeninin hangi tarafına karşı paketlenmesini istediğinizi söyleyebilirsiniz. ÜST, SAĞ, ALT, SOL fonksiyonlarını kullanabilirsiniz. Bir taraf belirtmezseniz program varsayılan olarak TOP'u seçer. Önce paket yöneticisini ekleyelim:
>>> b1.pack()
>>> b2.pack()
İlk düğmeyi (kodun ilk satırı) eklediğinizde, pencerenizin düğmenin boyutuna küçüldüğünü fark edeceksiniz. Benzer şekilde, ikinci düğmeyi (kodun ikinci satırı) eklediğinizde, pencere o düğmenin boyutuna göre genişler. Pencere, düğmeleri dikey sırada yerleştirdi çünkü hangi tarafa paketlenmesi gerektiğini belirtmedik. Aşağıdaki kodu kullanarak bunları sola paketleyelim:
>>> b2.pack(yan=SOL)
>>> b1.pack(yan=SOL)
Paket yöneticisini çoğunlukla, widget'larımızı yalnızca bu iki sıraya (yatay ve dikey) yerleştirmemiz gerektiğinde kullandığımızı unutmayın. Diğer widget yerleşim türleri için grid yöntemini veya place yöntemini kullanırız. 'padx' veya 'pady' işlevlerini kullanarak düğmeler ve pencere arasına biraz boşluk ekleyebilirsiniz. 'padx' işlevi, parçacığın X eksenine (sol ve sağ) dolgu ekler ve 'pady' işlevi, aygıtın Y eksenine (üst ve alt) dolgu ekler.
>>> b1.pack(yan=SOL, padx=10)
>>> b2.pack(yan=SOL, padx=10)
Widget'ların dolgusunu denemenizi öneririz. Widget'ların yerleşimini değiştirebileceğiniz farklı yolları anlamanıza yardımcı olur. Dolgu, ustalaşması zor bir kavramdır, bu nedenle bir sonraki bölüme geçmeden önce denemek en iyisi olacaktır.
4. Adım: Şebeke Yöneticisi
Tkinter'daki bir diğer popüler geometri yöneticisi ızgara yöneticisidir. Makalemizde daha önce tartıştığımız gibi, ızgara yöneticisi üst öğeyi satırlara ve sütunlara ayırmanıza izin verir. Alt pencere öğelerini ebeveyn ızgarasının hücrelerine yerleştirebilirsiniz. Her sütunun ve satırın genişliğini ve uzunluğunu gereksinimlerinize göre değiştirebilirsiniz. Her sütun aynı genişlikte olmak zorunda değildir. Benzer şekilde, her satırın aynı yüksekliğe sahip olması gerekmez. Böylece ızgara yöneticisi, widget'larınızın görünümünü ve yerleşimini düzenleme açısından size daha fazla yaratıcı özgürlük sağlar.
Izgara yöneticisini test etmek için daha önce oluşturduğumuz butonlarla yeni bir pencere oluşturacağız. Ancak, düğmeleri 2 × 2 ızgaraya ekleyeceğiz:
>>> kazanmak = Tk()
>>> b1 = Düğme(kazan, metin=”Bir”)
>>> b2 = Düğme(kazan,metin=”İki”)
>>> b1.grid(satır=0, sütun=0)
>>> b2.grid(satır=1, sütun=1)
Programımızın bazı hücreleri boş bıraktığını fark etmişsinizdir. Bunun nedeni, satır 0, sütun 1'e (veya satır 1 ve sütun 0'a) hiçbir şey eklememiş olmamızdır. İlginç bir şey görmek için yeni bir widget deneyeceğiz:
>>> l = Label(win, text=”Bu bir etikettir”)
>>> l.grid(satır=1, sütun=0)
Yukarıdaki kodu eklediğinizde, ikinci düğmenin metni yerleştirmek için sağa kaydığını fark edeceksiniz. Nasıl çalıştığını görmek için ızgara yöneticisini birden çok widget ile denemek en iyisidir.
Okumalısınız: Hindistan'da Django Geliştirici Maaşı
Adım #5: Düzeni İyileştirme
Bu bölümde çerçeve adlı yeni bir widget deneyeceğiz. Bir çerçeve yalnızca diğer widget'ları içermek içindir. Birden çok widget'ı bir çerçeveye paketleyebilir veya bunları aynı yere yerleştirmek için bir ızgara kullanabilirsiniz. Ayrıca farklı kareleri tek bir karede toplayabilirsiniz. Bu özellik, GUI programınız için gelişmiş düzenler oluşturmanıza olanak tanır. Örneğin, bir çerçeveye arka arkaya üç düğme ekleyeceğiz. Düğmeleri yatay olarak ekleyin ve ardından etiketi çerçeveyle dikey olarak paketleyin:

>>> kazanmak = Tk()
>>> f = Çerçeve(kazan)
>>> b1 = Düğme(f, “Bir”)
>>> b2 = Düğme(f, “İki”)
>>> b3 = Düğme(f, “Üç”)
>>> b1.pack(yan=SOL)
>>> b2.pack(yan=SOL)
>>> b3.pack(yan=SOL)
>>> l = Etiket(kazan,"Bu etiket tüm düğmelerin üzerindedir")
>>> l.pack()
>>> f.pack()
Makalede daha önce tartıştığımız gibi, yer yöntemini geometri yöneticisi olarak da kullanabilirsiniz. Yer yöntemi, pencere veya çerçeve içinde belirli bir konuma pencere öğeleri yerleştirmenize olanak tanır. Ancak, programın yanıt vermesini kısıtladığı için yer yöntemini sık sık kullanmanızı önermiyoruz.
Izgara işleviyle, widget yerleşimlerini belirtmek için harita koordinatlarını (G, N, W, GB, NE, vb.) kullanmanıza izin veren 'yapışkan' parametreyi kullanabilirsiniz. Bir sonraki bölüme geçmeden önce, henüz tartıştığımız işlevleri anladığınızdan emin olun. Diğer Python GUI projelerinde nasıl kullanabileceğinizi görmek için ızgarayı ve çerçeve işlevlerini birlikte test edin.
Adım#6: Düğmeleri Kullanışlı Hale Getirme
Şimdiye kadar oluşturduğumuz butonlara tıklarsanız, tepki vermediklerini (hiçbir şey yapmıyorlar) fark etmiş olmalısınız. Tıkladığınızda bastırırlar ve üzerlerine geldiğinizde vurgulanırlar, ancak herhangi bir işlev gerçekleştirmezler. Düğmelerimizin belirli işlevleri gerçekleştirmesini sağlamak için 'yapılandırma' işlevini kullanmamız gerekecek.
Herhangi bir anahtar kelime argümanını, onu oluştururken iletmek için bir parçacığın 'yapılandırma' yöntemine iletebiliriz. İşte bir örnek:
>>> b1.configure(text=”Uno”)
'Komut' parametresi, düğmeleri oluşturduğunuzda veya bunlara 'yapılandırma' eklediğinizde düğmeleri geri arama işlevlerine bağlar. Nasıl çalıştığını anlamak için bir mesaj yazdıran bir fonksiyon oluşturacağız:
>>> def but1():
… print(“Birinci düğmeye basıldı”)
…
>>> b1.configure(komut=but1)
Böylece ilgili düğmeye tıkladığınızda bir mesaj yazdıracaktır.
Adım #7: Giriş Widget'ları Ekleme
Giriş widget'ları, kullanıcıların programa metin girmesine izin verir. Ancak, giriş widget'ını düğmelerde yaptığımız gibi işlevsel hale getirmemiz gerekecek. Bir giriş widget'ının metni alması (ve ayarlaması) gerekir. Giriş pencere öğesinin bu işlevi gerçekleştirmesi için, Tkinter nesnesi 'StringVar'ı kullanmanız gerekir. 'StringVar' nesnesi, metni bir dize biçiminde tutar ve get aracılığıyla okunabilir hale getirir.
Giriş widget'larımızı test etmek için yeni bir pencere oluşturacağız:
>>> kazanmak = Tk()
>>> v = StringVar()
>>> e = Giriş(kazan,metindeğişkeni=v)
>>> e.pack()
Şimdi girdi olarak “bu bir test” ekleyelim ve aynısını StringVar üzerinden alalım:
>>> v.get()
"bu bir test"
Artık metni StringVar'a ayarlayabilir ve widget'ta görünmesini sağlayabilirsiniz:
>>> v.set(“bu programdan ayarlanmıştır”)
Ek Widget: Liste Kutusu Widget'ı
Giriş widget'ından ayrı olarak bir liste kutusu widget'ı ekleyebiliriz. Bir liste kutusu widget'ı, kullanıcının bir menüden bir öğe seçmesini sağlar. Liste kutusu widget'ını denemek için yeni bir pencere oluşturacağız:
>>> kazanmak = Tk()
>>> lb = Liste kutusu(kazan, yükseklik=3)
>>> lb.pack()
>>> lb.insert(END, “ilk giriş”)
>>> lb.insert(END, “ikinci giriş”)
>>> lb.insert(END, “üçüncü giriş”)
>>> lb.insert(END, “dördüncü giriş”)
Öğeleri listenin başına, ortasına ve sonuna ekleyebilirsiniz. Onları da silebilirsiniz. Listede çok fazla öğe varsa, bir kaydırma çubuğu ekleyebilirsiniz:
>>> sb = Scrollbar(kazan, orient=DİKEY)
>>> sb.pack(yan=SOL, dolgu=Y)
Kaydırma çubuğumuzu işlevsel hale getirmek için geri arama işlevlerini kullanmamız gerekecek:
>>> sb.configure(komut=lb.yview)
>>> lb.configure(yscrollcommand=sb.set)
Curlection yöntemi, liste kutusundan bir öğeyi seçtiğinizde size bir öğe döndürür. Herhangi bir öğe seçmezseniz boş bir demet döndürür.
Adım#8: Son Adımlar
Bir telefon listesi düzenleyicisi oluşturmak için Tkinter eğitimimizde öğrendiğimiz her şeyi kullanacağız:
Toplam Kod
#!/usr/bin/env python3
tkinter import'dan *
telefonlardan içe aktarma *
def that_selected():
print(“At {0}”.format(select.curselection()))
dönüş int(select.curselection()[0])
def add_entry():
phonelist.append([fnamevar.get(), lnamevar.get(), phonevar.get()])
set_select()
def update_entry():
phonelist[what_selected()] = [fnamevar.get(),
lnamevar.get(),
phonevar.get()]
def delete_entry():
del telefon listesi[hangi_selected()]
set_select()
def load_entry():
fname, lname, telefon = telefon listesi[hangi_seçilen()]
fnamevar.set(fname)
lnamevar.set(lname)
phonevar.set(telefon)
def make_window():
global fnamevar, lnamevar, phonevar, seç
kazanmak = Tk()
çerçeve1 = Çerçeve(kazan)
çerçeve1.paket()
Label(frame1, text=”First Name”).grid(satır=0, sütun=0, yapışkan=W)
fnamevar = StringVar()
fname = Giriş(çerçeve1, metindeğişkeni=fnamevar)
fname.grid(satır=0, sütun=1, yapışkan=W)
Label(frame1, text=”Soyad”).grid(satır=1, sütun=0, yapışkan=W)
lnamevar = StringVar()
lname = Giriş(çerçeve1, metindeğişkeni=lnamevar)
lname.grid(satır=1, sütun=1, yapışkan=W)
Label(frame1, metin=”Telefon”).grid(satır=2, sütun=0, yapışkan=W)
phonevar = StringVar()
phone = Giriş(frame1, textvariable=phonevar)
phone.grid(satır=2, sütun=1, yapışkan=W)
frame2 = Frame(win) # Satır butonlar
çerçeve2.paket()
b1 = Düğme(çerçeve2, metin=” Ekle”, komut=add_entry)
b2 = Düğme(çerçeve2, metin=”Güncelleme”, komut=güncelleme_giriş)
b3 = Düğme(çerçeve2, metin=”Sil”, komut=delete_entry)
b4 = Düğme(çerçeve2, metin=”Yükle”, komut=yük_giriş)
b5 = Düğme(çerçeve2, metin=”Yenile”, komut=set_select)
b1.pack(yan=SOL)
b2.pack(yan=SOL)
b3.pack(yan=SOL)
b4.pack(yan=SOL)
b5.pack(yan=SOL)
frame3 = Frame(win) # isim seçimi
çerçeve3.paket()
scroll = Scrollbar(frame3, orient=DİKEY)
select = Liste kutusu(çerçeve3, yscrollcommand=scroll.set, yükseklik=6)
scroll.config(komut=select.yview)
scroll.pack(yan=SAĞ, dolgu=Y)
select.pack(yan=SOL, doldur=İKİ, genişlet=1)
dönüş galibiyeti
def set_select():
phonelist.sort(anahtar=lambda kaydı: kayıt[1])
select.delete(0, SON)
fname, lname, telefon listesindeki telefon için:
select.insert(END, “{0}, {1}”.format(lname, fname))
kazanmak = make_window()
set_select()
win.mainloop()
İşte telefon listesi:
telefon listesi = [['Chris', 'Meyers', '241-343-4349'],
['Robert', 'Smith', '202-689-1234'],
['Janet', 'Jones', '609-483-5432'],
['Ralph', 'Barnhart', '215-683-2341'],
['Eric', 'Nelson', '571-485-2689'],
['Ford', 'Prefect', '703-987-6543'],
['Mary', 'Zigler', '812-567-8901'],
['Bob', 'Smith', '856-689-1234']]
Burada paylaştığımız program bir örnektir. Bu Tkinter eğitiminde tartıştığımız işlevlerle programınızı oluşturabilirsiniz. Yukarıdaki program, herhangi bir değişikliği kaydetme seçeneğine sahip olmadığı gibi çeşitli işlevlerden yoksundur. Bu görevi gerçekleştirebilecek bir buton oluşturarak kaydetme fonksiyonunu kendiniz ekleyebilirsiniz.
Okumalısınız: Python Eğitiminde Markov Zinciri
Python ve Python GUI Projeleri Hakkında Daha Fazla Bilgi Edinin
Ne yaptığınızı biliyorsanız Python Tkinter projeleri üzerinde çalışmak oldukça eğlenceli olabilir. Ayrıca güçlü (ve zayıf) noktalarınızı anlamanın harika bir yoludur. Python hakkında daha fazla bilgi edinebilirsiniz; blogumuza gitmenizi öneririz. İşte daha fazla okuma için bazı kaynaklar:
- 10 Python GUI Projesi
- Python'da chatbot nasıl yapılır?
- 42 Python proje fikri
Bu proje hakkındaki düşünceleriniz nelerdir? Başka Python Tkinter projelerinde çalıştınız mı? Bilmemize izin ver.
Veri bilimi hakkında bilgi edinmek istiyorsanız, IIIT-B & upGrad'ın çalışan profesyoneller için oluşturulmuş ve 10'dan fazla vaka çalışması ve proje, uygulamalı uygulamalı atölye çalışmaları, endüstri uzmanlarıyla mentorluk, 1 Endüstri danışmanlarıyla bire bir, en iyi firmalarla 400+ saat öğrenim ve iş yardımı.
Python, grafiksel kullanıcı arayüzleri oluşturmak için uygun mu?
Python, Tkinter'dan bir dizi başka çapraz platform çözümüne ve ayrıca platforma özgü bağlamalara kadar bir dizi grafik kullanıcı arabirimi çerçevesine sahiptir. Python, Tkinter ile birleştirildiğinde grafik kullanıcı arayüzleri oluşturmak hızlı ve kolaydır. Python, çok sayıda yerleşik widget'a sahip olduğundan, pencereleri hızlı bir şekilde oluşturduğundan, güçlü olay işleme tekniklerine sahip olduğundan ve ilkel çizim yeteneklerine sahip olduğundan GUI oluşturma için idealdir.
Tkinter veya KIVY: Hangisini kullanmak daha iyidir?
Kivy, benzersiz ancak çekici kullanıcı arabirimi programları oluşturmak veya tasarlamak için ücretsiz ve açık kaynaklı bir Python çerçevesidir. Uygulama oluşturmayı seven bir python geliştiricisiyseniz, KIVY daha dinamik uygulamalar oluşturmak için mükemmel bir seçimdir. Tkinter, GUI uygulamalarını hızlı ve kolay bir şekilde geliştirmek için en yaygın kullanılan Python arabirimidir. Python'da yeniyseniz ve bilgisayar arayüzlerinin nasıl oluşturulacağını öğrenmek istiyorsanız, Tkinter ile başlayın ve temel bilgileri öğrenin.