Tkinter Python Arayüz Tasarım Modülü

24.01.2025
92

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 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.

GitHub Tkinter Projesi: https://github.com/omersahintr/tkinter_interfaces.git

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
Python

infolabel 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
Python

Kod 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
Python

Ekran Çı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
Python

Ekran Çı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
Python

Ekran Çıktısı:

Tkinter Python Mehods

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)
ABC

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
Python

Ekran Çıktısı:

Tkinter grid lcator

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()
Python

Ekran Çı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()
Python

Ekran Çı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()
Python

Ekran Çı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()
Python

Ekran Çı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()
Python

Ekran Çı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()
Python

Ekran Çı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()
Python

Ekran Çı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()
Python

Ekran Çı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()
Python

Ekran Çı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.

ZİYARETÇİ YORUMLARI - 0 YORUM

Henüz yorum yapılmamış.

Bu web sitesi, bilgisayarınıza bilgi depolamak amacıyla bazı tanımlama bilgilerini kullanabilir.
Bu bilgilerin bir kısmı sitenin çalışmasında esas rolü üstlenirken bir kısmı ise kullanıcı deneyimlerinin iyileştirilmesine ve geliştirilmesine yardımcı olur.
Sitemize ilk girişinizde vermiş olduğunuz çerez onayı ile bu tanımlama bilgilerinin yerleştirilmesine izin vermiş olursunuz.
Çerez bilgilerinizi güncellemek için ekranın sol alt köşesinde bulunan mavi kurabiye logosuna tıklamanız yeterli. Kişisel Verilerin Korunması,
Gizlilik Politikası ve Çerez (Cookie) Kullanımı İlkeleri hakkında detaylı bilgi için KVKK&GDPR sayfamızı inceleyiniz.
| omersahin.com.tr |
Copyright | 2007-2025