GUI در پایتون چیست؟ – نحوه ساخت رابط کاربری گرافیکی + بهترین کتابخانه ها
منظور از GUI در پایتون، فناوری ابزارهای این زبان برنامه نویسی برای ساخت اپلیکیشنهای دستکاپ با رابط کاربری گرافیکی هستند. واژه GUI مخفف عبارت «Graphical User Interface» به معنای «رابط کاربری گرافیکی» است. منظور از رابط کاربری گرافیکی، همان پنجرههایی است که کاربران با کمک ماوس با آنها کار میکنند. البته در نسخههای مدرن، امکان کلیک کردن با انگشت بر روی صفحات لمسی نیز فراهم شده است. پایتون برای تولید چنین اپلیکیشنهایی از کتابخانهها و فریمورکهای مختلف استفاده میکند. به عنوان مثال میتوان به فریمورک Kivy برای ساخت اپلیکیشنهای مناسب دستگاههای لمسی یا فریمورک PyQt برای ساخت اپلیکیشنهایی با ظاهر مدرن اشاره کرد.
- در این مطلب با مفهوم GUI آشنا شده و روش ساخت آن را در پایتون یاد میگیرید.
- با مهمترین مزایای وجود رابط کاربری گرافیکی در برنامهها آشنا میشوید.
- با ۵ مورد از ابزارهای طراحی و ساخت رابط کاربری گرافیکی در پایتون آشنا میشوید.
- ویجتهای مهم کتابخانه Tkinter را شناخته و روش استفاده از هر کدام را با مثال یاد میگیرید.
- میفهمید برای ساخت رابط کاربری گرافیکی در صفحه لمسی با کدام ابزار کار کنید.
- با سه تابع مهم برای تنظیم ساختار هندسی ویجتها در Tkinter آشنا میشوید.


در این مطلب از مجله فرادرس با GUI در پایتون آشنا میشویم. ابتدا مفهوم این تکنولوژی را توضیح دادهایم. سپس رایجترین کتابخانه پایتون برای ساخت رابط کاربری گرافیکی یعنی Tkinter را بررسی میکنیم. مهمترین ویجتهای Tkinter را یک به یک معرفی کرده و همراه آنها مثالهایی ارائه میدهیم. در آخر هم چند کتابخانه پرکاربرد پایتون در حوزه GUI را معرفی میکنیم.
GUI در پایتون چیست؟
منظور از GUI در پایتون، مجموعه کتابخانهها و فریمورکهایی است که برای ساخت رابط کاربری گرافیکی به کار برده میشوند. کاربران با کمک رابط کاربری گرافیکی یا «GUI» به صورت تصویری و با ابزارهایی مثل دکمهها، چکباکسها، فهرستهای کشویی و نوارهای لغزنده با برنامه ارتباط برقرار میکنند. با وجود GUI، کاربران میتوانند ویژگیها و بخشهای مختلف برنامه را خیلی راحتتر استفاده کنند. برنامهنویسان پایتون نیز با استفاده از فریمورکهای GUI میتوانند اپلیکیشنهایی طراحی کنند که کاربری سریع، ظاهر مناسب، تعامل راحت و امکانات مختلف برای کاربران فراهم کنند.
برای ساخت رابط کاربری گرافیکی در پایتون، فریمورکها و ابزارهای متنوعی وجود دارند. در بخش انتهایی مطلب، مهمترین آنها را بررسی کرده و نقاط مثبت و منفی هر کدام را نوشتهایم. با هدف ورود به دنیای طراحی رابط گرافیکی بهتر است کار خود را با کتابخانه Tkinter به عنوان اولین گزینه شروع کنیم. در بخش بعد، مزایای استفاده از این ابزار را بررسی کرده و در ادامه مهمترین المانهای آن را برای ساخت GUI معرفی میکنیم.

چرا به Tkinter نیاز داریم؟
Tkinter یکی از کتابخانههای مناسب برای تازهکارها در پایتون است. این کتابخانه به صورت تخصصی با هدف ساخت GUI در پایتون، طراحی شده است. Tkinter مانند برنامه واسط و سبکوزن برای مجموعه ابزارهای گرافیکی « Tcl/Tk» عمل میکند. این کتابخانه، روشی بسیار ساده و قابلفهم برای ساخت اپلیکیشنهای دسکتاپ در اختیار برنامه نویسان پایتون میگذارد.
تا به اینجای مطلب با مفهوم GUI در پایتون و یکی از دردسترسترین کتابخانههای آن یعنی Tkinter آشنا شدهاید. در ادامه هم با ویجتهای مهم کتابخانه Tkinter برای ساخت GUI آشنا میشوید. در صورت علاقه به این دست از مطالب پیشنهاد میکنیم حتما از اپلیکیشن مجله فرادرس استفاده بکنید.
برای نصب اپلیکیشن رایگان مجله فرادرس، کلیک کنید.
Tkinter از مفاهیمی مانند مدیریت لایهها، مدیریت رویداد و سفارشیسازی پشتیبانی میکند. وجود این امکانات باعث شده است کتابخانه Tkinter به ابزار بسیار مناسبی برای توسعه سریع GUI در پایتون تبدیل شود.
دلایل اصلی استفاده از کتابخانه Tkinter را در فهرست پایین، نوشتهایم.
- ابزاری درونی و بسیار ساده برای ساخت اپلیکیشنهای دارای GUI در پایتون است.
- برای ساخت اپلیکیشنهای جذاب، ویجتهای بسیار متنوعی مانند دکمه، برچسب، کادر متن و منو دارد.
- Tkinter با همراه با پایتون بر روی سیستم نصب میشود. زیرا جزئی از کتابخانه استاندارد این زبان است. بنابراین دیگر نیازی به استفاده از فریمورکهای خارجی برای ساخت GUI نداریم.
- برای طراحی اپلیکیشنهای ساده دسکتاپ، گزینه بسیار خوبی است. برای مثال میتوان به ماشین حساب، فرمهای کوچک یا حتی داشبوردهای ساده اشاره کرد.
- این کتابخانه از تکنیک برنامه نویسی «رویدادمحور» (Event-Driven) پشتیبانی میکند. در نتیجه گزینه مناسبی برای ساخت رابطهای کاربری «واکنشگرا» (Responsive) است.

ساخت اپلیکیشن با Tkinter در پایتون
برای ساخت اپلیکیشنهای Tkinter در پایتون باید کارهای مهم زیر را انجام بدهیم.
- ایمپورت کردن ماژول Tkinter: قبل از استفاده از هر کتابخانهای باید آن را به محیط کدنویسی پایتون ایمپورت کنیم. برای ساخت GUI در پایتون با کمک Tkinter هم باید ابتدا آن را به محیط کدنویسی اضافه بکنیم. به منظور انجام این کار، کد import tkinter را در بالای صفحه مینویسیم.
- ساخت پنجره اصلی: به این پنجره، ظرف یا «Container» گفته میشود. برای تعریف کردن پنجره اصلی از کلاس Tk() استفاده میکنیم.
- پیکربندی تنظیمات پنجره: میتوانیم مشخصاتی مانند تیتر پنجره و اندازه آن را در همان ابتدا تعیین کنیم.
- اضافه کردن ویجتها به پنجره اصلی: ویجتهای بسیار متنوعی مانند دکمهها، برچسبها، فیلدهای ورود اطلاعات و غیره وجود دارند که میتوانیم به پنجره اصلی اضافه کنیم. با کمک این ویجتها رابط کابری خود را طراحی میکنیم.
- دستهبندی ویجتها: از ابزارهای مخصوص مدیریت ویجت مانند pack() و grid() و place() برای تنظیم و اصلاح چیدمان آنها بر روی پنجره اصلی استفاده میکنیم.
- استفاده از محرکهای رویداد به ویجتها: میتوانیم «محرکهای رویداد» (Event Triggers) را به ویجتها متصل کرده و نحوه واکنش آنها به رفتارهای کاربر را تعریف کنیم.

در صورت علاقه به یادگیری حرفهایتر کتابخانه Tkinter پیشنهاد میکنیم که فیلم آموزش طراحی رابط کاربری گرافیکی GUI با کتابخانه Tkinter در پایتون + گواهینامه را در فرادرس مشاهده کنید. لینک آموزش این فیلم را در پایین نیز قرار دادهایم.
در زمان ساخت «رابط کاربری گرافیکی» (Graphical User Interface | GUI) با پایتون، دو متد اصلی وجود دارند. کاربر باید این موارد را همیشه به خاطر بسپارد.
- متد Tk()
- متد mainloop()

در ادامه هر دو متد را معرفی کردهایم.
کلاس Tk
برای ساخت پنجره اصلی در Tkinter از کلاس Tk() استفاده میکنیم. در کادر پایین. سینتکس استفاده از این کلاس نوشته شده است.
همین طور که در سینتکس بالا دیده میشود، در زمان تعریف کلاس Tk() میتوانیم چهار پارامتر مختلف را تعریف کنیم.
- screenName: استفاده از این پارامتر اختیاری است. در این پارامتر، نمایشگر را مشخص میکنیم. پارامتر screenName بیشتر در سیستمهای یونیکس به کار برده میشود. گاهی اوقات این نوع از سیستمها از چندین نمایشگر مختلف استفاده میکنند.
- baseName: استفاده از این پارامتر اختیاری است. با کمک این پارامتر نام اصلی اپلیکیشن را تعریف میکنیم. در حالت پیشفرض، نام اسکریپت به عنوان نام اصلی اپلیکیشن تنظیم میشود.
- className: استفاده از این پارامتر هم اختیاری است. با کمک آن میتوانیم نام مورد نظر خود را به کلاس پنجره اصلی، اختصاص بدهیم. از این نام بعدها در طراحی و پیکربندی تنظیمات مربوط به مدیر پنجره استفاده میکنیم.
- useTk: این پارامتر از نوع بولین و اختیاری است. پارامتر useTK اعلام میکند که آیا پایتون باید سیستم پنجرههای tkinter را راهاندازی کند یا نه. مقدار اولیه این پارامتر همیشه برابر با 1 است.
متد mainloop
بعد از آماده شدن اپلیکیشن، از متد mainloop() برای اجرای آن استفاده میکنیم. در واقع این متد مانند حلقه بینهایت عمل میکند.
- mainloop() اپلیکیشن را اجرا کرده و به صورت فعال نگه میدارد.
- در زمان کار منتظر میماند تا رویدادهای مختلف اتفاق بیافتند. برای مثال میتوان به کلیک کردن دکمههای ماوس اشاره کرد.
- سپس تا وقتی که پنجره اصلی بسته نشده تمام رویدادهای دریافت شده را پردازش میکند.
برای مثال در کد پایین با کمک کتابخانه tkinter پنجره سادهای ساختهایم. تابع tkinter.Tk() پنجره اصلی اپلیکیشن را تعریف میکند. متد mainloop() حلقه بینهایتی را برای اجرای دائم اپلیکیشن فعال میکند. این متد علاوه بر باز نگه داشتن پنجره، اپلیکیشن را نسبت به رفتارهای کاربر پاسخ گو و فعال نگه میدارد.
بعد از اجرای کد بالا پنجره زیر به عنوان خروجی تولید شده و نمایش داده میشود.

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

وبسایت آموزشی فرادرس، یکی از بزرگترین تولیدکنندگان محتوای آموزشی به زبان فارسی است. در این وبسایت تولیدات خوبی در حوزه آموزش Tkinter ارائه شدهاند. فیلمهای آموزشی فرادرس با کیفیت و دقت بالا تهیه میشوند. این فیلمها از سادهترین مفاهیم ممکن تا سطوح حرفهای را پوشش میدهند.
در فهرست پایین، چند مورد از فیلمهای آموزش Tkinter را معرفی کردهایم. در صورت نیاز به مشاهده گزینههای بیشتر با کلیک بر روی تصویر بالا میتوانید به صفحه اصلی این مجموعه آموزشی منتقل شوید.
- فیلم آموزش پروژه محور پایتون، کار با Tkinter و SQLite3 در Python + گواهینامه
- فیلم آموزش کتابخانه Tkinter برای ساخت بازی، همراه با طراحی مسابقه چالش تاریخی
- فیلم آموزش کتابخانه CustomTkinter در پایتون برای توسعه اپلیکیشن های دسکتاپ + گواهینامه
- فیلم آموزش طراحی رابط کاربری گرافیکی GUI با کتابخانه Tkinter در پایتون + گواهینامه
ویجتهای Tkinter
ویجتهای مختلفی وجود دارند که میتوانیم در اپلیکیشنهای ساخته شده با tkinter به کار ببریم. در این قسمت چند مورد از مهمترین ویجتهای این کتابخانه را معرفی کردهایم.

برچسب
برچسب «Label» به کادر مخصوصی گفته میشود که برای نمایش تصویر یا عکس به کار میبریم. برای تنظیم این کادر، گزینههای زیادی مانند فونت، تصویر «پسزمینه» (Background)، تصویر «جلوی زمینه» (Foreground) و غیره وجود دارند.
برای تعریف برچسب باید از سینتکس زیر استفاده کنیم.
در سینتکس بالا، پارامتر master با هدف مشخص کردن پنجره والد به کار برده میشود.
مثالی درباره ساخت برچسب
در کد پایین، پنجره گرافیکی سادهای با کمک Tkinter ساختهایم. در داخل این پنجره، برچسبی برای نمایش متن تعریف کردیم.
- در خط اول تمام کلاسهای tkinter را با کمک دستور ایمپورت به محیط کدنویسی وارد میکنیم.
- در خط بعدی پنجره اصلی را ساخته و نام این پنجره را root قرار میدهیم.
- سپس با کمک سینتکس معرفی شده در بخش قبل، برچسبی تعریف کردیم. مشاهده میکنید که برای این برچسب، root به عنوان پنجره والد تعریف شده است. با هدف نمایش متن در این برچسب عبارت «blog.faradars.org!» را در مقابل پارامتر text نوشتیم.
بعد از اجرای کد بالا، پنجره زیر تولید شده و ظاهر میشود. البته متن داخل برچسب را میتوانید با سلیقه خود و به صورت دلخواه تغییر بدهید

نکته: گزینهها و پارامترهای مختلف زیادی برای استفاده در ویجتها وجود دارند. در مثالهای نوشته شده در این مطلب فقط از بعضی از آنها استفاده میکنیم.
دکمه
منظور از دکمه همان عنصر قابل کلیکی است که در پنجرههای گرافیکی وجود دارد. کلیک کردن بر روی دکمهها میتواند به عنوان محرک برای انجام رفتار خاصی به کار برده شود. تقریبا تمام پنجرهها دارای دکمه هستند.
از سینتکس پایین برای تعریف کردن دکمه در پنجرههای tkinter استفاده میکنیم.
مثالی درباره ساخت دکمه بر روی پنجره
در این کد هم روش تعریف تیتر و دکمه برای پنجره را مشاهده میکنید. در ضمن یاد میگیرید که با کمک دستور مشخص پنجره را ببندید.
- در این مثال، تیتر پنجره، عبارت «Counting Seconds» است.
- بر روی این پنجره دکمهای با عنوان «Stop» قرار داده شده است. با کلیک بر روی این دکمه، پنجره بسته میشود.
بعد از اجرای کدهای بالا پنجره زیر تولید شده و نمایش داده میشود.

ویجت دریافت داده
به ویجت دریافت داده، ویجت «Entry» میگویند. این ویجت برای دریافت داده به صورت یک خطی به کار برده میشود. اگر بخواهیم که دادهها را در چند خط مختلف دریافت کنیم، باید از ویجت «Text» به معنای «متن» استفاده کنیم. توجه کنید که تمام دادههای ورودی در پایتون از نوع رشته هستند.
در کد پایین، سینتکس مربوط به ویجت دریافت داده یا Entry را نوشتهایم.
مثالی درباره ویجت دریافت داده
در کد زیر، فرمی با دو فیلد ورودی برچسبگذاری شده تعریف کردهایم. نام یکی از این فیلدها First Name و نام فیلد دیگر Last Name است. برای نمایش نام این فیلدها از ویجت برچسب استفاده کردیم. برای ساخت کادر مربوط به دریافت اطلاعات هم از ویجت Entry کمک گرفتیم.
در این کد با استفاده از متد grid() برچسبها و فیلدهای دریافت داده را به صورت جدولی مرتب کردیم. این متد جزو متدهای مخصوص تنظیم چیدمان است.
بعد از اجرای کدهای بالا پنجره زیر با برچسبها و فیلدهای دریافت داده ساخته شده و بر روی صفحه نمایش، ظاهر میشود.

دکمه چک
«دکمه چک» یا « چکباکس» را میتوانیم تیکدار کرده یا بدون تیک رها کنیم. این دکمهها معمولا در بخش تنظیمات به کار برده میشوند. دکمه چک را میتوان برای ذخیره حالت خاصی به متغیرها متصل کرد.
در کادر پایین، سینتکس تعریف چکباکسها را نوشتهایم.
مثالی درباره تعریف چکباکس
در این قسمت با کمک مثال سادهای روش تعریف چکباکس را بررسی کردهایم.
- در این مثال، پنجرهای با دو چکباکس مختلف ساختهایم.
- به هر چکباکس هم برچسبی اختصاص دادیم. یکی از چکباکسها دارای برچسب male و چکباکس دیگر برچسب female دارد.
- در این کدها از ویجت Checkbutton به صورت متصل به متغیر IntVar() استفاده میکنیم. وظیفه این متغیر آن است که وضعیت تیک خوردن یا نخوردن چکباکس را ذخیره کند. اگر چکباکس تیک خورده باشد مقدار متغیر IntVar() برابر با 1 شده و در غیر این صورت 0 میشود.
- از متد grid() برای قراردادن منظم چکباکسها در پنجره استفاده میشود. این متد، چکباکسها را به شکل عمودی و منظم میچیند. عبارت sticky=W در متد grid() به معنای آن است که چکباکسها باید در سمت چپ پنجره قرار بگیرند.
بعد از اجرای کد بالا، پنجره زیر، ظاهر میشود. در این کادر، دو دکمه قابل تیک زدن برای انتخاب جنسیت بین مرد و زن تعریف کردهایم.

دکمه رادیویی
بعضی وقتها میخواهیم کاربر فقط یک گزینه را از بین گزینههای موجود، انتخاب کند. یعنی امکان انتخاب چند گزینه به صورت همزمان وجود نداشته باشد. در این صورت بهتر است از «دکمه رادیویی» (Radiobutton) استفاده کنیم. دکمههای رادیویی را میتوان در گروههای مختلفی دستهبندی کرد. هر دسته از متغیر یکسانی به صورت اشتراکی برای اعلام وضعیت استفاده میکنند.
در کادر پایین، سینتکس مورد استفاده برای تعریف دکمههای رادیویی نوشته شده است.
مثالی درباره تعریف دکمه رادیویی
در این مثال، دو دکمه رادیویی تعریف کردهایم.
- برچسب یکی از دکمهها Faradars و برچسب دیگری MIT است.
- هر دو دکمه رادیویی به متغیر v متصل هستند. این متغیر، شیئی از کلاس IntVar() است.
- با اشتراکگذاری متغیر v بین دکمههای رادیویی، مطمئن میشویم که در هر لحظه فقط یکی از آنها انتخاب شده باشد. گزینه انتخاب شده، مقدار متغیر v را تعیین میکند. این مقدار برابر با اعداد 1 و 2 و غیره است. ترتیب این اعداد از بالا به پایین با تعریف دکمههای رادیویی مشخص میشود.
- تابع pack(anchor=W) تمام دکمههای رادیویی را در سمت چپ و به شکل بالا به پایین، همراستا با هم قرار میدهد.
بعد از اجرای کد بالا، پنجره زیر، ظاهر میشود.

Listbox
Listbox، فهرستی از عناصر قابل انتخاب توسط کاربران را نشان میدهد. کاربران میتوانند یک یا چند عنصر مختلف را از این فهرست انتخاب کنند.
در کادر پایین، سینتکس مورد نیاز برای استفاده از این ویجت را نوشتهایم.
نمایش Listbox با کمک مثال
در کادر پایین پنجرهای با ویجت Listbox طراحی کردهایم.
- در این Listbox ، فهرستی از زبانهای برنامه نویسی را ساختهایم.
- متد insert() وظیفه اضافه کردن عنصر به Listbox را بر عهده دارد. این متد عناصر مختلف را در اندیسهای مشخص شده به فهرست، اضافه میکند.
- متد pack() هم Listbox ساخته شده را در پنجره نمایش میدهد.
- برای اجرای GUI در پایتون از متد mainloop() استفاده میکنیم.
بعد از اجرای کد بالا، پنجره زیر با Listbox ساخته شده و ظاهر میشود.

Scrollbar
Scrollbar به کنترل کننده اسلایدها گفته میشود. در واقع «نوار اسکرول» (Scrollbar) به بالا و پایین شدن ویجتهای فهرست شدهای کمک میکند که تعدادشان از مقدار قابل نمایش توسط پنجره بیشتر است.
در کادر پایین، سینتکس مورد استفاده برای تعریف Scrollbar را نوشتهایم.
مثالی درباره استفاده از Scrollbar
در پایین، با کمک مثال سادهای روش استفاده از Scrollbar را بررسی کردیم.
- ابتدا کتابخانه tkinter را به محیط برنامه نویسی ایمپورت کردیم.
- سپس شیء root را از کلاس Tk() ساختیم. د
- ر این کد، Listbox-ی با ۱۰۰ خط داده متنی را همراه با نوار اسکرول عمودی تعریف کردهایم.
- Scrollbar را با استفاده از پارامتر yscrollcommand به Listbox متصل کردیم. در نتیجه کاربران میتوانند بر روی تمام عناصر موجود در فهرست، اسکرول بکنند.
خود فهرست از سمت چپ پنجره شروع شده و تمام فضا را به صورت پیشفرض اشغال میکند. در حالی که Scrollbar به سمت راست فهرست چسبیده است.
بعد از اجرای کد بالا، پنجره زیر با Listbox و Scrollbar ساخته شده و ظاهر میشود. البته پنجره را کمی از سمت راست کشیدهایم تا بزرگتر دیده شود.

منو
ویجت «منو» (Menu) برای ساخت انواع منوهای مورد استفاده در اپلیکیشن به کار برده میشود. در کادر زیر، سینتکس مورد استفاده در زمان تعریف منوها را نوشتهایم.
مثالی از تعریف منو در Tkinter
در این مثال، روش پیادهسازی «نوار منو» (Menu Bar) را با کمک مثال سادهای پیادهسازی کردهایم.
- در این کد، دو منوی File و Help را تعریف کردهایم. از ویجت Menu برای ساخت این منوها به صورت آبشاری استفاده کردهایم.
- در ضمن گزینههایی مانند New و Open و خط جدا کننده و Exit اضافه شدهاند. وظیفه گزینه Exit در این کد، بستن برنامه است.
- منوی Help شامل گزینه About است.
- در این کد، دستور root.config(menu=menu) وظیفه متصل کردن نوار منو به پنجره اصلی را بر عهده دارد.
بعد از اجرای کد بالا، پنجره زیر با نوار منو و گزینههای تعریف شده، ظاهر میشود.

Combobox
ویجت Combobox در داخل tkinter.ttk تعریف شده است. برای استفاده از این ویجت باید شیئی از روی کلاس Combobox بسازیم. برای تعریف گزینههای قابل استفاده در این ویجت از پارامتر values استفاده میکنیم. برای انتخاب گزینه پیشفرض هم میتوانیم متد set() را فراخوانی کنیم.
حتی میتوان به این ویجت ابزار مدیریت رویداد هم اضافه کرد. برای مثال با استفاده از تابع bind() میتوانیم تابعی مانند on_select() را به ویجت Combobox متصل کنیم. هر زمان که کاربر عنصر خاصی را انتخاب کند، این تابع دگر ویجتها را نیز بهروزرسانی میکند. در کادر پایین، سینتکس مورد استفاده برای پیادهسازی ویجت Combobox را نوشتهایم.
مثالی از ویجت Combobox
در این مثال با استفاده از ttk.Combobox منو آبشاری ایجاد میکنیم. در این منو یکی از گزینهها به عنوان گزینه پیشفرض انتخاب شده است. هر وقت که کاربران عنصری را انتخاب کنند، برنامه برچسبی را بهروزرسانی میکند. یعنی اینکه برچسب، همان عنصری را نشان میدهد که کاربر انتخاب کرده است.
بعد از اجرای کدهای بالا، پنجره برنامه به شکل زیر نشان داده میشود.

Scale
در زمان ساخت GUI در پایتون از این ویجت برای ساخت «نوار لغزنده گرافیگی» (Graphical Slider) استفاده میشود. با کمک این اسلایدر کاربران میتوانند مقادیر مورد نظر خود را انتخاب کنند. در کادر پایین، سینتکس لازم برای تعریف Scale را نوشتهایم.
مثالی درباره کار با Scale
در مثال پایین، روش تعریف اسلایدرهای افقی و عمودی با استفاده از ویجت Scale نوشته شده است.
- Scale اول از محدودهای بین 0 تا 42 جابهجا میشود. ویجت Scale به طور پیشفرض عمودی است.
- Scale دوم هم در جهت افقی از 0 تا 200 قابل جابهجایی است.
در تصویر پایین، پنجره ساخته شده با کدهای بالا را همراه با اسلایدرهای عمودی و افقی مشاهده میکنید.

TopLevel
ویجت TopLevel به شکل مستقیم توسط «مدیر پنجره» (Window Manager) کنترل میشود. این ویجت برای کار کردن به هیچ پنجره والدی نیاز ندارد. در کادر پایین، سینتکس لازم برای تعریف ویجت TopLevel را نوشتهایم.
مثالی درباره پیادهسازی ویجت TopLevel
در کد پایین، روش استفاده از ویجت TopLevel را برای ساخت پنجره جدید و مجزا نمایش دادهایم. این پنجره علاوه بر پنجره اصلی اپلیکیشن ایجاد میشود. تیتر پنجره اصلی Faradars است. اما تیتر پنجره دوم Python است. پنجره دوم با کمک تابع TopLevel() ایجاد شده است. با کمک این ویجت میتوانیم رابط کاربری «چندپنجرهای» (Multi-Window) ایجاد کنیم.
بعد از اجرای کدهای بالا پنجرههای زیر بر روی صفحه نمایش ظاهر میشوند.

Message
این ویجت ابزاری برای نمایش پیامهای متنی در کادر مخصوص پیام است. برای کار با ویجت Message باید از سینتکس زیر استفاده کنیم.
مثالی از نحوه کار با Message
در کد پایین روش استفاده از ویجت Message برای نمایش متن چندخطی نشان داده شده است. این کد ابتدا پنجره اصلی را ایجاد میکند. سپس با رنگ پسزمینه سبز کمرنگ پیغامی را نشان میدهد. ویجت Message به صورت خودکار متن موجود را قالببندی کرده و با سایر المانهای موجود در پنجره تنظیم میکند. بنابراین پیغام به شکل درست در پنجره نمایش داده میشود.
بعد از اجرای کدهای بالا، پنجره زیر با پیغام نوشته شده، ظاهر میشود.

Menubutton
ویجت «دکمه منویی» (Menubutton) زیرمجموعهای از منوی «بالا به پایین» یا «آبشاری» است و همیشه بر روی پنجره باقی میماند. هر ویجت Menubutton-ی کاربرد خاص خود را دارد. در کادر پایین، سینتکس مورد نیاز برای تعریف این ویجت را نوشتهایم.
مثالی درباره تعریف MenuButton
در کد پایین از ویجت Menubutton در tkinter استفاده کردهایم.
- این کد دکمهای با برچسب Faradars میسازد.
- وقتی که بر روی این دکمه کلیک کنید، منوی آبشاری ظاهر میشود.
- منوی ظاهر شده گزینههایی از جنس Checkbutton و با نام Contact و About دارد.
- هر دو Checkbutton از IntVar برای ذخیره وضعیت خود استفاده میکنند.
- در نهایت هم وضعیت تیک خوردن یا نخوردن گزینهها نشان داده میشود.
بعد از اجرای برنامه بالا، پنجره زیر، ظاهر میشود.

نوار پیشرفت
از ویجت «نوار پیشرفت» (Progressbar) برای نمایش فرایند پیشرفت انجام کارهای طولانی استفاده میکنیم. با کلیک بر روی دکمه، نوار پیشرفت در طول مدت زمان کوتاهی از ۰ تا ۱۰۰٪ پر میشود. در واقع، انجام وظایفی را شبیهسازی میکند که اجرای آنها مدت زمان طولانی ادامه دارد.
در پایین سینتکس مورد نیاز برای ساخت نوار پیشرفت را نوشتهایم.
مثالی درباره استفاده از نوار پیشرفت
در کد زیر، ویجت Progressbar را در tkinter تعریف و مدیریت کردهایم. وقتی بر روی دکمه کلیک کنید، برنامه وظیفه غیرواقعی ولی زمانبری را شروع میکند. نوار پیشرفت به آهستگی از ۰ تا ۱۰۰٪ پر میشود. برای ساخت نوار پیشرفت از ttk.Progressbar استفاده کردیم. مقادیر آن در داخل حلقه تغییر میکنند. در این برنامه برای ساخت تاخیر مجازی از تابع time.sleep() استفاده کرده و برای نشان دادن عکسالعمل پنجره از تابع update_idletasks() استفاده کردهایم.
بعد از اجرای کدهای بالا، پنجره زیر همراه با نوار پیشرفت ظاهر میشود. در این پنجره، برای اجرا شدن Progressbar باید بر روی دکمه Start Progress کلیک کنید.

SpinBox
این ویجت به عنوان درگاه ورودی برای ویجت Entry به کار برده میشود. در این ویجت کاربر میتواند مقداری را وارد بکند. اما این مقدار فقط از بین مقادیر ثابت و مشخص شده توسط برنامه نویس انتخاب میشوند. در کادر پایین، سینتکس لازم برای کار با این ویجت را نوشتهایم.
مثالی از نحوه تعریف SpinBox
در کد پایین نمونه سادهای از ویجت SpinBox را ساختهایم. این SpinBox به کاربران اجازه میدهد تا عددی بین 0 تا 10 را انتخاب کنند. برای انجام این کار کاربر باید بر روی دکمههای بالا و پایین کلیک بکند. با کمک تابع pack() این ویجت را به پنجره اصلی برنامه متصل کردهایم.
بعد از اجرای کدهای بالا، پنجره زیر همراه با کادر SpinBox ظاهر میشود. برای انتخاب عدد در این پنجره باید بر روی دکمههای به شکل فلش بالا و پایین کلیک کنید.

متن
از ویجت «متن» (Text) برای نوشتن و ویرایش متنهای چندخطی و قالببندی شکل مورد نظر برای نمایش آنها استفاده میشود. در کادر پایین، سینتکس لازم برای استفاده از این ویجت نوشته شده است.
مثالی درباره استفاده از ویجت Text
در کدهای پایین از ویجت Text برای نمایش متنی در دو خط، استفاده کردهایم.
- ارتفاع ویجت را به اندازه ۲ خط و عرض آن را برابر با ۳۰ کاراکتر تنظیم کردیم.
- با استفاده از تابع insert()، پیغام پیشفرض Mostafa Rashidi\nis a Programmer. را نمایش میدهیم.
بعد از اجرای کدهای بالا، پنجره زیر همراه با کادر متن ظاهر میشود. در این پنجره، متن نوشته شده به عنوان پیشفرض نمایش داده میشود. اما کاربر به راحتی میتواند آن را پاک کرده و متن مورد نظر خود را بنویسد.

Canvas
ویجت «بوم» یا «Canvas» برای رسم تصویر یا سایر چیدمانهای پیچیده مانند اشکال گرافیکی، متن و دیگر ویجتها به کار برده میشود. ابتدا به سینتکس مورد نیاز برای نوشتن ویجت Canvas توجه کنید تا بعد روش نوشتن آن را بررسی کنیم.
مثالی درباره کار با Canvas
در زمان رسم GUI در پایتون باید با ابزارهای متنوع آشنا باشیم. یکی از این ابزارها ویجت Canvas است. در کد زیر از ویجت Canvas برای رسم خط افقی استفاده کردهایم.
- ابتدا بومی با عرض 40 و ارتفاع 60 ایجاد میکنیم.
- سپس با کمک تابع create_line() خط افقی را در وسط بوم رسم میکنیم.
با کمک بوم میتوانیم اشکال مختلفی مانند خط، مستطیل و غیره را رسم کنیم.
بعد از اجرای کدهای بالا، پنجره زیر، همراه با خطی در وسط آن ظاهر میشود.

PanedWindow
PanedWindow، ظرفی برای قرار دادن ویجتهای مختلف است. از این ویجت برای نگهداری چند ابزار مختلف به شکل مرتب و منظم در کنار هم استفاده میشود.
در کادر پایین، سینتکس لازم برای نوشتن این ویجت را قرار دادهایم.
مثالی از کار با PanedWindow
در این کد از ویجت PanedWindow استفاده کردهایم. در این ویجت میتوان چندین ویجت فرزند را در صفحاتی با قابلیت تنظیم اندازه سازماندهی کرد.
- در این برنامه، صفحه افقی با نام m1 ایجاد کردهایم.
- سپس ویجت Entry را به سمت چپ صفحه m1 اضافه کردیم.
- بعد از آن صفحه عمودی با نام m2 هم در داخل m1 ایجاد کردیم.
- خود صفحه m2 هم شامل ویجت Scale است.
کاربران با گرفتن و کشیدن دستههای تعبیه شده در گوشه صفحات میتوانند اندازه آنها را تغییر بدهند.
بعد از اجرای کدهای بالا، پنجره زیر با دو ویجت قابل تنظیم ظاهر میشود.

گزینههای تنظیم رنگ در Tkinter
در این مثال، روش استفاده از گزینههای رنگی مختلف در ویجتهای tkinter نشان داده شده است. کدهای پایین شامل تنظیمات مربوط به رنگهای «پسزمینه» (Background) و «پیشزمینه» (Foreground) فعال، رنگهای پسزمینه و پیشزمینه معمولی و رنگهای «حالت انتخاب شده» و «غیرفعال» هستند. هر ویجتی در این مثال، نوع خاصی از گزینههای رنگی را نشان میدهد. با کمک مثال پایین میتوانید تاثیر رنگها در ظاهر برنامه، بررسی کنید.
بعد از اجرای کدهای بالا پنجره زیر ساخته میشود. با کلیک کردن بر روی دکمه یا نوشتن متن در کادر دریافت داده میتوانید تنظیمات مربوط به رنگ و کارکرد آنها را مشاهده کنید.

ابزارهای مدیریت ساختار هندسی در Tkinter
tkinter ابزارهای مخصوصی برای مدیریت ساختار هندسی ویجتها و المانهای پنجره در اختیار توسعهدهندگان قرار داده است. با کمک این ابزارها میتوانید ویجتهای موجود در پنجره والد را سازماندهی کنید. به طور کل سه کلاس اصلی برای مدیریت ساختار هندسی ویجتها وجود دارد.
- متد pack()
- متد grid()
- متد place()
در ادامه تمام متدهای بالا را به ترتیب توضیح میدهیم.
متد pack
این متد، تمام ویجتها را قبل از قرار گرفتن در پنجره والد سازماندهی میکند. با کمک آن میتوانیم تمام ویجتها را در هر چهار جهت اصلی بالا، پایین، چپ و راست دستهبندی کنیم. این متد هم میتواند ویجتها را تاجایی گسترش دهد که تمام فضای در دسترس را اشغال بکنند هم اینکه ویجتها را با اندازه ثابت و غیرقابل تغییر، تنظیم کند.
در مثال پایین، روش سادهای از کار با متد pack() را بررسی کردهایم.
بعد از اجرای کدهای بالا پنجره زیر با سه دکمه در وسط ظاهر میشود. میتوانید اندازه پنجره را از عرض و ارتفاع تغییر بدهید. اما این سه دکمه به بالا چسبیده و همیشه از جهت چپ و راست، اندازه مساوی خواهند داشت.

متد grid
متد grid() قبل از قراردادن ویجتها در ویجت والد، تمام آنها را در ساختار توری شکل یا شبکهای سازماندهی میکند. هر ویجت به ردیف و ستون مشخصی اختصاص داده میشود. البته با استفاده از ویژگیهای rowspan و columnspan، ویجتها میتوانند در طول ردیف یا ستون گسترش پیدا بکنند.
در کادر پایین، مثال سادهای را درباره کار با متد grid() بررسی کردهایم.
بعد از اجرای کدهای بالا پنجره زیر با سه برچسب ظاهر میشود. هر طور که طول و عرض پنجره را تغییر بدهید، جایگاه این برچسبها تغییر نخواهد کرد.

متد place
از این متد برای تعیین دقیق مکان قرارگیری ویجتها توسط برنامه نویس استفاده میشود. یعنی برنامه نویس با کمک مختصات X و Y جایگاه دقیق هر ویجت را مشخص میکند. برنامه نویس پایتون میتواند اندازه و موقعیت ویجتها را به دو صورت قطعی و نسبی مشخص کند.
در کادر پایین، روش کار با متد place() را با کمک مثال سادهای بررسی کردهایم.
بعد از اجرای کدهای بالا پنجره زیر با برچسب Label ظاهر میشود. هر طور که طول و عرض پنجره را تغییر بدهید، جایگاه این برچسب تغییر نخواهد کرد.

مدیریت رویداد در Tkinter
به تمام اتفاقاتی که هنگام تعامل کاربر با رابط کاربری رخ میدهد، در tkinter، رویداد گفته میشود. برای مثال میتوان به فشار دادن کلیدهای کیبورد، کلیک کردن بر روی دکمههای ماوس یا حتی تغییر اندازه پنجرهها اشاره کرد. تکنیک «مدیریت رویداد» (Event Handling) به برنامه نویسان کمک میکند تا هنگام وقوع این رویدادها، عکسالعمل مناسبی برای اپلیکیشن تعریف کنند.
رویداد و Binding-ها
در tkinter با کمک سازوکاری به نام «Binding»، تمام رویدادها را مدیریت میکنیم. وظیفه اصلی Binding این است که هر رویداد را به تابع مشخصی متصل کند. به این نوع توابع، «مدیر رویداد» (Event Handler) یا «Callback» گفته میشود. هر وقت که رویداد خاصی اتفاق بیفتد، tkinter نیز تابع مربوط به آن را اجرا میکند.
برای متصل کردن توابع Callback به رویدادها از تابع bind() استفاده میکنیم. در کادر پایین، سینتکس استفاده از این تابع را نوشتهایم.
همینطور که مشاهده میکنید در سینتکس بالا ۳ پارامتر وجود دارند. این پارامترها را در فهرست پایین، معرفی کردهایم.
- widget: این پارامتر همان ویجتی را نشان میدهد که میخواهیم رویداد مورد نظر را به آن متصل کنیم.
- event: رشتهای که نوع رویداد را مشخص میکند. برای مثال عبارت «Button-1» به معنای کلیک چپ ماوس است.
- handler: این پارامتر نیز همان تابعی است که در زمان وقوع رویداد باید اجرا شود.
رویدادهای مربوط به ماوس و صفحه کلید
رویدادهای مربوط به صفحه کلید وقتی به وجود میآیند که کاربر کلیدهای روی کیبورد را فشار بدهد. رویدادهای ماوس هم مربوط به کار با ماوس هستند. هم کلیک دکمههای ماوس و هم تکان دادن آن جزو رویدادهای ماوس به حساب میآیند.
در مثال پایین، چند تابع برای مدیریت رویدادهای ماوس و کلیدهای کیبورد نوشته شدهاند.
با اجرای برنامه بالا، تمام حرکتهای ماوس، فشردن کلیدهای آن و هر کلیدی که روی کیبورد فشار داده میشود، به صورت پیکسلبهپیکسل و دقیق در کنسول پایتون نمایش داده میشوند.
Mouse moved to (67, 179)
Mouse moved to (65, 184)
Mouse moved to (62, 190)
Mouse moved to (61, 193)
Mouse moved to (60, 198)
Key pressed: s
Key pressed: h
Key pressed: w
Key pressed: h
Key pressed: space
Key pressed: Escape
Key pressed: Control_L
Key pressed: Alt_L
اشیا رویداد
هر وقت رویدادی اتفاق بیفتد، «شیء رویداد» (Event Object) به تابع Callback ارسال میشود. اشیا رویداد شامل اطلاعات بسیار مفیدی هستند. در فهرست زیر، این اطلاعات را معرفی کردهایم.
- event.keysym: این شیء، نماد مربوط به کلیدهای کیبورد است. برای مثال میتوان به حروف الفبای انگلیسی یا عبارت Enter به معنای فشرده شدن دکمه Enter اشاره کرد.
- event.x و event.y: این اشیا از متغیرهای X و Y برای نشان دادن مختصات مربوط به ماوس یا محل وقوع رویدادهای ماوس استفاده میکنند.
- event.widget: این شیء ویجتی را نشان میدهد که به رویداد بر روی آن انجام شده است.
کتابخانه های ساخت GUI در پایتون
چندین کتابخانه مختلف برای ساخت GUI در پایتون وجود دارد. هر کدام از کتابخانههای گرافیکی پایتون نقاط قوت و ضعف خاص خود را دارند. در ابتدای این متن با مهمترین ابزارهای فریمورک Tkinter آشنا شدیم. در این قسمت این فریمورک را با چند مورد دیگر از مشهورترین گزینههای پایتون برای ساخت رابط کاربری گرافیکی مقایسه میکنیم.

Tkinter
کتابخانه Tkinter، فریمورک استاندارد پایتون برای ساخت رابط کاربری گرافیکی است. این کتابخانه به عنوان پوششی بر روی مجموعه ابزار «Tk GUI» ساخته شده است. یعنی اینکه به عنوان واسطهای بین زبان پایتون و این ابزارها ظاهر شده و روش کار با آنها را سادهتر کرده است. «Tk» ابتدا برای استفاده توسط زبان اسکریپتنویسی «Tcl» ساخته شده بود. اما الان برنامه نویسان پایتون هم میتوانند به راحتی با آن کار کرده و برنامههای خود را بسازند.
Tkinter کلاسها و توابعی را برای برنامه نویسان فراهم کرده است که کاربری سادهای دارند. توسعهدهندگان با کمک این ابزارها میتوانند به راحتی و با دستورات صریح، اپلیکیشنهای گرافیکی خود را بسازند.

در ادامه با نقاط قوت و ضعف این کتابخانه آشنا میشوید.
نقاط قوت کتابخانه Tkinter
در فهرست زیر، مزایای اصلی استفاده از کتابخانه Tkinter را نوشتهایم.
- یکی از مهمترین مزیتهای این کتابخانه مربوط به سادگی کار با آن است. منحنی یادگیری کوچک این کتابخانه باعث شده که به گزینه بسیار مناسبی برای استفاده توسط افراد مبتدی تبدیل شود.
- در هر دو نوع پروژههای تجاری و اوپن سورس میتوان از این کتابخانه استفاده کرد.
- کتابخانه Tkinter در بیشتر نسخههای پایتون موجود است. یعنی اینکه توسعهدهندگان این زبان برای شروع به کار با Tkinter نیاز به نصب هیچ کتابخانه اضافی دیگری ندارند. اما اگر به هر دلیلی در زمان کار با این کتابخانه متوجه شدید که نصب نشده یا خراب نصب شده است، برای آموزش نصب Tkinter در پایتون میتوانید مطلب مربوط به آن را در مجله فرادرس مطالعه کنید.
| نقاط قوت | نقاط ضعف |
|---|---|
| ساده و مناسب برای مبتدیان | گزینههای سفارشیسازی محدود |
| قابل استفاده در پروژههای تجاری و اوپن سورس | مشکل بودن ساخت رابط کاربری پیچیده |
| نصب آسان همراه با پایتون | ظاهر ویجتها قدیمی و ساده |
نقاط ضعف کتابخانه Tkinter
در فهرست پایین، معایب و مشکلات مربوط به کار با کتابخانه Tkinter را نوشتهایم.
- سادگی بسیار زیاد در استفاده از Tkinter به خاطر وجود محدودیت در گزینههای سفارشیسازی رابط کاربری است. البته Tkinter مجموعه اولیهای از تمام ویجتهای مورد نیاز مانند دکمهها، برچسبها و فیلدهای دریافت داده را فراهم کرده است. با این حال، هنوز هم ساخت رابطهای گرافیکی پیچیده به تنهایی با استفاده از Tkinter کار مشکلی است.
- ظاهر ساده ویجتهای این فریمورک نسبت به فریمورکهای جدید، باعث شده که اپلیکیشنهای ساخته شده با آن به نظر قدیمی و کهنه بیایند.
PyQt
PyQt مجموعهای از ابزارهای متصل کننده پایتون به فریمورک طراحی اپلیکیشنهای گرافیکی «Qt» است. Qt یکی از فریمورکهای قدرتمند و انعطافپذیر برای ساخت GUI است. این فریمورک ویژگیها و امکانات بسیار زیادی ارائه میدهد. هدف PyQt ترکیب سینتکس ساده پایتون با قدرت Qt است. این مسئله باعث شده که PyQt به یکی از بهترین گزینهها برای ساخت اپلیکیشنهای مجهز به رابطهای گرافیکی پیچیده و زیبا تبدیل بشود.
نقاط قوت فریمورک PyQt
در فهرست زیر، مزایای اصلی استفاده از فریمورک PyQt را نوشتهایم.
- یکی از کلیدیترین مزایای PyQt، مجموعه گسترده ویجتها و المانهای این فریمورک است.
- PyQt مجهز به مجموعه کاملی از ویجتهای از پیشساخته شده است. این ویجتها را به راحتی میتوان سفارشی کرد. در نتیجه توسعهدهندگان میتوانند رابط کاربری گرافیکی خود را به صورت تعاملی و با ظاهر مدرن بسازند.
- PyQt از ویژگیهای پیشرفتهای مانند «بینالمللیسازی» (Internationalization)، «برنامهنویسی شبکه» (Network Programming) و ادغام با رسانههای صوتی و تصویری پشتیبانی میکند. این ویژگی آن را به گزینه مناسبی برای ساخت اپلکیشنهای گرافیکی متنوع، تبدیل کرده است.

نقاط ضعف فریمورک PyQt
سیستم Qt نسبت به Tkinter بزرگتر و بسیار پیچیدهتر است. بنابراین فرایند یادگیری PyQt هم نسبت به کتابخانه Tkinter سختتر و زمانبرتر است.
| نقاط قوت | نقاط ضعف |
|---|---|
| مجموعه گستردهای از ویجتها و المانها | یادگیری زمانبر و سخت |
| ویجتهای از پیشساخته شده و قابل سفارشیسازی | |
| پشتیبانی از برنامه نویسی شبکه | |
| قابل استفاده با رسانههای صوتی و تصویری |
کیوی
«کیوی» (Kivy) یکی از فریمورکهای پایتون است که با هدف توسعه اپلیکیشنهای قابل استفاده در دستگاههای صفحه لمسی طراحی شده است. این فریمورک از تکنولوژی «چندلمسی» (Multi Touch) هم پشتیبانی میکند. نکته بعدی این است که محصولات ساخته شده با Kivy چندپلتفرمی هستند. یعنی یکبار اپلیکیشن خود را میسازید. سپس بدون نیاز به اعمال تغییرات خاص به راحتی از آن بر روی پلتفرمها و سیستم عاملهای مختلف استفاده میکنید.
فریمورک Kivy مجموعه غنی از انواع ویجتها و ابزارهای مختلف را در اختیار توسعهدهندگان قرار میدهد تا اپلیکیشنهایی با قابلیت تعامل بالا و ظاهر مدرن و زیبا بسازند.

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

نقاط ضعف فریمورک Kivy
در فهرست پایین، معایب و مشکلات مربوط به کار با فریمورک Kivy را نوشتهایم.
- Kivy نسبت به دیگر فریمورکهای گرافیکی پایتون، جامعه کاربری کوچکتری دارد. در نتیجه ممکن است پیدا کردن منابع آموزشی و راهنمایی در زمان برخورد به مشکلات سختتر شود.
- سینتکس Kivy و ساختار کدنویسی آن منحصربهفرد هستند. برای همین یادگیری و عادت کردن به استفاده از آن کمی زمانبر است.
| نقاط قوت | نقاط ضعف |
|---|---|
| پشتیبانی کامل از صفحات لمسی | جامعه کاربری کوچکتر |
| موتور گرافیکی سریع و روان | سینتکس و ساختار کدنویسی متفاوت |
| اوپن سورس و رایگان | یادگیری کمی زمانبر |
wxPython
«wxPython»، مانند واسطهای بین فریمورک «wxWidgets» در ++C و زبان برنامه نویسی پایتون کار میکند. wxWidgets یکی از مجموعه ابزارهای قدیمی و مستحکم برای ساخت GUI است. اپلیکیشنهای ساخته شده با این فریمورک ظاهر بومی اپلیکیشنهای ویندوز، macOS و لینوکس را دارند.
wxPython با هدف استفاده از wxWidgets در پایتون طراحی شده است. بنابراین هم کاربری سادهای دارد و هم قابل اعتماد است. با کمک wxPython میتوانیم اپلیکیشنهای گرافیکی درست کنیم که در سیستم عاملهای مختلف قابل استفادهاند.

نقاط قوت فریمورک wxPython
در فهرست زیر، مزایای اصلی استفاده از کتابخانه wxPython را نوشتهایم.
- اپلیکیشنهای ساخته شده با wxPython،ظاهر کاملا بومی و هماهنگ با محیط یا سیستم عامل محل اجرای خود پیدا میکنند. یعنی از دکمهها و عناصر مدیریتی مشابه ابزارهای همان سیستم استفاده میکنند. با وجود این ویژگی، اپلیکیشنهای wxPython ظاهری بسیار طبیعی، حرفهای و خوشساخت پیدا میکنند.
- wxPython از ویژگیهای پیشرفتهای مانند «Drag-And-Drop»، تعامل با چاپگر، انجام عملیات مخصوص «Clipboard» و غیره پشتیبانی میکند. در نتیجه گزینه مناسبی برای ساخت اپلیکیشنهای مختلف است.
نقاط ضعف فریمورک wxPython
در فهرست پایین، معایب و مشکلات مربوط به کار با کتابخانه wxPython را نوشتهایم.
- کتابخانه wxPython پایگاه کاربری کوچکتری نسبت به Tkinter و PyQt دارد. در نتیجه پیدا کردن منابع آموزشی و پشتیبانی برای این کتابخانه کمی مشکلتر است.
- به خاطر پیچیدگی بیشتر کتابخانه wxWidgets یادگیری این کتابخانه نسبت به Tkinter کمی مشکلتر است.
- نسبت به دیگر فریمورکهای GUI در پایتون گزینههای سفارشیسازی کمتری دارد.
| نقاط قوت | نقاط ضعف |
|---|---|
| ظاهر بومی و حرفهای | پایگاه کاربری کوچکتر |
| پشتیبانی از Drag-And-Drop و چاپگر | یادگیری کمی سختتر |
| مناسب برای اپلیکیشنهای متنوع | گزینههای سفارشیسازی کمتر |
PySimpleGUI
PySimpleGUI یکی از فریمورکهای GUI در پایتون است که هم سبک وزن بوده و هم کاربری سادهای دارد. این فریمورک برای افراد مبتدی و برنامه نویسانی طراحی شده است که به دنبال روش ساده و سریعی برای ساخت رابط کاربری گرافیکی میگردند. تمرکز PySimpleGUI بر روی سادگی و کاربری آسان است. در نتیجه برنامه نویسان با کمترین مقدار کدنویسی میتوانند اپلیکیشنهای گرافیکی ساده بسازند.
نقاط قوت فریمورک PySimpleGUI
در فهرست زیر، مزایای اصلی استفاده از فریمورک PySimpleGUI را نوشتهایم.
- یادگیری و استفاده از این فریمورک بسیار ساده است.
- PySimpleGUI چند پلتفرمی است. یعنی اینکه اپلیکیشنهای ساخته شده با آن به راحتی میتوانند بر روی سیستم عاملهای مختلف کار کنند.
نقاط ضعف فریمورک PySimpleGUI
در فهرست پایین، معایب و مشکلات مربوط به کار با فریمورک PySimpleGUI را نوشتهایم.
- نسبت به فریمورکهای پیشرفته، گزینههای سفارشیسازی محدودتری دارد.
- برای ساخت اپلیکیشنهای پیچیده و پر از ویژگی، گزینه مناسبی نیست.
پیاده سازی پروژه های پایتون برای یادگیری بیشتر
مرحله بعد از بررسی بهترین، ابزارهای ساخت GUI در پایتون، استفاده از آنها در پروژههای واقعی است. برای زبان پایتون اپلیکیشنهای بسیار متنوعی میتوان ساخت. زیرا پایتون در صنعت، تجارت، هوش مصنوعی، مراکز علمی و غیره کاربردهای گستردهای دارد. در فرادرس تلاش کردیم تا نحوه پیادهسازی پروژههای متنوع پایتون را آموزش بدهیم. یکی از بهترین روشهای یادگیری ساخت اپلیکیشن با پایتون، بررسی و اجرای پروژههای مربوط به دنیای واقعی است. بعضی وقتها لازم است در فرایند اجرای این نوع پروژهها از چند کتابخانه مختلف در کنار هم استفاده کنیم. در پایین چند مورد از فیلمهای پروژهمحور پایتون را معرفی کردهایم.
- فیلم آموزش پروژه محور پایتون، طراحی گرافیکی با PyQt و بدون کدنویسی با QT Designe
- فیلم آموزش پروژه محور جنگو و پایتون درباره طراحی سایت و وب اپلیکیشن با فریمورک Django + گواهینامه
- فیلم آموزش پروژه محور پایتون درباره ساخت بازی Snake
- فیلم آموزش پروژه محور پایتون درباره ساخت بازی با کتابخانه Turtle + گواهینامه
- فیلم آموزش ساخت داشبورد هوش تجاری با Streamlit همراه با پروژه عملی + گواهینامه
در صورت تمایل با کلیک بر روی تصویر پایین به صفحه اصلی این مجموعه آموزشی هدایت شده و فیلمهای پروژهمحور بیشتری را تماشا کنید.

در بخش بعد مزایای استفاده از GUI در پایتون را به شکل خلاصه توضیح دادهایم.
مزایای استفاده از GUI در پایتون
استفاده از فریمورکهای اختصاصی پایتون برای ساخت رابط کاربری مزیتهای زیادی دارد.
در این بخش، سه مورد از مهمترین مزیتهای آن را بیان کردهایم.
- این فریمورکها شامل مجموعه کاملی از المانها و ویجتهای از پیشساخته شده هستند. برنامه نویسان میتوانند تمام این موارد را با توجه به نیازهای اپلیکیشن خود سفارشی بکنند. این قابلیت باعث صرفهجویی زیادی در زمان و تلاش برای طراحی و پیادهسازی بلوکهای پایه رابط کاربری گرافیکی میشود.
- با کمک فریمورکهای اختصاصی GUI در پایتون، دیگر لازم نیست برنامه نویسان، وقت خود را برای ساخت جزئیات سطح پایین رابط کاربری صرف کنند. بنابراین به راحتی میتوانند بر روی منطق اصلی برنامه خود تمرکز کنند. این مزیت به نوشتن کدهای تمیز و قابل نگهداری کمک کرده و احتمال وقوع خطاها را کاهش میدهد. در نتیجه کیفیت کلی اپلیکیشن هم ارتقا پیدا میکند.
- فریمورکهای GUI در پایتون به راحتی قابل گسترش هستند. این فریمورکها به خوبی با دیگر کتابخانهها و ابزارها کار میکنند. میتوان این برنامهها را به پایگاه داده متصل کرد و حتی از کتابخانههای مخصوص مصورسازی دادهها در پایتون برای نمایش اطلاعات مختلف کمک گرفت. با وجود این ویژگیها میتوان اپلیکیشنهای کامل و قدرتمندی ساخت.
جمعبندی
در این مطلب از مجله فرادرس، روش ساخت GUI در پایتون را بررسی کرده و چند مورد از بهترین فریمورکهای مناسب برای این نوع پروژهها را معرفی کردهایم. Tkinter به عنوان ابزاری ساده و داخلی در پایتون، امکان ساخت اپلیکیشنهای دسکتاپ را با ویجتهایی مانند Label و Button و Entry و Checkbutton و Radiobutton و موارد دیگر فراهم میکند.
علاوه بر موارد بالا، گزینههای مربوط به رنگها و روش مدیریت رویدادهای ماوس و کیبورد را نیز توضیح دادهایم. در مقایسه با فریمورکهایی مانند PyQt و Kivy و wxPython و PySimpleGUI کتابخانه Tkinter به دلیل سادگی و عدم نیاز به نصب جداگانه، گزینهای ایدهآل برای پروژههای کوچک محسوب میشود. مزایای استفاده از GUI در پایتون شامل صرفهجویی در زمان، تمرکز بیشتر بر منطق اصلی برنامه و امکان گسترش پروژه با کمک کتابخانههای دیگر است.












