Dersler

View on GitHub

modern tkinter kütüphaneleri

widget’ların (bileşen) konumlandırması için 3 tane yerleşim yöneticisi var: pack, grid ve place

Aynı seviyede tek türk yerleşim yöntemi kullanılır. iç içe yerleşimlerde farklı yöntemler kullanılabilir.

Pack

Grid

Place

Yerleşimle ilgili ayrıntılar için: https://pressbooks.pub/tkintergui/chapter/layout_managers/

Veri türleri

get() ve set() ile veri alınabilir ve set edilebilir.
Örnek:

name_var = tb.StringVar(value="my name")
entered_name = name_var.get()

age_var = tb.IntVar()
age_var.set(25)

Temel widget’lar


Örnekler

import tkinter as tk

root = tk.Tk()
root.title("Pack Versiyonu")
root.geometry("250x200")

def topla():

    sayi1 = float(entry1.get())
    sayi2 = float(entry2.get())
    sonuc = sayi1 + sayi2

    sonuc_label.config(text=f"Sonuç: {sayi1 + sayi2}")



entry1 = tk.Entry(root)
entry1.pack(pady=5)

entry2 = tk.Entry(root)
entry2.pack(pady=5)

btn = tk.Button(root, text="Topla", command=topla)
btn.pack(pady=5)

sonuc_label = tk.Label(root, text="Sonuç: ")
sonuc_label.pack(pady=5)

root.mainloop()
import tkinter as tk

def topla():
    sayi1 = float(entry1.get())
    sayi2 = float(entry2.get())
    sonuc = sayi1 + sayi2

    sonuc_label.config(text=f"{sonuc}")
    

root = tk.Tk()
root.title("Pack Versiyonu")
root.geometry("300x350")

entry1 = tk.Entry(root)
entry1.pack(pady=5)

entry2 = tk.Entry(root)
entry2.pack(pady=5)

btn = tk.Button(root, text="Topla", command=topla)#
btn.pack(pady=5)

sonuc_label = tk.Label(root, text="Sonuç: ")
sonuc_label.pack(pady=5)


root.mainloop()
import tkinter as tk

root = tk.Tk()
root.title("Grid Versiyonu")
root.geometry("250x150")


def topla():
    
        sayi1 = float(entry1.get())
        sayi2 = float(entry2.get())
        sonuc = sayi1 + sayi2
    
        sonuc_label.config(text=f"Sonuç: {sonuc}")
    

root.columnconfigure(0, weight=1)

entry1 = tk.Entry(root, width=20) 
entry1.grid(row=0, column=0, pady=5, padx=10, sticky='ew')

entry2 = tk.Entry(root, width=20)
entry2.grid(row=1, column=0, pady=5, padx=10, sticky='ew')


btn = tk.Button(root, text="Topla", command=topla)
btn.grid(row=2, column=0, pady=10, padx=10, sticky='ew') 


sonuc_label = tk.Label(root, text="Sonuç: ")
sonuc_label.grid(row=3, column=0, pady=5, padx=10, sticky='ew')

root.mainloop()
import tkinter as tk

root = tk.Tk()
root.title("Grid & Tkinter Değişkenleri Versiyonu")
root.geometry("250x150")


def topla():
    
    s1 = sayi1_var.get()
    s2 = sayi2_var.get()
    sonuc = s1 + s2
    sonuc_var.set(f"Sonuç: {sonuc}")


root.columnconfigure(0, weight=1)


sayi1_var = tk.DoubleVar(value=0)
entry1 = tk.Entry(root, width=20, textvariable=sayi1_var)
entry1.grid(row=0, column=0, pady=5, padx=10, sticky='ew')

sayi2_var = tk.DoubleVar(value=0)
entry2 = tk.Entry(root, width=20, textvariable=sayi2_var)
entry2.grid(row=1, column=0, pady=5, padx=10, sticky='ew')

btn = tk.Button(root, text="Topla", command=topla)
btn.grid(row=2, column=0, pady=10, padx=10, sticky='ew')

sonuc_var = tk.StringVar(value="Sonuç: ")
# sonuc_var.set()
sonuc_label = tk.Label(root, textvariable=sonuc_var)
sonuc_label.grid(row=3, column=0, pady=5, padx=10, sticky='ew')

root.mainloop()
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
def open_image():
    file_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.jpg *.jpeg *.png")])
    if file_path:
        # Load and display image
        img = Image.open(file_path)
        img.thumbnail((600, 600))  # Resize while maintaining aspect ratio
        photo = ImageTk.PhotoImage(img)
        canvas.image = photo  # Keep reference
        canvas.create_image(0, 0, anchor=tk.NW, image=photo)
        file_label.config(text=file_path)
def open_image():
    file_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.jpg *.jpeg *.png")])
    if file_path:
        # Load and display image
        img = Image.open(file_path)
        img.thumbnail((600, 600))  # Resize while maintaining aspect ratio
        photo = ImageTk.PhotoImage(img)
        canvas.image = photo  # Keep reference
        canvas.create_image(0, 0, anchor=tk.NW, image=photo)
        file_label.config(text=file_path)
root = tk.Tk()
root.title("Image")
root.geometry("800x600")


# Top Frame (File Dialog)
top_frame = tk.Frame(root, height=30)
top_frame.pack(side="top", fill="x")

open_button = tk.Button(top_frame, text="Open Image", command=open_image)
open_button.pack(side="left", padx=5, pady=2)

file_label = tk.Label(top_frame, text="No image selected")
file_label.pack(side="left", padx=5)

# Main Content Area
main_frame = tk.Frame(root)
main_frame.pack(fill="both", expand=True)

# Left Canvas (Image Display)
left_frame = tk.Frame(main_frame, width=600, bg='gray')
left_frame.pack(side="left", fill="both", expand=True)

canvas = tk.Canvas(left_frame, width=600, height=600)
canvas.pack(fill="both", expand=True)

# Right Panel (Controls)
right_frame = tk.Frame(main_frame, width=200, bg='lightgray')
right_frame.pack(side="right", fill="y")

# Right Panel Controls
control_frame = tk.LabelFrame(right_frame, text="Image Processing", padx=5, pady=5)
control_frame.pack(padx=10, pady=10, fill="x")

# # Example controls
tk.Label(control_frame, text="Filter:").pack(anchor="w")
tk.Button(control_frame, text="Grayscale").pack(fill="x", pady=2)
tk.Button(control_frame, text="Blur").pack(fill="x", pady=2)
tk.Button(control_frame, text="Sharpen").pack(fill="x",pady=2)

# # Parameters Section
param_frame = tk.LabelFrame(right_frame, text="Parameters", padx=5, pady=5)
param_frame.pack(padx=10, pady=10, fill="x")

tk.Label(param_frame, text="Threshold:").pack(anchor="w")
threshold_slider = tk.Scale(param_frame, from_=0, to=255, orient="horizontal")
threshold_slider.pack(fill=tk.X)

root.mainloop()
import cv2
import tkinter.filedialog
import customtkinter as ctk
from PIL import Image, ImageTk
from ultralytics import YOLO

# Model yükle
model = YOLO("yolo12x.pt")

# Global değişkenler
image = None
image_path = None
results = None
boxes = []

def open_image():
    global image, image_path, results, boxes

    file = tkinter.filedialog.askopenfilename(filetypes=[("Image files", "*.jpg *.png *.jpeg")])
    print(file)
    if not file:
        return

    image_path = file
    image = cv2.imread(image_path)

    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    image_resized = cv2.resize(image_rgb, (600, 400))
    im_pil = Image.fromarray(image_resized)
    imgtk = ImageTk.PhotoImage(im_pil)

    canvas.imgtk = imgtk
    canvas.create_image(0, 0, anchor="nw", image=imgtk)

    file_label.configure(text=f"{image_path.split('/')[-1]}")

    # YOLO tahmini
    results = model.predict(source=image, classes=None)[0]
    boxes = results.boxes

    # Slider ayarları
    box_slider.configure(to=len(boxes) - 1 if boxes else 0)
    update_box(0)

def update_box(index):
    if not boxes:
        return

    index = int(index)
    box = boxes[index]
    class_id = int(box.cls)
    label = model.names[class_id]
    conf = float(box.conf)
    x, y, w, h = map(int, box.xywh[0])

    # Resme kutu çiz
    image_copy = image.copy()
    cv2.rectangle(image_copy, (x - w // 2, y - h // 2), (x + w // 2, y + h // 2), (0, 255, 0), 2)
    cv2.putText(image_copy, f"{label} ({conf:.2f})", (x - w // 2, y - h // 2 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)

    image_rgb = cv2.cvtColor(image_copy, cv2.COLOR_BGR2RGB)
    image_resized = cv2.resize(image_rgb, (600, 400))
    im_pil = Image.fromarray(image_resized)
    imgtk = ImageTk.PhotoImage(im_pil)

    canvas.imgtk = imgtk
    canvas.create_image(0, 0, anchor="nw", image=imgtk)

    info_text.configure(text=f"Label: {label}\nConfidence: {conf:.2f}\nXYWH: {box.xywh[0].cpu().numpy().astype(int)}")

# Uygulama ayarları
ctk.set_appearance_mode("light")
ctk.set_default_color_theme("blue")

root = ctk.CTk()
root.title("Araç Tespit Arayüzü")
root.geometry("900x600")

# Üst panel
top_frame = ctk.CTkFrame(root, height=40)
top_frame.pack(side="top", fill="x", padx=10, pady=5)

open_button = ctk.CTkButton(top_frame, text="Resim Aç", command=open_image)
open_button.pack(side="left", padx=10)

file_label = ctk.CTkLabel(top_frame, text="Resim seçilmedi")
file_label.pack(side="left", padx=10)

# Ana içerik
main_frame = ctk.CTkFrame(root)
main_frame.pack(fill="both", expand=True, padx=10, pady=5)

# Sol panel (Canvas)
left_frame = ctk.CTkFrame(main_frame, width=600)
left_frame.pack(side="left", fill="both", expand=True)

canvas = ctk.CTkCanvas(left_frame, width=600, height=400, bg="gray")
canvas.pack(padx=10, pady=10)

# Sağ panel
right_frame = ctk.CTkFrame(main_frame, width=250)
right_frame.pack(side="right", fill="y", padx=10)

ctk.CTkLabel(right_frame, text="Araç Seç", font=("Arial", 14)).pack(pady=(10, 0))
box_slider = ctk.CTkSlider(right_frame, from_=0, to=0, command=update_box)
box_slider.pack(fill="x", padx=20, pady=10)

info_text = ctk.CTkLabel(right_frame, text="", justify="left", anchor="w", wraplength=220)
info_text.pack(padx=20, pady=10)

root.bind("<Escape>", lambda x: root.destroy())


root.mainloop()

Tkinter tutorial tavsiyesi: https://www.youtube.com/watch?v=mop6g-c5HEY