در کدهای پیشین، نشان دادیم هر کلاس ویجت مانند Label, Button, Entry و Text دارای یک متد به نام ()pack است که این متد باید فراخوانی شود، زیر می خواهیم آن ویجت را به ویجت ریشه، مانند پنجره اصلی برنامه بچسبانیم که از کلاس Tk ساخته می شود. همچنین نشان دادیم که متد ()pack یک پارامتر به نام side دارد که یکی از مقدارهای از پیش آماده TOP (بالا)، RIGHT (راست)، BOTTOM (پایین) و LEFT (چپ) را دریافت می کند و جایی که ویجت در آن چسبانده می شود را نشان می دهند. اگر چندین ویجت داشته باشیم و پارامتر side هیچ یک را مقدار دهی نکرده باشیم، پس ویجت ها به ترتیب فراخوانی ()pack از بالا به پایین چیده می شوند.

چیدمان ویجت ها در ساختاری جدول گونه

Grid (گرید) در برنامه نویسی GUI به ساختاری جدول گونه اشاره دارد که ویجت ها در آنها چیده می شوند. زمانی که می گوییم ساختار جدول گونه، پس دارای شماری سطر و ستون هستیم که این ها دارای شماره ای هستند که از صفر آغاز می شود. بنابراین نخستین سطر دارای اندیس صفر و نخستین ستون دارای اندیس صفر است. دومین سطر دارای اندیس یک و سومین ستون دارای اندیس دو است.

متد ()grid در ویجت های Tkinter

کد زیر و در دو حلقه for تو در تو، مفهوم ساختار گرید را نشان می دهد. برای آنکه ویجت به یک سلول از گرید داده شود، باید متد ()grid را فراخوانی کنید که این متد در پارامتر یکم، شماره سطر و در آرگومان دوم، شماره ستون را دریافت می کند. سلول یا خانه ای در ساختار گرید، دارای دو شماره row و col است . برای نمونه خانه یا سلول سطر یکم و ستون صفر یا سطر یکم و ستون دوم. در کد زیر حلقه بیرونی ۳ گام و حلقه درونی ۴ گام انجام می شوند. حلقه بیرونی همان شمار سطرها است و حلقه درونی همان شمار ستون ها است، پس سه سطر و چهار ستون داریم. شماره سطر و ستون آغازین برابر با صفر است.

ساخت جدول ضرب شماره های ۱ تا ۱۰ در Tkinter

کد زیر همانند بالایی است ولی بازه هر دو حلقه آن از شماره ۱ تا پیش از ۱۱ (یا شماره ۱۰) است و همچنین در رشته آماده شده برای پارامتر text در تابع سازنده Label در هر گام حلقه ها، شماره های کنونی که در r (سطر) و c (ستون) هستند در یکدیگر ضرب شده و سپس در Label نشان داده می شوند. توجه کنید که در اینجا سطر و ستون آغازین دارای شماره یک هستند.

بنابراین کلاس هر کدام از ویجت های Tkinter دارای متد ()grid است که پارامتر یکم آن شماره سطر و پارامتر دوم شماره ستون است که روی هم رفته یک خانه از گرید را نشان می دهند. در کد زیر می بینید که در متد ()grid برچسب های label1 و label2 شماره ستون را نیاورده ایم و از این رو شماره ستون برابر با صفر خواهد بود. همچنین entry ها در ستون های یک و دو و در ستون شماره یک درج شده اند. توجه کنید می توانید متد ()grid را پیوسته و پس از تابه سازنده ویجت مانند Label و Button و Entry بیاورید و یا اینکه می توانید آن را پس ازساخت ویجت و به کمک متغیر ساخته شده از تابع سازنده (همانند entry1 و entry2) فراخوانی کنید.

در کد زیر که دیگر بخش های ساخت ویجت های آن را نخواهیم گفت، تابعی به نام ()login نوشته شده است که کار آن بررسی دو ورودی entry1 و entry2 است که برابر با نام کاربری و گذرواژه هستند. نخست به کمک متد ()get از کلاس Entry رشته ورودی از entry1 و entry2 در دو متغیر username و password ریخته می شوند. سپس بررسی می شود که آیا اندازه رشته های ورودی برابر صفر نباشند که اگر هر یک از آنها اندازه صفر داشته باشد، پس ورودی نداشته است، پس پیغام ()messagebox.showwarning بند (خط) ۱۹ نشان داده می شود. اگر برای هر دو رشته ای وارد شده باشد، پس باید بررسی شود که آیا رشته entry1 که در متغیر username است، آیا در فهرست کلیدهای دیکشنری users هست یا نه؟ اگر باشد، پس باید بررسی شود که ایا مقدار کلید که همان گذرواژه کاربر است آیا با مقدار وارد و نگهداری شده در متغیر password یکی هست یا نه؟ اگر یکی از دو با نام کلید یا مقدار کلید یکسان نباشد، پس پیغام بند ۱۷ نشان داده می شود وگرنه پیغام ورود درست خط ۱۵ نشان داده می شود.

در دیکشنری users، نام کلید، برابر با نام کاربری و مقدار کلید، برابر با گذرواژه است. همچنین متد ()keys از دیکشنری ها یک لیست از نام کلیدها که در اینجا نام کاربری است را بر می گرداند، بنابراین در بند ۱۴ و به کمک عملگر in بررسی کرده ایم که آیا رشته درون متغیر username در لیست کلیدهای دیکشنری هست یا نه؟ واپسین چیزی که باید بگوییم، پارامتر show در ویجت entry2 در بند ۲۹ است که مقدار * را به آن داده ایم که این برای آن است که می خواهیم این Entry برای دریافت گذرواژه باشد.