آشنایی با tk
قبلا متوجه شدیم که چگونه می توان برنامه های متنی را با یک رابط خط فرمان یا CLI نوشت. اکنون ما به طور خلاصه به ایجاد یک برنامه با یک رابط کاربر گرافیکی یا GUI نگاه می کنیم. در این دوره ما از tkinter استفاده خواهیم کرد، یک ماژول در کتابخانه استاندارد Python که به عنوان یک رابط کاربری برای Tk، یک ابزار ابزار ساده عمل می کند. ابزارهای دیگر موجود در دسترس هستند، اما اغلب در سراسر سیستم عاملها متفاوتند. اگر شما اصول اولیه tkinter را بیاموزید، باید سعی کنید از یک ابزار بهتر در آینده استفاده کنید. ما خواهیم دید که چگونه یک GUI ساده ایجاد می کند که ورودی و خروجی کاربر را مدیریت می کند. GUI ها اغلب از یک نوع برنامه نویسی OO (Object Oriented) استفاده می کنند که ما را به رویدادی هدایت می کنیم: برنامه به رویدادها پاسخ می دهد، که در حقیقت اقداماتی است که کاربر می گیرد. بسته Tkinter یک بسته بسیار قدرتمند است. اگر شما Python را نصب کرده اید، ممکن است از IDLE استفاده کنید که IDE یکپارچه است که با Python آورده می شود، این IDE با استفاده از Tkinter نوشته شده است. ما از Python 3.6 استفاده خواهیم کرد، بنابراین اگر شما از Python 2.x استفاده می کنید، به شدت توصیه می شود که به Python 3.x تغییر دهید، مگر اینکه شما تغییرات زبان را می دانید، بنابراین می توانید کد را بدون اشتباه اجرا کنید. فرض میکنم که شما مقدار کمی درباره اصول اولیه پایتون دارید تا به شما در درک آنچه ما انجام میدهیم کمک کنیم. در غیر این صورت لطفا به صفحه دوره ها برگردید و دوره آموزش پایتون را گذرانده و سپس وارد این بخش شوید. ما با ایجاد یک پنجره شروع خواهیم کرد، ما یاد خواهیم گرفت که چگونه ویجت ها را مانند دکمه ها، جعبه های دسته کوچک، و غیره اضافه کنیم، سپس با خواص آنها بازی خواهیم کرد و در نهایت دید کلی را نسبت به ساخت اپلیکیشن های مختلف را فرا خواهیم گرفت.
آیا می توان اپلیکیشن های خوبی با این رابط ایجاد کرد؟
واقعیت این است که بستگی به برنامه ای خواهد داشت که می سازید. اگر صرفا برای شما مهم عملکرد های سریع تر و با گرافیک کم تر هستش، بله این ماژول می تواند سرویس هایی را که تعبیه کرده این برای شما به صورت گرافیکی کنترل و به اجرا در آورد. اما باید توجه داشته باشید که این ماژول ضعف هایی هم دارد که در قسمت های جلو تر به مراتب نشان خواهیم داد.
انواع ویجت های Tkinter
بسیاری از کلاسهای حامل ویجت های مختلفی در tkinter ساخته شده اند وجود دارد - که با تعدادی از آن ها آشنا می شویم:
- یک Frame یک قاب و یک ویجت ظاهر است که در داخل یک پنجره قرار می گیرد، که می تواند حاشیه و پس زمینه خاص خود را داشته باشد - برای گروه بندی ویجت های مرتبط با هم در یک طرح کاربردی استفاده می شود.
- Toplevel ویجتی است که به عنوان یک پنجره جداگانه نمایش داده می شود.
- Canvas یک ویجت برای طراحی گرافیک است. در استفاده پیشرفته، می توان آن را نیز برای ایجاد ویدجت های سفارشی استفاده کرد - زیرا ما می توانیم هر چیزی را که دوست داریم در داخل آن بنویسیم و آن را با قابلیت تعاملی ایجاد کنیم.
- Text متنی را نمایش می دهد که می تواند قابل ویرایش باشد و می تواند تصاویر را جاسازی کند.
- Button یا یک دکمه معمولا به طور مستقیم بر روی یک عمل کاربر قرار می گیرد - زمانی که کاربر بر روی یک دکمه کلیک کند، باید اتفاق بیافتد.
- Label یا برچسب یک ویجت ساده است که یک قطعه کوتاه از متن یا یک تصویر را نمایش می دهد، اما معمولا تعاملی نیست. (قابل کلیک نیست)
- Message یا یک پیام مشابه یک برچسب است، اما برای قسمتهای طولانی تر متن طراحی شده است که باید بسته بندی شوند.
- Scroller bar اجازه می دهد تا کاربر از طریق آن محتوایی که بیش از حد بزرگ است را به صورت متنی قابل اسکرول مشاهده نماید.
- Checkbutton، Radiobutton، Listbox، Entry و Scale انواع ویدجت های ورودی هستند که اجازه می دهد تا کاربر اطلاعات را در برنامه وارد کند.
- منو و Menubutton برای ایجاد منوهای پایین کش استفاده می شود.
چرا استفاده از tkinter؟
دلیل اینکه این ماژول رو انتخاب کردیم به این خاطر هستش که یک رابط native در نظر گرفته میشود و می توان اپلیکیشنی را که طراحی می کنید بدون کوچکترین تغییر در هر سه سیستم عامل ویندوز ، مکینتاش و لینوکس به راحتی و بدون نصب پکیج خاصی استفاده و به اجرا در آورد.
چقدر می تونه tkinter قدرتمند باشه؟
قدرت این ماژول در بعضی موارد به محدودیت هایی که ممکنه باهاش برخورد کنید محدود میشه و نمی توان خیلی انتظار زیادی را از این ماژول داشت، اما می توان برنامه هایی را خلق کرد که ارزش استفاده و همچنین ارزش نرم افزار شما را به دلیل انعطاف پذیری زیادی که دارد بالا می برد.
ببخشید، شما خودتون اگر تیکینتر رابط گرافیکیش دیگه جواب نده و به کارتون نیاد، سراغ کدوم رابط میرید؟
سلام آقای بیگدلی
خدا میدونه چقدر این رابط گرافیکی کیوی سخته و چقدر این تیکینتر آسونه
ولی چه میشه کرد که کیوی روی همه سیستم عامل ها اجرا میشه، یکی از مزیت های بزرگش اینه، البته گرافیکش هم خیلی از تیکینتر بالاتره
ولی نمیدونم چرا الکی اینقدر سخت و پیچیده اش کردن
مثلا برای امپورت کردن تیکینتر یک با مینویسیم from tkinter import *
ولی اونجا لیبل و باتن و همه چیو باید تک تک ایمپورت کنیم
به غیر از اینها اصلا جای سواله که چرا اینقدر اومده زبونش رو سخت و پیچیده کرده؟ چرا برای باز کردن پنجره با کیوی این همه کد لازمه ولی با تیکینتر با سه خط کار تمومه، توی همه کُُداش همینجوریه(برای باتن دست کردن، لیبل و...) چرا اینقدر این زبون سختش کرده، من که تا یه جایی پیش رفتم ولی دیگه اینقدر سخت و پیچیده بود که دیگه ولش کردم
کاش یه رابط گرافیکی مثل تیکینتر بود، که ساده بود اما روی تمام سیستم عامل ها اجرا میشد.
از pyqt استفاده کنین نسخه 6 تغییرات و native رو داره منتهی Desktop
سلام من چجوری می تونم تمام این کد هارو تو یه کد استفاده کنم و یه برنامه ساده درست کنم؟
توروخدا جواب بدید
کمی راجع به کاری که می خواید انجام بدید توضیح بدید لطفا
دستور نصب این کتابخانه چی هست؟
این کتابخونه نیاز به نصب نداره و به صورت پایه با خود python نصب میشه
سوال اول اینه که من یک مثلا سایت ساختم که توش اطلاعات رو وارد می کنی و ثبت نام می کنی این سایت یک دکمه داره که مال ادمین هست که بنده هستم که بعد از وارد کردن رمز میتونم کسایی که ثبت نام کردن رو ببینم یا پاکشون بکنم
سوال اول اینه که چجوری میتونم کاری کنم که ثبت نام هر نفر توی یک خط نشان داده شود چون نمیدونم کسی که ثبت نام کرده چند خط تایپ کرده اگه ده نفر ثبت نام کنند
باید لیست باکس رو ده دقیقه بکشم تا به نفر دهم برسم
سوال دوم چطوری میتونم خودم انتخاب کنم چه ثبت نامی از لیست وتکست حذف بشه
سوال سوم چطوری میتونم سایت رو در دسترس همه قرار بدم
سوال چهارم من مثلا میخوام یک نرم افزار برنامه نویسی بنویسم چطوری کاری کنم که زمانی که کاربر تایب کرد پرینت، پرینت بنفش بشه
سوالاتتون میشه گفت ربطی به خود آموزش های سایت نداره و بیشتر برای اطلاعات عمومی خودتون هستش و نمیشه بیشترشون رو تایید و توی سایت پاسخ داد
به عنوان مثال شما دارید در مورد طراحی سایت شخصیتون می پرسید در صورتی که ربطی به دوره ای که دارید توش میگذارید نداره
اصلا در مورد خود شاخص پایتون و فریمورک مربوطه نمی پرسید و سوالاتتون بیشتر به مباحث طراحی بر میگرده تا مدلاسیون و یا حتی ساختار backend پس بهتر این هستش که سوالاتتون رو مستقیما از طریق تلگرام بپرسید
ببخشید اگه دوره ی پایتون پیشرفته تموم شده میشه یک دوره ی پیشرفته ی رابط گرافیکی پایتون هم بزارید بنظرم هنوز چیز های زیادی هست که نگفتید لطفا اگه تونستید سوالاتی که توی هر بخش دارم رو به آموزشتون اضافه کنید
تعداد سوالاتتون زیاد هستش به نظر بهتر اینه که تو دوره پایتون ثبت نام کنین و با مدرستون این سوالات رو درمیون بگذارید چون سوالاتتون بعضی موارد به جایی که گذاشتید مربوط نیستش