Tkinter Python Arayüz Tasarım Modülü
Tkinter Python’ın backend tarafında yararlanabileceğimiz basit ve kullanışlı bir arayüz kütüphanesidir. Turtle modülü ile bir takım arayüz nesneleri oluşturmuştuk. Ancak arayüz elemanlarını kolayca kullanabileceğimiz Tkinter bu konuda yardımcı olacak bizlere.

Tkinter Python’ın backend tarafında yararlanabileceğimiz basit ve kullanışlı bir arayüz kütüphanesidir. Turtle modülü ile bir takım arayüz nesneleri oluşturmuştuk. Ancak arayüz elemanlarını kolayca kullanabileceğimiz Tkinter bu konuda yardımcı olacak bizlere.
GitHub Tkinter Projesi: https://github.com/omersahintr/tkinter_interfaces.git
Index
- Python Tkinter Modülü
- Tkinter ile Basit Bir Hesap Makinesi Yapalım
- Pack(), Place() ve Grid() Konumlandırma Metodları
- padx ve pady Boşluk Parametreleri
- Tkinter Text Nesnesi
- Scale Nesnesi
- Spinbox Form Nesnesi
- Checkbox Nesnesi
- Radio Button
- List Box
- Bölüm Sonu Projesi-1: Vücut Kitle Endeksi Hesaplama Aracı
- Bölüm Sonu Projesi-2: Python ile Gizli Kripto Mesaj Projesi
Python Tkinter Modülü
C#, JAVA yada VBasic gibi birçok dilde olduğu gibi Python dilinde de kullanıcıların veri girişi ve program çıktısı alabilmelerini kolaylaştıran interface yani arayüz tasarımları vardır. Aynı zamanda Kullanıcı Arayüzü (User Interface) olarak bilinen bu modül sayesinde yazdığınız uygulama tam bir kullanıcı dostu olacaktır.
Uygulamanızı kullanan müşteriler veya çalışanlar yapmak istediği aksiyonları rahatlıkla, herhangi bir kod yazmadan gerçekleştirecektir.
Label Eklemek
Tkinter python modülünde label yani etiket nesnesi eklemek için aşağıdaki kod satırında bulunan kodları sırasıyla yazınız.
import tkinter as tk
window = tk.Tk() # created tkinter screen.
window.title("First Screen") # Screen title set
window.minsize(width=600,height=600) # window minimum size
#label:
infoLabel = tk.Label(
text="First Label:")
infoLabel.config(bg="yellow", fg="blue",font=("Arial",30,"bold")) #Label properties
infoLabel.pack() #place location
window.mainloop() ##hold screen
Pythoninfolabel nesnesinin config parametreleri:
- bg: backround color
- fg: foreground color
- font: yazı tipi ve boyutu (tuple olarak değer alır)
- text: yazı içeriği
Ekran Çıktısı:

Buton Eklemek
Python Tkinter Kütüphanesi ile form ekranına buton nesnesi nasıl eklenir?
Label nesnesine benzer şekilde button nesnesi eklenir. Ancak basit bir işlem daha gerektirir. Bu da butona basıldığında hangi komut çalışacağının belirlenmesidir. Bunun için button nesnesinin command parametresine yazılmak üzere bir fonksiyon tanımlanır.
import tkinter as tk
window = tk.Tk() # created tkinter screen.
window.title("First Screen") # Screen title set
window.minsize(width=600,height=600) # window minimum size
#label:
infoLabel = tk.Label(
text="First Label:")
infoLabel.config(bg="yellow", fg="blue",font=("Arial",30,"bold")) #Label properties
infoLabel.pack() #place location
#button:
def click_button(): #clicked button function has defined
infoLabel.config(text="Pressed to button") #label text parameter has changed
infoButton = tk.Button(text="Send",command=click_button) #add new button parameters
infoButton.pack() #place location
window.mainloop() ##hold screen
PythonKod bloğu çalıştırıldığında açılan ekrandaki Send butonuna bastığınızda label text parametresi içeriği değişecektir.
Ekran Çıktısı:

Entry (Metin Kutusu) Eklemek
Form nesneleri arasında olmazsa olmazlardan biri olan Entry yani textbox nesnesi Tkinter Python modülünde nasıl kullanılır?
Bir fonksiyon tanımlanıp bunun içerisinde Entry nesnesinden girilen metin değer alınarak Label nesnesinin içerisine yazdırmayı deneyelim.
- infoEntry.get() yordamı ile Entry içerisindeki string değer alınabilir.
- infoEntry.delete(0,END) yordamı ile Entry nesnesinin içi temizlenir.
- infoEntery.insert(0,”string ifade“) yordamı ile Entry nesnesinin içine yazı yazılır
- infoEntry.focus() metodu ile form ekranı açılır açılmaz imleç bu Entry nesnesi içinde başlar.
import tkinter as tk
window = tk.Tk() # created tkinter screen.
window.title("First Screen") # Screen title set
window.minsize(width=600,height=600) # window minimum size
#label:
infoLabel = tk.Label(
text="First Label:")
infoLabel.config(bg="yellow", fg="blue",font=("Arial",30,"bold")) #Label properties
infoLabel.pack() #place location
def click_button(): #clicked button function has defined
infoLabel.config(text=infoEntry.get()) #label text parameter has changed
#button:
infoButton = tk.Button(text="Send",command=click_button) #add new button parameters
infoButton.pack() #place location
#Entry:
infoEntry = tk.Entry(width=30) # Entry text object has added
infoEntry.pack()
infoEntry.focus()
window.mainloop() ##hold screen
PythonEkran Çıktısı:

Tkinter ile Basit Bir Hesap Makinesi Yapalım
Tkinter Python kütüphanesi ile oldukça basit ama kullanışlı bir hesap makinesi yapalım. Öyle ki formdan girilen sayıları birbiri ile karşılaştırsın ve sıfıra bölme hatası yada negatif sayı ihtimalini saptayıp dört işlemi ona göre hesaplasın.
import tkinter as tk
window = tk.Tk() # created tkinter screen.
window.title("First Screen") # Screen title set
window.minsize(width=600,height=600) # window minimum size
#label:
infoLabel = tk.Label(
text="First Label:")
infoLabel.config(bg="yellow", fg="blue",font=("Arial",30,"bold")) #Label properties
infoLabel.pack() #place location
def click_button(symbol): #clicked button function has defined
equal = 0
tag = ""
numA = int(infoEntryA.get())
numB = int(infoEntryB.get())
match symbol:
case "+":
equal = numA + numB
tag = "A + B"
case "-":
if numA >= numB:
equal = numA - numB
tag = "A - B"
else:
equal = numB - numA
tag = "B - A"
case "*":
equal = numA * numB
tag = "A * B"
case "/":
if numA != 0 and numB != 0:
if numA>=numB:
equal = numA / numB
tag = "A / B"
else:
equal = numB / numA
tag = "B / A"
case _:
equal = "Error-101"
infoLabel.config(text=(tag + " = " + str(equal))) #label text parameter has changed
#Entry's:
infoEntryA = tk.Entry(width=10) # EntryA text object has added
infoEntryB = tk.Entry(width=10) # EntryB text object has added
#buttons:
infoButtonPlus = tk.Button(text="+",command = lambda:click_button("+")) #add plus action button parameters
infoButtonMinus = tk.Button(text="-", command = lambda:click_button("-")) #add minus action button parameters
infoButtonMulti = tk.Button(text="*",command=lambda:click_button("*")) #add multiple action button parameters
infoButtonDiv = tk.Button(text="/", command = lambda: click_button("/")) # add division action button parameters
#place location:
infoEntryA.pack()
infoEntryB.pack()
infoButtonPlus.pack()
infoButtonMinus.pack()
infoButtonMulti.pack()
infoButtonDiv.pack()
window.mainloop() ##hold screen
PythonEkran Çıktısı:

Görsellikten ve kullanıcı dostu olmaktan çok uzak bir arayüz olsa da Tkinter Python Modülünü kullanarak ilk sefer için oldukça işlevsel bir hesap makinesi yazdık.
Pack(), Place() ve Grid() Konumlandırma Metodları
Tkinter Python kodları yazarken form nesnelerini şimdiye kadarki örneklerde pack() fonksiyonu ile konumlandırdık. Pack fonksiyonu gibi farklı konumlandırma yöntemleri de var. Burada pack ile birlikte biraz da bunlara göz atacağız.
Pack()
Pack fonksiyonunun parametrelerine bakalım.
Side
Side parametresi hizalama için kullanılır. Açılan form penceresinin genişliğine göre sol-orta-sağ şeklinde hizalama yapar.
- Pack(side=”left”) : sola yaslar.
- Pack(side=”center”) : ortalar.
- Pack(side=”right”) : sağa yaslar.
- Pack(side=”top”) : en üste hizalar.
- Pack(side=”bottom”) : en alta hizalar.
Place(x,y)
Place fonksiyonu Tkinter kütüphanesinde yaptığı iş, form nesnesini tam olarak nereye koymak istediğinizi belirler. Parametre olarak x ve y koordinat değerlerini almaktadır.
- Place(x=0, y=0) : sol üst köşeye yerleştirir.
- Place(x=100, y=100): 100px sağa ve 100px aşağıya
import tkinter as tk
window = tk.Tk() # created tkinter screen.
window.title("Simple Calculator") # Screen title set
window.minsize(width=600,height=200) # window minimum size
#label:
infoLabel = tk.Label(
text="First Label:")
infoLabel.config(bg="yellow", fg="blue",font=("Arial",30,"bold")) #Label properties
def click_button(symbol): #clicked button function has defined
equal = 0
tag = ""
numA = int(infoEntryA.get())
numB = int(infoEntryB.get())
match symbol:
case "+":
equal = numA + numB
tag = "A + B"
case "-":
if numA >= numB:
equal = numA - numB
tag = "A - B"
else:
equal = numB - numA
tag = "B - A"
case "*":
equal = numA * numB
tag = "A * B"
case "/":
if numA != 0 and numB != 0:
if numA>=numB:
equal = numA / numB
tag = "A / B"
else:
equal = numB / numA
tag = "B / A"
else:
equal = "Error-102"
case _:
equal = "Error-101"
infoLabel.config(text=(tag + " = " + str(equal))) #label text parameter has changed
#Entry's:
infoEntryA = tk.Entry(width=20) # EntryA text object has added
infoEntryB = tk.Entry(width=20) # EntryB text object has added
#buttons:
infoButtonPlus = tk.Button(text="+",command = lambda:click_button("+")) #add plus action button parameters
infoButtonMinus = tk.Button(text="-", command = lambda:click_button("-")) #add minus action button parameters
infoButtonMulti = tk.Button(text="*",command=lambda:click_button("*")) #add multiple action button parameters
infoButtonDiv = tk.Button(text="/", command = lambda: click_button("/")) # add division action button parameters
infoEntryA.place(x=20, y=10)
infoEntryB.place(x=20,y=30)
infoButtonPlus.place(x=20,y=50) #place location
infoButtonMinus.place(x=40,y=50)
infoButtonMulti.place(x=60,y=50)
infoButtonDiv.place(x=80,y=50)
infoLabel.place(x=150,y=10)
window.mainloop() ##hold screen
PythonEkran Çıktısı:

Grid(row,column)
Tkinter Python üzerinde Satır ve Sütunlardan oluşan bir ızgara mantığı ile çalışabilirsiniz.
Örnek-1:
- A.grid(row=0, column=1)
- B.grid(row=1, column=1)
- C.grid(row=2, column=1)
A |
B |
C |
Örnek-2:
- A.grid(row=0, column=0)
- B.grid(row=0, column=1)
- C.grid(row=0, column=2)
A | B | C |
Tkinter Python Arayüz Kodları:
import tkinter as tk
window = tk.Tk() # created tkinter screen.
window.title("Simple Calculator") # Screen title set
window.minsize(width=600,height=200) # window minimum size
#label:
infoLabel = tk.Label(
text="First Label:")
infoLabel.config(bg="yellow", fg="blue",font=("Arial",30,"bold")) #Label properties
def click_button(symbol): #clicked button function has defined
equal = 0
tag = ""
numA = int(infoEntryA.get())
numB = int(infoEntryB.get())
match symbol:
case "+":
equal = numA + numB
tag = "A + B"
case "-":
if numA >= numB:
equal = numA - numB
tag = "A - B"
else:
equal = numB - numA
tag = "B - A"
case "*":
equal = numA * numB
tag = "A * B"
case "/":
if numA != 0 and numB != 0:
if numA>=numB:
equal = numA / numB
tag = "A / B"
else:
equal = numB / numA
tag = "B / A"
else:
equal = "Error-102"
case _:
equal = "Error-101"
infoLabel.config(text=(tag + " = " + str(equal))) #label text parameter has changed
#Entry's:
infoEntryA = tk.Entry(width=20) # EntryA text object has added
infoEntryB = tk.Entry(width=20) # EntryB text object has added
#buttons:
infoButtonPlus = tk.Button(text="+",command = lambda:click_button("+")) #add plus action button parameters
infoButtonMinus = tk.Button(text="-", command = lambda:click_button("-")) #add minus action button parameters
infoButtonMulti = tk.Button(text="*",command=lambda:click_button("*")) #add multiple action button parameters
infoButtonDiv = tk.Button(text="/", command = lambda: click_button("/")) # add division action button parameters
### GRID LOCATOR ###
infoEntryA.grid(row=0,column=0)
infoEntryB.grid(row=2,column=0)
infoButtonPlus.grid(row=1,column=1) #grid location
infoButtonMinus.grid(row=1,column=2)
infoButtonMulti.grid(row=1,column=3)
infoButtonDiv.grid(row=1,column=4)
infoLabel.grid(row=1,column=5)
window.mainloop() ##hold screen
PythonEkran Çıktısı:

Başlangıç için oldukça kullanışlı ancak ilerleyen zamanlarda çok daha kullanıcı dostu form kütüphaneleri ile bolca haşir neşir olacağız. Şimdilik Tkinter Python Modülü hakkında birkaç özellik daha öğreneceğiz.
Yazdığımız tüm örnek kodları GitHub Repositories Arşivimde inceleyebilirsiniz. GitHub Versiyon Kontrol Sistemi Nasıl Kullanılır? ve Başlıca Git Komutları ile ilgili yazılarımızı mutlaka okuyunuz. Python projelerinizde oldukça işinize yarayacak bilgiler bulunuyor.
padx ve pady Boşluk Parametreleri
Herhangi bir form nesnesinin config metodu içerisine yazarak x ve y koordinatlarında boşluklarını ayarlayabilirsiniz.
from tkinter import * #different import process
screen = Tk() # screen name of Tkinter object created
screen.title("Widget Samples") #Screen title defined
screen.minsize(width=300, height=300) #screen size defined
label = Label() #Label object created
label.config(bg="yellow") #label backcolor set yellow
label.config(fg="black") #label foreground color set black
label.config(padx=20,pady=20) #label position pad-x and pad-y
button = Button() #new button object created
button.config(text="Resize Form", command=lambda: label.config(text="Try and Catch")) #button click action defined
button.config(bg="yellow") #button backcolor set yellow
button.config(fg="red") #button foreground color set red
button.pack() #show button
label.pack() #show label
screen.mainloop()
PythonEkran Çıktısı:

Tkinter Text Nesnesi
Entry nesnesinden farklı olarak tek satır metin kutusu olarak değil de çok satırlı bir metin kutusudur Text. Tkinter Python kod satırındaki kullanımı son derece basittir.
Ancak Text nesnesinden get() metodu ile veri çekileceği zaman biraz farklı bir yöntem izlemelisiniz. Get ile Text nesnesinden bir değişkene şu şekilde veri çekilebilir:
- txt_variable = text.get(“1.0”, END) — 1.satırdan son satıra kadar olan tüm satırları alır.
- txt_variable = text.get(“3.0”, END) — 3.satırdan son satıra kadar olan tüm satırları alır.
- txt_variable = text.get(“1.3”, “5.2”) — 1.satırdan 5. satıra kadar olan tüm satırları alır.
Tkinter Python’da Text nesnesi birden fazla satır ihtiva ettiği için hangi satırları ve bu satırında kaçıncı karakterinden başlayarak alacağınızı belirtmelisiniz. Float sayı türünde bir parametre gibi görünse de örneğin “1.6” parametresi 1.satırın 6.karakterinden başlanacağını belirtmektedir.
- text.get(“1.0”, END) — 1.satırdan son satıra kadar olan tüm satırları alır.
- text.delete(“1.0”,END) — 1.satırdan son satıra kadar tüm içeriği temizle.
- text.insert(“1.0”, “string ifade“) — 1. satırdan itibaren string ifade ekle.
- text.focus() — metodu ile form yüklenir yüklenmez imleci Text nesnesinin içine getirebilirsiniz.
#import tkinter as tk #
from tkinter import * #different import process
screen = Tk() # screen name of Tkinter object created
screen.title("Widget Samples") #Screen title defined
screen.minsize(width=300, height=300) #screen size defined
def txt_read(get_txt):
label.config(text=get_txt)
#Label:
label = Label() #Label object created
label.config(bg="yellow") #label backcolor set yellow
label.config(fg="black") #label foreground color set black
label.config(padx=20,pady=20) #label position pad-x and pad-y
#Button:
button = Button() #new button object created
button.config(text="Resize Form", command=lambda: label.config(text="Try and Catch")) #button click action defined
button.config(bg="yellow") #button backcolor set yellow
button.config(fg="red") #button foreground color set red
#Button2:
btn_text = Button(text="Text Read", command=lambda: txt_read(txt.get("1.0",END))) #get:row1 to END. get:"2.0" to END.
#Text object:
txt = Text(width=30,height=10)
button.pack() #show button
btn_text.pack() #show btn_text
label.pack() #show label
txt.pack() #show text
txt.focus() #txt object on focus
screen.mainloop()
PythonEkran Çıktısı:

Scale Nesnesi
Bilgisayarın ses açıp kapama seviye çubuklarına benzer bir işlevi olan Tkinter Python form elemanıdır. get() ile veri çekerken dikkat edilmesi gereken bir özelliği bulunmaktadır.
Yukarı aşağı yönde kaydırdığınız sürece from ve to değerleri arasında gidip gelecektir.
def select_scale(value): #Burada bir argüman tanımlanmazsa çalışmaz.
label.config(text=level.get())
#import tkinter as tk #
from tkinter import * #different import process
screen = Tk() # screen name of Tkinter object created
screen.title("Widget Samples") #Screen title defined
screen.minsize(width=300, height=300) #screen size defined
def select_scale(value):
label.config(text = level.get())
#Label:
label = Label() #Label object created
label.config(bg="yellow") #label backcolor set yellow
label.config(fg="black") #label foreground color set black
label.config(padx=20,pady=20) #label position pad-x and pad-y
#Scale:
level = Scale(from_=0, to=100, command = select_scale)
label.pack() #show label
level.pack()
screen.mainloop()
PythonEkran Çıktısı:

Spinbox Form Nesnesi
Spinbox ile Python Tkinter üzerinde ne yapılır? Spinbox nesnesi artırılabilir ürün adeti girişlerinde kullanılabilir. Kod satırında Spinbox kullanımını gösterelim.
#import tkinter as tk #
from tkinter import * #different import process
screen = Tk() # screen name of Tkinter object created
screen.title("Widget Samples") #Screen title defined
screen.minsize(width=300, height=300) #screen size defined
def select_spin():
label.config(text = spin.get())
#Label:
label = Label() #Label object created
label.config(bg="yellow") #label backcolor set yellow
label.config(fg="black") #label foreground color set black
label.config(padx=20,pady=20) #label position pad-x and pad-y
#Spinbox:
spin = Spinbox(from_=0, to=100, command = select_spin)
label.pack() #show label
spin.pack()
screen.mainloop()
PythonEkran Çıktısı:

Checkbox Nesnesi
Checkbox nesnesi seçili ise 1 ve seçili değil ise 0 sayısını döndürecektir.
from tkinter import * #different import process
screen = Tk() # screen name of Tkinter object created
screen.title("Widget Samples") #Screen title defined
def run_fonk():
label.config(text=chc_val)
#Label:
label = Label() #Label object created
#Checkbox:
chc_val = tk.BooleanVar()
check = Checkbutton(text="option-1", variable=chc_val)
#Button:
button = Button(text="Run", command=run_fonk)
label.pack() #show label
check.pack()
screen.mainloop()
Python#import tkinter as tk #
from tkinter import * #different import process
screen = Tk() # screen name of Tkinter object created
screen.title("Widget Samples") #Screen title defined
screen.minsize(width=300, height=300) #screen size defined
def select_check():
label.config(text=IntVar().get())
#Label:
label = Label() #Label object created
label.config(bg="yellow") #label backcolor set yellow
label.config(fg="black") #label foreground color set black
label.config(padx=20,pady=20) #label position pad-x and pad-y
#Checkbox:
check = Checkbutton(text="option-1", variable=IntVar(), command=select_check)
label.pack() #show label
check.pack()
screen.mainloop()
PythonEkran Çıktısı:

Radio Button
Form nesnelerinin vazgeçilmezlerinden olan Radio Button nesnesi Python Tkinter modülünde nasıl kullanılır?
#import tkinter as tk #
from tkinter import * #different import process
screen = Tk() # screen name of Tkinter object created
screen.title("Widget Samples") #Screen title defined
screen.minsize(width=300, height=300) #screen size defined
def select_radio():
label.config(text=radio_state.get())
#Label:
label = Label() #Label object created
label.config(bg="yellow") #label backcolor set yellow
label.config(fg="black") #label foreground color set black
label.config(padx=20,pady=20) #label position pad-x and pad-y
#Radio Buttons:
radio_state = IntVar()
radio1 = Radiobutton(text="option-1", value=1, variable=radio_state, command=select_radio)
radio2 = Radiobutton(text="option-2", value=2, variable=radio_state, command=select_radio)
label.pack() #show label
radio.pack() #show radio button
screen.mainloop()
PythonEkran Çıktısı:

List Box
Listbox() nesnesi ile oluşturulan liste seçeneklerden herhangi birinin seçilmesi sağlanır. Tkinter Python modülünde Seçilen Listbox elemanını Label nesnesine yazdıralım.
Burada diğer nesnelerden farklı olarak “<<ListboxSelect>>” parametresi, curselection() metodu ve “event” argümanını kullanacağız. Ayrıca bir liste değişkeni içerisinde bulunan değerleri for döngüsü ile Listbox nesnesinin içine yazdıracağız.
#import tkinter as tk #
from tkinter import * #different import process
screen = Tk() # screen name of Tkinter object created
screen.title("Widget Samples") #Screen title defined
screen.minsize(width=300, height=300) #screen size defined
def select_list(event):
label.config(text=list1.get(list1.curselection()))
#Label:
label = Label() #Label object created
label.config(bg="yellow") #label backcolor set yellow
label.config(fg="black") #label foreground color set black
label.config(padx=20,pady=20) #label position pad-x and pad-y
#Listbox:
list1 = Listbox()
customer_list = ["Abraham","John","Emily","Sarah","Mack","Clara"]
for i in range(len(customer_list)):
list1.insert(i,customer_list[i])
list1.bind('<<ListboxSelect>>', select_list)
label.pack() #show label
list1.pack() #show radio button
screen.mainloop()
PythonEkran Çıktısı:

Bölüm Sonu Projesi-1: Vücut Kitle Endeksi Hesaplama Aracı
Python Tkinter kütüphanesini kullanarak asit bir form üzerinden kullanıcının girdiği boy ve kilo değerlerini alarak bir uygulama geliştirelim. Bu uygulamada kullanıcı veri girişi yaparken hatalı veri girişine karşı try-except bloğu da kuralım. Sıfır Hatası ve Nümerik olmayan veri giriş hatasını tespit etsin.
En sonunda VKİ değeri hesaplansın ve bu değer üzerinden zayıf-normal-kilolu-obez şeklinde yorumlar yapsın uygulamamız. Aşağıda kod satırının her birinin işlevi hemen yanında açıklama olarak yazılmıştır.
from tkinter import *
def bmi_calculator():
if txt_weight.get() != "0" and txt_size.get() !="0":
label_comments.config(text="")
label_results.config(text="")
try: #Error trapping to prevent an incorrect value from being returned.
bmi_weight = float(txt_weight.get()) #body weight by kg
bmi_size = float(txt_size.get()) / 100 # cm to meter converted
bmiCalculate = bmi_weight / (pow(bmi_size, 2)) # bmi calculate function
label_results.config(text=("BMI: " + str(round(bmiCalculate, 2))),bg="light blue") # float number is round 2-digits and convert to string
#Comment according to bmi values
if bmiCalculate < 16.0:
label_comments.config(text="Severe Thinness",bg="light green")
elif bmiCalculate >= 16.0 and bmiCalculate < 17.0:
label_comments.config(text="Moderate Thinness",bg="green")
elif bmiCalculate >= 17.0 and bmiCalculate < 18.5:
label_comments.config(text="Mild Thinness",bg="yellow")
elif bmiCalculate >= 18.5 and bmiCalculate < 25.0:
label_comments.config(text="Normal",bg="white")
elif bmiCalculate >= 25.0 and bmiCalculate < 30.0:
label_comments.config(text="Overweight",bg="orange")
elif bmiCalculate >= 30.0 and bmiCalculate < 35.0:
label_comments.config(text="Obese Class I",bg="red")
elif bmiCalculate >= 35.0 and bmiCalculate < 40.0:
label_comments.config(text="Obese Class II",bg="red")
elif bmiCalculate >= 40.0:
label_comments.config(text="Obese Class III",bg="red")
else:
label_comments.config(text="No Comment!",bg="red")
except ValueError:
label_comments.config(text="Just Numbers")
return
except ZeroDivisionError:
label_comments.config(text="Do not type zero!")
return
else:
label_comments.config(text="Do not type zero")
#Tkinter object:
tkScreen = Tk()
tkScreen.minsize(width=400,height=300)
tkScreen.title("Body Index Calculator - BMI")
#Labels:
label_weight = Label(text="Your Weight(kg):",fg="blue",font=("Verdana",12,"bold"))
label_size = Label(text="Your Body Size(cm):",fg="blue",font=("Verdana",12,"bold"))
label_results = Label(text="",font=("Verdana",12,"bold"))
label_comments = Label(text="",font=("Verdana",12,"bold"))
#Entries:
txt_weight = Entry(width=10)
txt_size = Entry(width=10)
btn_calc = Button(text="CALCULATE",font=("Verdana",14,"bold"),command=bmi_calculator)
###Locator###
label_weight.grid(row=0,column=0)
txt_weight.grid(row=0,column=1)
label_size.grid(row=1,column=0)
txt_size.grid(row=1,column=1)
label_results.grid(row=3,column=1)
label_comments.grid(row=4,column=1)
btn_calc.grid(row=2,column=0)
tkScreen.mainloop()
PythonEkran Çıktısı:



Bölüm Sonu Projesi-2: Python ile Gizli Kripto Mesaj Projesi
Tkinter Python kütüphanesini kullanarak bir form üzerinden gizli ve şifreli mesaj üretme projesi hazırlayacağız. Bunun için gerekenler: zaman, stackoverflow, biraz google, az biraz vakit ve tabiki python yüklü bir bilgisayar. Haydi başlayalım!
Encode, Decode ve File Export adında 3 farklı metod tanımlıyoruz. Ayrıca tkinter ve cryptocode adlı kütüphaneleri de import etmeyi unutmayın. Tüm adımlarda yapılan işlemler yorum satırları ile belirtilmiştir.
### IMPORT LIBRARY ###
from tkinter import messagebox
from tkinter import *
import cryptocode as cr
## Encoding process ##
def encode():
if txt_title.get() !="" and txt_encoding_decoding.get("1.0",END) != "" and txt_passkey.get() != "":
enc_dec = txt_encoding_decoding.get("1.0",END)
passkey = txt_passkey.get()
my_title = txt_title.get()
secret_encode = cr.encrypt(message=enc_dec,password=passkey) # Encrypt for your message.
file_export(my_title, secret_encode)
else:
messagebox.showerror(title="Uyarı!", message="Make sure you fill in all fields")
## Decoding process ##
def decode():
if txt_encoding_decoding.get("1.0", END) != "" and txt_passkey.get() != "":
enc_dec = txt_encoding_decoding.get("1.0",END)
passkey = txt_passkey.get()
secret_decode = cr.decrypt(enc_dec,password=passkey) # decrypt for your message
txt_encoding_decoding.delete("1.0",END)
txt_encoding_decoding.insert("0.0",secret_decode)
else:
messagebox.showerror(title="Uyarı!", message="Make sure you fill in all fields")
#File Saving Operations: ##
def file_export(my_title, enc_dec):
try:
file1 = open("message.txt", "a")
file1.write(my_title + "\n" + enc_dec + "\n")
file1.close()
except FileNotFoundError:
file1 = open("message.txt", "a")
file1.write(my_title + "\n" + enc_dec + "\n")
file1.close()
finally:
messagebox.showinfo("Successfuly", "The message was encrypted and saved to file.")
txt_title.delete(0, END)
txt_passkey.delete(0, END)
txt_encoding_decoding.delete("1.0", END)
lbl_status.config(text="File Saved. Did you look at the message.txt file?", bg="light green")
## UI Objects ##
screen = Tk()
screen.title("Cyrpto Text - Top Secret Messages")
screen.minsize(width=400,height=600)
screen.config(bg="light blue")
#Logo image:
img = PhotoImage(file="enigma.png")
image_label = Label(screen, image=img)
image_label.pack(padx=0,pady=45)
#Label:
lbl_title = Label(text="Title:", font=("Verdana",12,"bold"))
lbl_title.pack()
#Entry Text:
txt_title = Entry()
txt_title.pack()
txt_title.focus()
#Label:
lbl_crypto = Label(text="Encoding/Decoding:", font=("Verdana",12,"bold"))
lbl_crypto.pack()
#Text Message:
txt_encoding_decoding = Text(width=40,height=10)
txt_encoding_decoding.pack()
#Label Password Key:
lbl_password = Label(text="Passkey:", font=("Verdana",12,"bold"))
lbl_password.pack()
#Entry Passkey:
txt_passkey = Entry()
txt_passkey.pack()
#Label Status:
lbl_status = Label(text="", font=("Verdana",12,"bold"))
lbl_status.pack()
#Button Encoding and Save Action:
btn_encode = Button(text="::Encode & Save::", fg="white",bg="black", font=("Verdana",12,"bold"),command=encode)
btn_encode.pack()
#Button Decoding Action:
btn_decode = Button(text="::Decode::", fg="black",bg="white", font=("Verdana",12,"bold"),command=decode)
btn_decode.pack()
screen.mainloop()
PythonEkran Çıktısı:



Bölüm sonu canavarını da geçtiğimize göre şimdi Python’daki bir sonraki adım rahatlıkla geçebiliriz. Tkinter Python Kütüphanesi hakkında sorularınızı aşağıda bulunan yorumlar bölümünden ve sosyal medya hesapları üzerinden paylaşabilirsiniz.