پرسش‌های متداول درباره‌ی رابط کاربری گرافیکی

پرسش‌های عمومی GUI

چه کیت‌های رابط کاربری گرافیکی (GUI) برای پایتون وجود دارد؟

ساخت‌های استاندارد پایتون شامل یک رابط شیءگرا برای مجموعه ابزارک‌های Tcl/Tk هستند که tkinter نامیده می‌شود. این احتمالاً ساده‌ترین گزینه برای نصب و استفاده است (زیرا همراه با بیشتر توزیع‌های دودویی پایتون ارائه می‌شود). برای اطلاعات بیشتر درباره Tk، از جمله پیوندهایی به کد منبع، صفحه اصلی Tcl/Tk را ببینید. Tcl/Tk کاملاً برای پلتفرم‌های macOS، Windows و Unix قابل حمل است.

بسته به این که چه سکو(هایی) را هدف گرفته‌اید، چندین جایگزین نیز وجود دارد. فهرستی از چارچوب‌های رابط کاربری گرافیکی چندسکویی و مختص سکو را می‌توانید در ویکی پایتون پیدا کنید.

پرسش‌های Tkinter

چگونه می‌توانم برنامه‌های Tkinter را فریز (freeze) کنم؟

Freeze ابزاری برای ایجاد برنامه‌های مستقل است. هنگام استفاده از Freeze برای برنامه‌های Tkinter، این برنامه‌ها به‌طور کامل مستقل نخواهند بود، زیرا برنامه همچنان به کتابخانه‌های Tcl و Tk نیاز دارد.

یکی از راه‌حل‌ها این است که برنامه را همراه با کتابخانه‌های Tcl و Tk عرضه کنید و در ران‌تایم با استفاده از متغیرهای محیطی TCL_LIBRARY و TK_LIBRARY به آن‌ها اشاره کنید.

کتابخانه‌های فریز (freeze) شخص ثالث مختلفی مانند py2exe و cx_Freeze، پشتیبانی توکار برای برنامه‌های Tkinter دارند.

آیا می‌توانم در حین انتظار برای ورودی/خروجی، رویدادهای Tk را مدیریت کنم؟

در سکوهای غیر از ویندوز، بله، و حتی نیازی به نخ‌ها ندارید! اما باید ساختار کد ورودی/خروجی خود را کمی تغییر دهید. Tk معادلی از فراخوانی XtAddInput() در Xt دارد، که به شما امکان می‌دهد یک تابع کال‌بک را ثبت کنید تا هنگامی که ورودی/خروجی روی یک توصیف‌گر پرونده امکان‌پذیر باشد، از حلقه‌ی اصلی Tk فراخوانی شود. هندلرهای پرونده را ببینید.

نمی‌توانم اتصال‌های کلید (key bindings) را در Tkinter به‌کار بیندازم: چرا؟

شکایتی که اغلب شنیده می‌شود این است که هندلرهای رویداد متصل به رویدادها با متد bind()، حتی زمانی که کلید مناسب فشرده می‌شود، فراخوانی نمی‌شوند.

شایع‌ترین علت این است که ابزارکی که اتصال به آن اعمال می‌شود، «تمرکز صفحه‌کلید» ندارد. برای دستور focus به مستندات Tk مراجعه کنید. معمولاً با کلیک کردن درون یک ابزارک، تمرکز صفحه‌کلید به آن داده می‌شود (اما نه برای برچسب‌ها؛ گزینه takefocus را ببینید).