Tkinter تنها یکی از چندین ابزار  فریم ورک های ساخت برنامه های گرافیکی (GUI) است که در پایتون می توانیم به کار ببریم. tkinter از پیش و همراه خود پایتون هست و نیازی نداریم که آن را دستی نصب کنیم. Tkinter بسیار ساده و بر پایه شی گرایی است و بسیاری از ویجت های (Widget) گرافیکی مانند Label, Button و دیگر را پشتیبانی می کند.

ساخت پنجره در tkinter

در این نوشته ها از پایتون ۳ کمک می گیریم که در آن ماژول، tkinter نام دارد. در کد زیر این ماژول پیوست شده و نام مستعار tk به آن داده ایم.سپس به کمک این نام متغیری به نام main_window از کلاس Tk ساخته ایم. سپس به کمک متد ()title از کلاس Tk یک عنوان برای پنجره را نشان داده ایم. سپس و در پایان کد (واپسین بند از کد) متد ()mainloop از کلاس Tk را فراخوانی کرده ایم.

حلقه اصلی برنامه های Tkinter

زمانی که یک متغیر از کلاس Tk بسازیم و سپس با نان متغیر، متد ()mainloop را فراخوانی کردیم، در واقه وارد حلقه اصلی یا حلقه رویداد (Event Loop) برنامه Tkinter شده ایم. حلقه رویداد هماره به درخواست های ورودی برنامه گوش می دهد و هر درخواست ورودی را به یک پاسخ دهنده می فرستد. برای فهم بهتر، گمان کنید Event Loop همانند یک کارمند در ورودی یک سازمان است که هر کارفرما وارد می شود، از آن پرسشی می کند که پیش کدام کارمند برود تا کارش را انجام دهد. در اینجا، کارمند ورودی سازمان همان Event Loop است و کارفرما یک درخواست ورودی و کارمندی که باید پاسخ گو درخواست باشد یک واکنش (Action) است.

برنامه نویسی GUI به شیوه رویدا گرا است به گونه ای که با بروز یک رویدا، باید واکنشی انجام شود. به یاد داشته باشید که Event Loop هماره انجام می شود تا زمانی که شما برنامه را ببنید. ساده ترین روش برای بستن برنامه، بستن پنجره اصلی برنامه است که روی دگمه Close پنجره (دگمه قرمز رنگ در شکل زیر یا دگمه X در ویندوز) کلیک کنید. ولی روش دیگری نیز هست که آن فراخوانی متدی به نام ()destroy است که آن را خواهیم گفت.

تعیین اندازه یک پنجره در Tkinter

نخستین گام در ساخت برنامه های GUI در tkinter، ساخت یک پنجره با کلاس Tk است. متغیرهای این کلاس به متدهای آن مانند ()title برای شناساندن عنوان پنجره و متد ()mainloop برای راه اندازه حلقه رویداد برنامه دسترسی دارند. متد دیگری که از متغیرهای Tk می توانیم دسترسی داشته باشیم ()geometry نام دارد که یک رشته را دریافت می کند. WxH+X+Y الگوی این رشته را نشان می دهد که در آن W و H به ترتیب به شماره پهنا (Width) و دراز (ارتفاع – Height) اشاره دارند. برای نمونه ساخت یک پنجره 500x300 باید همانند زیر انجام دهیم. 

متد ()configure برای پیکربندی ویجت های Tkinter

هر یک از نمونه های کلاس های ویجت Tkinter مانند کلاس Tk و کلاس های Label و Button دارای یک متد به نام ()config و ()configure هستند که یک سری از پیکربندی ها، مانند رنگ پس زمینه (Background Color)، اندازه های پهنا و درازا و دیگر را تعیین می کنند. برای نمونه در کد زیر می خواهیم اندازه پهنا (Width)، درازا (Height) و رنگ پس زمینه پنجره را مشخص کنیم. پارامتر background که می تواند bg نیز نوشته شود، رنگ پس زمینه پنجره را نشان می دهد. می توانیم رشته هایی مانند red, blue, green, yellow و دیگری را برای این پارامتر بفرستیم و اینکه می توانیم رشته های شماره های شش تایی هگزا دسیمال همانند 7e7e7e# را برای پارامتر تعیین کنیم.

بنابراین دو شیوه برای تعیین اندازه پهنا و درازا پنجره در Tkinter هست، شیوه یکم به کار بردن متد ()geometry که در آن یک رشته به الگو WxH می فرستیم و یا در شیوه دوم، می توانیم متدهای width و height را در یکی از دو متد ()configure یا ()config مقدار دهی کنیم. کد زیر همانند بالایی است ولی در آن متد ()config به جای ()configure به کار رفته است. همچنین به جای نام پارامتر background از bg کمک گرفته شده است.

نمایش پنجره در نقطه ویژه ای از نمایشگر – میانه نمایشگر

با کمک Tkinter می توانیم پهنا و درازا نمایشگر را بدست آوریم. برای این، نخست باید یک نمونه از کلاس Tk (در کد زیر به نام main_window) بسازیم و پس پهنا را به کمک متد ()winfo_screenwidth و درازا را به کمک متد ()winfo_screenheight بدست آوریم. در کدهای زیر دو متغیر width_of_window و height_width_window اندازه های پنجره و دو متغیر screen_width و screen_height اندازه های نمایشگر را در خود دارند. سپس دو متغیر x_coordinate و y_coordinate می سازیم که مقدار تفریق نیمی از screen_width و بر نیمی از width_of_window و به همین گونه برای screen_height و height_of_window را در خود نگه می دارند.

WxH+X+Y الگویی که شیوه یک رشته به متد ()geometry می فرستیم که در آن X و Y مختصات نقطه ای است که می خواهیم پنجره در آنجا نمایش داده شود. در کد بالا این دو مقدار همان x_coordinate و y_coordinate هستند ولی شما می توانید همانند الگوی زیر، آنها را دستی مشخص کنید. در الگوی زیر چون هر دو X و Y برابر با صفر هستند، پس پنجره با پهنا و درازا ۵۰۰ و ۳۰۰ در گوشه سوی چپ بالا نشان داده می شوند.

متد ()resizeable برای پیکربندی تغییر اندازه پنجره

می توانیم به کمک متد ()resizeable مشخص کنیم که آیا پنجره ای می تواند تغییر اندازه داشته باشد یا نه؟ این متد دو پارامتر به نام width و height را دریافت می کند که اگر به هر دو پارامتر و همانند کد زیر مقدار Flase بدهیم، پس دیگر نمی توان پنجره را تغییر اندازه داد. توجه کنید ()geometry اندازه پایه پنجره را نشان می دهد. زمانی که هر دو پارامتر برابر با Flase باشند، پس دگمه بیشینه (Maximize) در پنجره غیر فعال می شود.

همچنین شیوه دیگری نیز برای غیر فعال کردن اندازه پنجره هست و آن، فرستادن دو شماره صفر به متد ()resizeable است. ولی می توانیم تغییر اندازه را در یکی از دو سوی پهنا یا دراز غیر فعال کنیم. برای نمونه اگر مقدار width برابر با False باشد، پس از پهنا و اگر height برابر False باشد از درازا نمی توانیم تغییر اندازه دهیم.