آموزش ساخت دفترچه تلفن با پایتون + Tkinter و SQLite
آموزش ساخت دفترچه تلفن با پایتون Tkinter + SQLite — سورس کامل قابل کپی
دنبال یک پروژه پایتون کاربردی هستی که هم برای نمونه سوال عملی فنی و حرفهای مناسب باشه و هم بتونی توی رزومهت بذاری؟ این مقاله دقیقاً همون چیزیه که لازم داری. با هم قدمبهقدم یک برنامه دفترچه تلفن کامل با Python، Tkinter و SQLite3 میسازیم. سورس کد کامل و قابل کپی آمادهست.
پروژه دفترچه تلفن با پایتون (Tkinter + SQLite) یکی از رایجترین نمونه سوالات عملی فنی و حرفهای در رشته برنامهنویسی است. این پروژه ترکیبی از رابط گرافیکی (GUI)، دیتابیس محلی (SQLite)، عملیات CRUD و جستجوی LIKE را آموزش میدهد و یک تمرین کامل برای تسلط بر پایتون است.
پروژه دفترچه تلفن با پایتون — از صفر تا اجرا
پایتون (Python) امروز یکی از محبوبترین زبانهای برنامهنویسی دنیاست. یکی از بهترین راهها برای یادگیری پایتون، ساختن پروژههای واقعی است — نه فقط حل تمرینهای تئوری. در این مقاله با هم یک برنامه دفترچه تلفن کامل میسازیم که:
- ✅ با Tkinter رابط گرافیکی داره
- ✅ با SQLite اطلاعات مخاطبین رو ذخیره میکنه
- ✅ میتونه مخاطب اضافه کنه، حذف کنه، ویرایش کنه
- ✅ جستجوی جزئی روی نام یا شماره موبایل داره
- ✅ کامنتگذاری شده و برای امتحان عملی مناسبه
چرا پروژه دفترچه تلفن برای فنی و حرفهای و رزومه حیاتیه؟
نمونه سوال عملی
دفترچه تلفن یکی از پرتکرارترین سوالات آزمون عملی پایتون در آموزشگاههای فنی و حرفهای تبریز و سراسر کشوره.
ترکیب Tkinter + SQLite
یاد میگیری چطور یک برنامه دسکتاپ واقعی بسازی که اطلاعات رو توی دیتابیس ذخیره کنه و با جستجوی LIKE بازخونی کنه.
مناسب رزومه
این پروژه رو میتونی توی گیتهاب بذاری و بهعنوان نمونه کار برای استخدام معرفی کنی. کارفرماها عاشق پروژههای عملیان.
ابزارهای موردنیاز برای اجرای پروژه
Python 3.x
نسخه ۳.۷ به بالا. از سایت python.org دانلودش کن.
Tkinter
بهصورت پیشفرض همراه پایتون نصب میشه. نیازی به نصب جداگانه نیست.
SQLite3
ماژول sqlite3 هم بهصورت داخلی در پایتون وجود داره.
یک ادیتور
VS Code، PyCharm یا حتی IDLE خود پایتون کافیه.
خروجی نهایی برنامه دفترچه تلفن
برنامهای که در انتهای این مقاله میسازی، دقیقاً به این شکل کار میکنه:
📸 خروجی برنامه دفترچه تلفن — ساختهشده با Python + Tkinter + SQLite
همونطور که میبینی، برنامه شامل این بخشهاست:
- 👤 فیلد نام مخاطب
- 📱 فیلد شماره تلفن
- 📋 لیستباکس برای نمایش همه مخاطبین
- ➕ دکمه افزودن
- 🗑️ دکمه حذف
- ✏️ دکمه ویرایش
- 🚪 دکمه خروج
- 🔍 فیلد جستجو + دکمه نمایش همه
سورس کد کامل پروژه دفترچه تلفن (قابل کپی)
کد زیر رو کامل کپی کن، توی یک فایل با پسوند
telbook.py
ذخیره کن و اجراش کن. همه چیز آمادهست!
# -*- coding: utf-8 -*-
"""
برنامه دفترچه تلفن ساده با استفاده از Tkinter و SQLite
قابلیتها:
- افزودن مخاطب
- حذف مخاطب
- ویرایش مخاطب
- جستجوی جزئی روی نام یا شماره موبایل
- نمایش همه مخاطبین
"""
# ===== 1) وارد کردن کتابخانههای مورد نیاز =====
import sqlite3 # برای کار با پایگاه داده SQLite
from tkinter import * # برای ساخت رابط گرافیکی (GUI)
from tkinter import messagebox # برای نمایش پیامهای هشدار و اطلاع
# ===== 2) اتصال به پایگاه داده =====
# اتصال به فایل پایگاه داده به نام a1.db
# اگر فایل وجود نداشته باشد، SQLite خودش آن را میسازد
conn = sqlite3.connect('a1.db')
# ساخت یک "مکاننما" (cursor) برای اجرای دستورات SQL
curs = conn.cursor()
# ساخت جدول telbook در صورت عدم وجود
# ستونها:
# id : شناسه یکتا (خودکار زیاد میشود)
# nam : نام مخاطب
# mobile : شماره موبایل
curs.execute('create table if not exists telbook (id integer primary key autoincrement, nam text, mobile text)')
# ذخیره تغییرات در پایگاه داده
conn.commit()
# ===== 3) متغیر سراسری برای نگهداری شناسه (id) مخاطب انتخابشده =====
global kod # kod = شناسه رکوردی که کاربر روی آن کلیک کرده است
# ===== 4) توابع برنامه =====
def add():
"""افزودن یک مخاطب جدید به پایگاه داده"""
# خواندن نام و شماره از کادرهای ورودی
nam = ent1.get()
tel = ent2.get()
# درج رکورد جدید در جدول
# از ? استفاده میکنیم تا از تزریق SQL جلوگیری شود
curs.execute('insert into telbook (nam,mobile) values(?,?)', (nam, tel))
# ذخیره تغییرات
conn.commit()
# پاک کردن کادرهای ورودی
ent1.delete(0, END)
ent2.delete(0, END)
# قرار دادن مکاننما (focus) روی کادر نام
ent1.focus_set()
# بهروزرسانی لیست نمایش
show()
def show():
"""نمایش همه مخاطبین در Listbox"""
# پاک کردن لیست فعلی
mylist.delete(0, END)
# خواندن همه رکوردها از جدول
curs.execute('select * from telbook')
info = curs.fetchall() # fetchall = گرفتن همه نتایج به صورت لیست
# درج هر رکورد در Listbox
for i in info:
mylist.insert(END, i)
def onselect(event):
"""وقتی کاربر روی یک آیتم Listbox کلیک میکند، اطلاعات آن را در کادرها نشان بده"""
# شماره سطر انتخابشده
satrno = mylist.curselection()
# گرفتن متن آن سطر (به صورت tuple)
matn = mylist.get(satrno)
# پاک کردن کادرهای ورودی
ent1.delete(0, END)
ent2.delete(0, END)
# قرار دادن نام و شماره در کادرها
ent1.insert(0, matn[1]) # matn[1] = نام
ent2.insert(0, matn[2]) # matn[2] = موبایل
# ذخیره شناسه رکورد در متغیر سراسری kod
global kod
kod = matn[0] # matn[0] = id
def hazf():
"""حذف مخاطب انتخابشده از پایگاه داده"""
# پرسیدن تأیید از کاربر
javab = messagebox.askyesno('توجه', 'آیا میخواهید اطلاعات حذف شود؟')
if javab == True:
# حذف رکورد بر اساس شناسه (kod)
curs.execute('delete from telbook where id=?', (kod,))
# پاک کردن کادرهای ورودی
ent1.delete(0, END)
ent2.delete(0, END)
ent1.focus_set()
# ذخیره تغییرات
conn.commit()
# نمایش پیام موفقیت
messagebox.showinfo('توجه', 'اطلاعات حذف شد')
# بهروزرسانی لیست
show()
def edit():
"""ویرایش اطلاعات مخاطب انتخابشده"""
# خواندن مقادیر جدید از کادرها
nam = ent1.get()
tel = ent2.get()
# بهروزرسانی رکورد بر اساس شناسه
curs.execute('update telbook set nam=?,mobile=? where id=?', (nam, tel, kod))
# ذخیره تغییرات
conn.commit()
# پیام موفقیت
messagebox.showinfo('توجه', 'تغییرات ذخیره شد')
# بهروزرسانی لیست
show()
def exit_app():
"""بستن پنجره برنامه"""
win.destroy()
def search():
"""جستجوی جزئی روی نام یا شماره موبایل"""
# خواندن متن جستجو و حذف فاصلههای اضافی
text = ent3.get().strip()
# پاک کردن لیست فعلی
mylist.delete(0, END)
# اگر کادر جستجو خالی بود، همه را نشان بده
if text == "":
show()
return
# جستجو با LIKE
# % در دو طرف یعنی: هر چیزی قبل یا بعد از عبارت بیاید
query = "select * from telbook where nam like ? or mobile like ?"
pattern = "%" + text + "%"
curs.execute(query, (pattern, pattern))
info = curs.fetchall()
# نمایش نتایج
if info:
for i in info:
mylist.insert(END, i)
else:
# اگر چیزی پیدا نشد
mylist.insert(END, "موردی یافت نشد")
# ===== 5) ساخت پنجره اصلی برنامه =====
win = Tk() # ساخت پنجره
win.geometry('500x400') # اندازه پنجره: 500 در 400
win.title('اپلیکیشن دفترچه تلفن') # عنوان پنجره
# ===== 6) ساخت ویجتهای رابط کاربری =====
# --- ردیف اول: نام مخاطب ---
lab1 = Label(text='نام مخاطب').place(x=50, y=30) # برچسب نام
ent1 = Entry() # کادر ورود نام
ent1.place(x=130, y=30) # مکان کادر نام
# --- ردیف دوم: شماره تلفن ---
l1b2 = Label(text='شماره تلفن').place(x=50, y=70) # برچسب شماره
ent2 = Entry() # کادر ورود شماره
ent2.place(x=130, y=70) # مکان کادر شماره
# --- ردیف سوم: دکمههای عملیات ---
dok1 = Button(text='افزودن', command=add).place(x=50, y=110, width=80)
dok2 = Button(text='حذف', command=hazf).place(x=150, y=110, width=80)
dok3 = Button(text='ویرایش', command=edit).place(x=250, y=110, width=80)
dok4 = Button(text='خروج', command=exit_app).place(x=350, y=110, width=80)
# --- Listbox برای نمایش لیست مخاطبین ---
mylist = Listbox()
mylist.place(x=100, y=150, width=300)
# نمایش اولیه لیست
show()
# اتصال رویداد انتخاب سطر در Listbox به تابع onselect
mylist.bind('<<ListboxSelect>>', onselect)
# --- بخش جستجو ---
l1b3 = Label(win, text='جستجو').place(x=50, y=330) # برچسب جستجو
ent3 = Entry(win) # کادر ورود متن جستجو
ent3.place(x=100, y=330)
dok4 = Button(win, text='جستجو', command=search).place(x=240, y=330, width=80)
dok5 = Button(win, text='نمایش همه', command=show).place(x=330, y=330, width=80)
# ===== 7) اجرای حلقه اصلی برنامه =====
mainloop() # منتظر میماند تا کاربر با پنجره تعامل کند
sudo apt install python3-tk).
توضیح بخشهای اصلی کد (برای امتحان عملی)
در آزمون عملی معمولاً ازت میپرسن هر بخش چه کاری انجام میده. این خلاصه رو حفظ کن:
اتصال به دیتابیس
دستور sqlite3.connect('a1.db') یک فایل دیتابیس
به نام a1.db میسازه. جدول telbook با ۳ ستون
(id, nam, mobile) ساخته میشه.
تابع add() — افزودن مخاطب
مقدار فیلدهای نام و شماره رو میگیره، با دستور
INSERT در دیتابیس ذخیره میکنه، و پس از پاک کردن
فیلدها، لیست رو دوباره نمایش میده.
تابع show() — نمایش لیست
با دستور SELECT * FROM telbook همه مخاطبین رو
از دیتابیس میخونه و داخل Listbox نمایش میده.
تابع onselect() — انتخاب مخاطب
وقتی روی یک ردیف از لیست کلیک میکنی، اطلاعاتش رو از لیست میخونه، در فیلدهای ورودی میریزه و id رو در متغیر global ذخیره میکنه.
تابع hazf() — حذف مخاطب
اول با messagebox تأیید میگیره، بعد با دستور
DELETE رکورد رو از دیتابیس پاک میکنه.
تابع edit() — ویرایش مخاطب
مقادیر جدید رو از فیلدها میگیره و با دستور
UPDATE رکورد رو بر اساس id آپدیت میکنه.
تابع search() — جستجوی LIKE
متن جستجو رو میگیره و با الگوی %text% روی
ستونهای nam و mobile جستجو میکنه. اگر پیدا نشد پیام
«موردی یافت نشد» رو نشون میده.
? استفاده میکنیم؟» — پاسخ: برای جلوگیری از
SQL Injection (تزریق SQL). این روش
Parameterized Query نام داره و امنیت برنامه
رو بالا میبره.
نحوه اجرای پروژه در ۴ قدم ساده
پایتون را نصب کن
از سایت python.org آخرین نسخه پایتون ۳ رو دانلود و نصب کن. حین نصب گزینه Add Python to PATH رو حتماً تیک بزن.
فایل را ذخیره کن
کد بالا رو کپی کن، توی یک فایل به نام
telbook.py ذخیره کن. دقت کن پسوند فایل
.py باشه، نه .py.txt.
اجرا در ترمینال
ترمینال (یا CMD) رو باز کن، به مسیر فایل برو و دستور
python telbook.py رو بزن. برنامه اجرا میشه.
شروع استفاده
نام و شماره مخاطب رو وارد کن، دکمه افزودن رو بزن. مخاطبین در دیتابیس ذخیره میشن و دفعه بعد هم قابل مشاهدهان.
مزایای یادگیری پایتون در آموزشگاه کامپیوتر راهکار تبریز
اگر میخواهی پایتون را اصولی، پروژهمحور و با مدرک معتبر یاد بگیری، آموزشگاه راهکار بهترین انتخاب در تبریز است:
آمادهای پایتون رو حرفهای یاد بگیری؟
این مقاله فقط یک پروژه بود. برای تبدیل شدن به یک برنامهنویس پایتون حرفهای و قبولی در آزمون فنی و حرفهای، باید مسیر اصولی رو طی کنی. دوره پایتون آموزشگاه راهکار تبریز دقیقاً همون مسیریه که لازم داری.
سوالات متداول درباره پروژه دفترچه تلفن و پایتون
آیا برای ساخت دفترچه تلفن باید برنامهنویسی بلد باشم؟
برای شروع، آشنایی مقدماتی با پایتون کافیه. در این مقاله کد کامل و کامنتگذاری شده رو در اختیارت گذاشتیم، پس حتی اگه تازهکار هم باشی میتونی اجراش کنی و یاد بگیری.
تفاوت پروژه دفترچه تلفن با To Do List چیه؟
پروژه دفترچه تلفن شامل جستجوی LIKE و ویرایش رکورد است که در To Do List معمولاً سادهتره. به همین دلیل دفترچه تلفن یک قدم بالاتر از To Do List محسوب میشه.
آیا این پروژه برای نمونه سوال عملی فنی و حرفهای مناسبه؟
بله، دقیقاً. ترکیب Tkinter و SQLite همراه با جستجو یکی از رایجترین ساختارهای آزمون عملی پایتون در سازمان فنی و حرفهای است.
جستجوی LIKE چطور کار میکنه؟
در جستجوی LIKE از علامت % استفاده میکنیم که یعنی «هر چیزی». مثلاً الگوی %علی% هر مخاطبی رو پیدا میکنه که کلمه «علی» جایی در نام یا شمارهاش داشته باشه.
چرا از علامت ? در دستورات SQL استفاده میکنیم؟
برای جلوگیری از SQL Injection. این روش Parameterized Query نام داره و امنیت برنامه رو بالا میبره. مقادیر بهصورت جداگانه به تابع execute پاس داده میشن.
آیا میتونم این پروژه رو توی گیتهاب بذارم؟
قطعاً! این کار به شدت توصیه میشه. کارفرماها نمونهکارهای عملی رو خیلی جدی میگیرن.
دوره پایتون آموزشگاه راهکار چقدر طول میکشه؟
طول دوره بستگی به سطح و اهداف شما داره. برای اطلاع دقیق، با شماره 041-35574231 تماس بگیرید تا مشاوره رایگان دریافت کنید.
آیا در تبریز برای پایتون کار هست؟
بله. شرکتهای نرمافزاری، استارتاپها و آموزشگاههای متعددی در تبریز به دنبال برنامهنویس پایتون هستن.
برای ثبتنام در دوره پایتون با چه شمارهای تماس بگیرم؟
برای مشاوره رایگان و ثبتنام، با شماره 041-35574231 تماس بگیرید.
پروژه ساختی — حالا وقت یادگیری حرفهایه!
در دوره جامع پایتون آموزشگاه راهکار تبریز ثبتنام کن، از صفر تا پروژههای حرفهای پیش برو، مدرک فنی و حرفهای دریافت کن و وارد بازار کار پرتقاضای برنامهنویسی شو.