کد کامل برای اجرای محلی در فایل mini_gui.py؛ پنجرهٔ Tkinter در مرورگر این دوره باز نمیشه. اول با py -m tkinter وجود Tk رو بررسی کن؛ این فرمان باید پنجرهٔ آزمایشی نشون بده. اگه خطای نصب دیدی، نصب پایتون و بخش Tcl/Tk سیستم خودت رو بررسی کن؛ pip install tkinter راه عمومی نصب Tk نیست.
در برنامهٔ گرافیکی یک حلقهٔ رویداد یا event loop منتظر کلیک و ورود متن میمونه. mainloop() اون رو شروع میکنه. در command=add_task خود تابع رو میدیم، نه نتیجهٔ add_task(). بعداً با کلیک دکمه، تابع callback اجرا میشه.
import tkinter as tk
from tkinter import messagebox
def clean_title(text):
title = text.strip()
if not title:
raise ValueError("عنوان را وارد کن")
return title
def add_task():
try:
title = clean_title(entry.get())
except ValueError as error:
messagebox.showinfo("عنوان لازم است", str(error))
return
items.insert(tk.END, title)
entry.delete(0, tk.END)
root = tk.Tk()
root.title("کارهای من")
entry = tk.Entry(root, width=35)
entry.pack(padx=12, pady=8)
tk.Button(root, text="افزودن", command=add_task).pack()
items = tk.Listbox(root, width=45)
items.pack(padx=12, pady=8)
root.mainloop()
آزمایش دستی: عنوان فارسی اضافه کن، عنوان فقطفاصله رو امتحان کن و دو عنوان پشت سر هم وارد کن. این نمونه در این مرحله ذخیرهٔ دائمی نداره. تابع clean_title منطق مستقل هست و میشه اون رو در مرورگر هم بررسی کرد؛ اجزای پنجره، مثل دکمه و کادر متن، روی کامپیوتر اجرا میشن. به این اجزا ویجت میگن. callback طولانی، مثل انتظار شبکه، پنجره رو متوقف میکنه. برای کار پسزمینه، ویجتها رو مستقیم از ترد کارگر تغییر نده؛ در مسیر پیشرفته از صف و root.after برای بازگشت نتیجه به ترد رابط استفاده میکنیم.
فعالیت شما
با Tkinter یک پنجره بساز که کادر متن، دکمه و لیست داشته باشه و به کلیک جواب بده.