معرفی Tkinter

Tkinter یک کتابخانه استاندارد در پایتون است که برای ایجاد رابط کاربری گرافیکی (GUI) برای برنامه های دسک تاپ استفاده می شود. با کمک Tkinter توسعه برنامه های دسک تاپ کار سختی نیست.

جعبه ابزار اصلی GUI که ما استفاده خواهیم کرد Tk است که کتابخانه GUI پیش فرض Python است. ما برای دسترسی به Tk از رابط پایتون آن به به نام Tkinter استفاده می کنیم.

در میان چارچوب های گرافیکی گوناگون ، Tkinter تنها چارچوبی است که در کتابخانه استاندارد پایتون تعبیه شده است.

یک ویژگی مهم Tkinter کراس پلت فرم بودن آن است ، یعنی همین کد به راحتی می تواند در ویندوز ، macOS و لینوکس کار کند.

Tkinter یک ماژول سبک  و استفاده از آن خیلی ساده است.

برای ایجاد رابط گرافیکی به کمک Tkinter  ، از بلوک هایی موسوم به ویجت برای ایجاد انواع برنامه های دسکتاپ استفاده خواهیم کرد. ویجت هایی مثل دکمه، لیبل، قاب و … که به تدریج باهاشون اشنا میشیم.

کنار هم چیدن این ویجت ها رو هم از سه طریق می تونیم انجام بدیم:


روش جانمایی ()pack

این روش به منظور قرار دادن ابزارک ها (ویجت ها) در یک قاب یا پنجره به ترتیب مشخص از یک الگوریتم بسته بندی استفاده می کند.

این روش عمدتا برای سازماندهی ابزارک ها در یک بلوک استفاده می شود و ممکن است ظاهر رابط گرافیکی چندان دلخواه شما نباشد. اما به تست کردن برنامه شما سرعت زیادی می دهد.

روش جانمایی ()Grid

از این روش  به طور عمده برای تقسیم پنجره یا قاب به تعدادی سطر و ستون استفاده می شود.

فقط با فراخوانی تابع  و دادن اندیس های سطر و ستون ، می توانید به راحتی مکان ویجت را مشخص کنید.

اندیس هر دو ردیف و ستون از 0 شروع می شود ، بنابراین یک شاخص ردیف 2 و یک شاخص ستون 2 به تابع grid می گوید که یک ویجت را در ستون سوم ردیف سوم قرار دهد (0 اول است ، 1 دوم است و 2 یعنی سوم).

روش جانمایی ()Place

این روش  ابزارک ها (ویجت ها) را طوری سازماندهی می کند تا آنها را در موقعیت خاصی مطابق دستورالعمل قرار دهد.

این روش اساساً ویجت را مطابق با مختصات x و y بر حسب پیکسل سازمان می دهد.

مبدأ (جایی که x و y هر دو 0 هستند) گوشه بالا سمت چپ قاب یا پنجره است.

بنابراین ، آرگومان y تعداد پیکسل های فضا را از بالای پنجره برای قرار دادن ابزارک مشخص می کند و آرگومان x تعداد پیکسل ها از سمت چپ پنجره را مشخص می کند.

حالا قصد داریم اولین برنامه رو با استفاده از tkinter بنویسیم. این یک برنامه بسیار ساده هست که صرفا یک پنجره رو باز می کنه که عنوان پنجره هست:

Hello Karakit!

برای این کار برنامه زیر را در ویرایشگر می نویسیم و اجرا  می کنیم:

import tkinter 
from  tkinter import ttk
root=tkinter.Tk()
root.title("Hello Karakit!")
root.mainloop()

بعد از اجرای برنامه در صورتی که خطایی رخ نداده باشد پنجره زیر دیده می شود:

اگر گوشه پنجره را با ماوس بکشید و ابعاد آن را بزرگ کنید عنوان پنجره به صورت کامل نمایش داده خواهد شد:

توضیح برنامه:

در خط 1 ماژول tkinter را فراخوانی کرده ایم و در خط 2 با فراخوانی ttk ویجت های با تم جدیدتر نسبت به ویجت های tk در دسترس قرار بگیرند. در صورتی که این خط را ننویسیم یعنی قصد نداریم از ویجت های ttk استفاده کنیم و ویجت های خود tkinter مورد استفاده قرار خواهند گرفت.

در خط 3 پنجره اصلی را ایجاد کردیم و اسم ان را root گذاشتیم. در خط 4 ویژگی title را برابر عبارت Hello World! قرار می دهیم.

در خط 5  با فراخوانی mainloop کار رابط گرافیکی شروع می شود ، Tkinter python به طور خودکار یک حلقه نامحدود به نام حلقه رویداد را شروع می کند.

همانطور که از نام آن مشخص است ، این حلقه برای همیشه ادامه دارد مگر اینکه که کاربر از پنجره خارج شود یا منتظر هرگونه اتفاق از طرف کاربر باشد. mainloop به طور خودکار رویدادها را از سیستم پنجره دریافت کرده و به ابزارک های برنامه تحویل می دهد. وقتی روی دکمه بستن پنجره کلیک می کنیم ، این حالت تمام می شود. بنابراین ، هر کد پس از این متد mainloop اجرا نمی شود.

حالا بیایید کمی بیشتر با جزییات این پنجره بازی کنیم. مثلا می خواهیم اندازه اولیه پنجره را 300 در 200 پیکسل تعیین می کنیم. برای این کار بعد از خط شماره 4 یک خط جدید اضافه می کنیم و برنامه به شکل زیر خواهد بود:

import tkinter 
from  tkinter import ttk
root=tkinter.Tk()
root.title("Hello Karakit!")
root.geometry("300x200")
root.mainloop()

بعد از اجرای برنامه می بینیم که این بار پنجره با این ابعاد باز می شود:

کار دیگری که می توانیم بکنیم این است که اجازه ندهیم اندازه پنجره از حد دلخواه ما کمتر شود. یعنی کاربر نتواند پنجره را مثلا از اندازه 200 در 150 پیکسل کوچکتر کند. برای این کار از minsize استفاده می کنیم و برنامه به شکل زیر باید بازنویسی بشود:

import tkinter 
from  tkinter import ttk
root=tkinter.Tk()
root.title("Hello Karakit!")
root.geometry("300x200")
root.minsize(width=200, height=150)
root.mainloop()

بعد از اجرای برنامه خواهید دید که ابتدا پنجره با ابعاد 300 در 200 باز می شود. وقتی با ماوس اقدام به کوچک کردن پنجره بکنید ابعادش از 200 در 150 کمتر نخواهد شد.

در پایان این قسمت می خواهیم کاری کنیم که کاربر نتواند ابعاد پنجره را تغییر دهد. برای این کار باید ویژگی resizable را تنظیم کنیم که به صورت پیش فرض برای هر دو جهت افقی و عمودی True هست. برنامه رو به صورت زیر بازنویسی می کنیم:

import tkinter 
from  tkinter import ttk
root=tkinter.Tk()
root.title("Hello Karakit!")
root.resizable(False,False)
root.mainloop()

با اجرای برنامه می بینیم که ابعاد پنجره با ماوس قابل تغییر نیست.

همچنین آیکون مربوط به maximize غیرفعال شده است.

در قسمت های بعد ویجت های مختلف را معرفی می کنیم و سعی خواهیم کرد با چگونگی ایجاد رابط کاربری در پایتون به کمک tkinter آشنا شویم.