1. Eventlərin işlənməsi anlayışı
Qrafik interfeysli tətbiqlərdə eventlərin işlənməsi istifadəçi ilə proqramın qarşılıqlı əlaqəsinin əsas mexanizmidir. İstifadəçi düyməni klikləyəndə, mətn daxil edəndə və ya sadəcə kursoru hərəkət etdirəndə tətbiqdə eventlər baş verir. Bu eventlər funksiyaları işə sala bilər, interfeysi dəyişə bilər və hətta proqramın iş prinsipini tamamilə dəyişə bilər. Təsəvvür et ki, sən pitsaları məharətlə jonglörlük edən bir dostsan və hər bir pitza – isti-isti işlənməli olan bir eventdir!
Düymələrin kliklənməsi ilə funksiyaların çağırılması
Gəlin sadədən başlayaq: düyməni funksiya ilə necə əlaqələndirməliyik? Məntiq sadədir: düyməni yaradırıq, klikləməyi tuturuq və Python sehrini işə salırıq. Əvvəlcə bir neçə düyməsi olan sadə bir pəncərə yaradaq.
import tkinter as tk
def say_hello():
print("Salam, istifadəçi!")
def count_clicks():
global count
count += 1
print(f"Düymə {count} dəfə klikləndi.")
# Baş pəncərəni yaradırıq
root = tk.Tk()
root.title("Eventlərin işlənməsi")
root.geometry("300x200")
# Salam üçün düymə yaradırıq
hello_button = tk.Button(root, text="Salam de", command=say_hello)
hello_button.pack(pady=10)
# Kliklənmələri sayma düyməsi yaradırıq
count = 0
count_button = tk.Button(root, text="Klikləri say", command=count_clicks)
count_button.pack(pady=10)
# Tətbiqin əsas loopunu işə salırıq
root.mainloop()
Bu nümunədə "Salam de" düyməsini klikləməklə konsola mesaj çıxır, "Klikləri say" düyməsini klikləməklə isə kliklərin sayı sayılır.
2. Hadisələrin widget'larla bağlanması
Tkinter-də hadisələr təkcə düymələrlə deyil, həmçinin daxil etmə sahələri, checkbox'lar və label'lər kimi digər widget'larla da bağlana bilər. Bu, tətbiqlərinizin interfeys dəyişikliklərinə reaksiya verməsinə imkan tanıyır, təcrübəli aşpazların yanmış piroqun qoxusuna reaksiya verdikləri kimi.
Nümunə: düymənin basıldıqda rənginin dəyişdirilməsi
Gəlin nümunəmizi dəyişək ki, düymə basıldıqda öz rəngini dəyişsin.
def change_color():
current_color = color_button.cget("bg")
new_color = "sarı" if current_color == "qırmızı" else "qırmızı"
color_button.config(bg=new_color)
color_button = tk.Button(root, text="Rəngi dəyiş", bg="qırmızı", command=change_color)
color_button.pack(pady=10)
İndi düymə hər dəfə basıldıqda rəngini dəyişəcək. Bu, istifadəçiyə hadisənin işlənildiyini vizual olaraq göstərməyin sadə bir nümunəsidir.
3. Hadisələrin praktik istifadəsi
Artıq funksiyaları hadisələrlə əlaqələndirməyi bacardığınız üçün, müxtəlif hadisələrə reaksiya verən interaktiv bir tətbiq yaratmağa çalışaq. Gəlin düyməyə basmaqla işə başlayan və dayanan taymeri olan bir tətbiq təsəvvür edək.
Taymer proqramı nümunəsi
Gəlin elə bir tətbiq yazaq ki, düyməyə basılmaqla saniyələri hesablayan bir taymer başlasın.
import time
def start_timer():
global running
if not running:
running = True
count_seconds()
def stop_timer():
global running
running = False
def count_seconds():
if running:
global seconds
seconds += 1
time_label.config(text=f"Keçən saniyələr: {seconds}")
root.after(1000, count_seconds)
seconds = 0
running = False
start_button = tk.Button(root, text="Başlat", command=start_timer)
start_button.pack(side="left", padx=10)
stop_button = tk.Button(root, text="Dayandır", command=stop_timer)
stop_button.pack(side="right", padx=10)
time_label = tk.Label(root, text="Keçən saniyələr: 0")
time_label.pack(pady=20)
root.mainloop()
Bu nümunədə bizdə iki düymə var: "Başlat" və "Dayandır". "Başlat"a basmaq vaxtın hesablanmasını başlatır, "Dayandır"a basmaq isə onu dayandırır. `after` metodundan saniyə vaxtından sonra funksiyanın yenidən başladılmasını təmin etmək üçün istifadə edirik. Bu əsas tətbiq dövrünü bloklamadan digər tapşırıqları yerinə yetirməyə imkan verir.
4. Hadisələrin işlənməsində xəta mesajları
Bəzən proqramlar qəribə davrana bilər və bunun səbəbi hadisələrin işlənməsi məntiqindəki xətalardır. Məsələn, düymənin sıxılması məlumatların səhv işlənməsinə və ya arzuolunmaz nəticələrə səbəb ola bilər. Bütün mümkün istisnaları nəzərə almaq və istifadəçinin bütün hərəkətlərinin düzgün işlənməsini təmin etmək çox vacibdir.
İstisnaların işlənməsi nümunəsi
Taymer nümunəsinə istisnaların işlənməsini əlavə edək ki, məsələn, taymer artıq işləyərkən işə salınmaq problemi yaranmasın.
def start_timer():
global running
try:
if not running:
running = True
count_seconds()
except Exception as e:
print(f"Taymerin işə salınmasında xəta: {e}")
def stop_timer():
global running
try:
running = False
except Exception as e:
print(f"Taymerin dayandırılmasında xəta: {e}")
İndi, taymeri işə salma və ya dayandırma zamanı nəsə səhv gedərsə, xətalar haqqında ətraflı məlumatımız olacaq.
Hadisələrin işlənməsi — interaktiv GUI-tətbiqləri yaratmanın əsas hissəsidir. Bu, proqramınıza istifadəçi hərəkətlərinə reaksiya göstərməyə imkan verən bir şeydir və bu da tətbiqlərinizi daha dinamik və faydalı edir. Hadisələri funksiyalarla bağlamağın, interfeysi dəyişdirməyin və istifadəçi hərəkətlərinə reaksiya verməyin necə olduğunu izah edən bir neçə nümunə yaratdıq. Əgər bunu mənimsəsəniz, skript sizin dostunuz, xətalar isə çoxdan unudulmuş düşmənləriniz olacaq.
GO TO FULL VERSION