IDLE --- ویرایشگر و پوسته پایتون

کد منبع: Lib/idlelib/


IDLE محیط یکپارچه توسعه و یادگیری پایتون است.

IDLE دارای قابلیت‌های زیر است:

  • چندسکویی: عمدتاً به‌طور یکسان روی ویندوز، یونیکس و macOS کار می‌کند

  • پنجره‌ی پوسته‌ی پایتون (مفسر تعاملی) با رنگ‌آمیزی ورودی کد، خروجی و پیام‌های خطا

  • ویرایشگر متن چندپنجره‌ای با واگرد چندگانه، رنگ‌آمیزی پایتون، تورفتگی هوشمند، نکته‌های فراخوانی، تکمیل خودکار و سایر ویژگی‌ها

  • جستجو در هر پنجره، جایگزینی در پنجره‌های ویرایشگر، و جستجو در چندین پرونده (grep)

  • اشکال‌زدا با نقاط توقف پایا، اجرای گام‌به‌گام و مشاهده‌ی فضای نام های سراسری و محلی

  • پیکربندی، مرورگرها و سایر پنجره‌های محاوره‌ای

برنامه‌ی IDLE در بسته‌ی idlelib پیاده‌سازی شده است.

این یک ماژول اختیاری است. اگر این ماژول در نسخه CPython شما موجود نیست، به مستندات توزیع‌کننده خود (یعنی هر کسی که پایتون را در اختیار شما قرار داده است) مراجعه کنید. اگر شما توزیع‌کننده هستید، نیازمندی‌های ماژول‌های اختیاری را ببینید.

ویرایش و پیمایش

پنجره‌های ویرایشگر

IDLE ممکن است هنگام شروع، بسته به تنظیمات و نحوه‌ی شروع IDLE، پنجره‌های ویرایشگر را باز کند. پس از آن، از منوی File استفاده کنید. برای هر پرونده مشخص، فقط یک پنجره ویرایشگر می‌تواند باز باشد.

نوار عنوان شامل نام پرونده، مسیر کامل و نسخه‌ی پایتون و IDLE در حال اجرای پنجره است. نوار وضعیت شامل شماره‌ی خط ('Ln') و شماره‌ی ستون ('Col') است. شماره‌های خط از ۱ شروع می‌شوند؛ شماره‌های ستون از ۰.

IDLE فرض می‌کند که پرونده‌هایی با پسوند شناخته‌شده .py* حاوی کد پایتون هستند و سایر پرونده‌ها حاوی آن نیستند. کد پایتون را با منوی Run اجرا کنید.

کلیدبندی‌ها

مکان‌نمای درج در IDLE یک میله عمودی نازک بین جایگاه‌های نویسه است. وقتی نویسه‌ها وارد می‌شوند، مکان‌نمای درج و هر چیزی که در سمت راست آن قرار دارد یک نویسه به سمت راست حرکت می‌کند و نویسه جدید در جای جدید وارد می‌شود.

چند کلید غیرنویسه‌ای مکان‌نما را جابه‌جا می‌کنند و ممکن است نویسه‌ها را حذف کنند. حذف، متن را در کلیپ‌بورد قرار نمی‌دهد، اما IDLE یک فهرست واگرد (undo list) دارد. هر جا که این سند درباره‌ی کلیدها بحث می‌کند، «C» به کلید Control در ویندوز و یونیکس و به کلید Command در macOS اشاره دارد. (و در همه‌ی این بحث‌ها فرض بر این است که کلیدها به چیز دیگری دوباره اختصاص داده نشده‌اند.)

  • کلیدهای جهت‌دار، مکان‌نما را یک نویسه یا یک خط جابه‌جا می‌کنند.

  • با C-LeftArrow و C-RightArrow یک کلمه به چپ یا راست حرکت می‌کنید.

  • Home و End به ابتدا یا انتهای خط می‌روند.

  • Page Up و Page Down یک صفحه به بالا یا پایین می‌روند.

  • C-Home و C-End به ابتدا یا پایان پرونده می‌روند.

  • Backspace و Del (یا C-d) نویسه‌ی قبلی یا بعدی را حذف می‌کنند.

  • C-Backspace و C-Del یک کلمه در سمت چپ یا راست را حذف می‌کنند.

  • C-k همه‌چیز سمت راست را حذف («kill») می‌کند.

ممکن است کلیدبندی‌های استاندارد (مانند C-c برای رونوشت و C-v برای چسباندن) کار کنند. کلیدبندی‌ها در پنجره‌ی Configure IDLE انتخاب می‌شوند.

تورفتگی خودکار

پس از یک دستور آغازکننده‌ی بلوک، خط بعدی به اندازه‌ی ۴ فاصله تورفتگی می‌یابد (در پنجره‌ی پوسته‌ی پایتون به اندازه‌ی یک تب). پس از برخی کلیدواژه‌ها (break، return و غیره) از تورفتگی خط بعدی کاسته می‌شود. در تورفتگی ابتدای خط، Backspace تا ۴ فاصله را در صورت وجود حذف می‌کند. Tab فاصله درج می‌کند (در پنجره‌ی پوسته‌ی پایتون، یک تب)، تعداد فاصله‌ها به Indent width بستگی دارد. در حال حاضر، تب‌ها به دلیل محدودیت‌های Tcl/Tk به ۴ فاصله محدود شده‌اند.

همچنین فرمان‌های تورفتگی/حذف تورفتگی ناحیه را در منوی قالب‌بندی ببینید.

جستجو و جایگزینی

هر انتخاب به یک هدف جستجو تبدیل می‌شود. با این حال، فقط انتخاب‌های درون یک خط کار می‌کنند، زیرا جستجوها فقط در سطرهایی انجام می‌شوند که نویسه‌ی خط جدید پایانی آن‌ها حذف شده است. اگر [x] Regular expression علامت‌گذاری شده باشد، هدف بر اساس ماژول re پایتون تفسیر می‌شود.

تکمیل‌ها

تکمیل‌ها در صورت درخواست و در دسترس بودن، برای نام ماژول‌ها، ویژگی‌های کلاس‌ها یا توابع، یا نام پرونده‌ها ارائه می‌شوند. هر روش درخواست، یک جعبه تکمیل با نام‌های موجود نمایش می‌دهد. (برای یک استثنا، تکمیل‌های Tab در زیر را ببینید.) در هر جعبه، می‌توانید نام در حال تکمیل و آیتم برجسته‌شده در جعبه را با تایپ و حذف نویسه‌ها؛ با فشردن کلیدهای Up، Down، PageUp، PageDown، Home و End؛ و با یک کلیک درون جعبه تغییر دهید. جعبه را با کلیدهای Escape، Enter و دو بار فشردن Tab یا با کلیک در بیرون جعبه ببندید. دو بار کلیک درون جعبه، انتخاب می‌کند و می‌بندد.

یکی از راه‌ها برای باز کردن یک کادر، وارد کردن یک نویسه‌ی کلیدی و صبر کردن برای یک بازه‌ی از پیش تعریف‌شده است. این بازه به‌طور پیش‌فرض ۲ ثانیه است؛ آن را در پنجره‌ی تنظیمات سفارشی کنید. (برای جلوگیری از پنجره‌های بازشوی خودکار، تأخیر را روی تعداد زیادی میلی‌ثانیه، مانند ۱۰۰۰۰۰۰۰۰ تنظیم کنید.) برای نام ماژول‌های ایمپورت‌شده یا ویژگی‌های کلاس یا تابع، '.' را وارد کنید. برای نام پرونده‌ها در پوشه‌ی ریشه، بلافاصله پس از علامت نقل‌قول آغازین، os.sep یا os.altsep را وارد کنید. (در ویندوز، می‌توانید ابتدا یک درایو را مشخص کنید.) با وارد کردن نام یک پوشه و یک جداکننده، وارد زیرپوشه‌ها شوید.

به‌جای صبر کردن، یا پس از بسته شدن یک جعبه، با گزینه‌ی Show Completions در منوی Edit بلافاصله یک جعبه‌ی تکمیل را باز کنید. کلید میان‌بر پیش‌فرض C-space است. اگر پیش از باز کردن جعبه، پیشوندی برای نام دلخواه وارد کنید، اولین مورد منطبق یا نزدیک‌ترین مورد به آن نمایش داده می‌شود. نتیجه همانند حالتی است که پیشوند را پس از نمایش جعبه وارد کنید. Show Completions پس از یک علامت نقل‌قول، نام پرونده‌ها را در پوشه‌ی جاری به‌جای پوشه‌ی ریشه تکمیل می‌کند.

فشردن Tab پس از یک پیشوند معمولاً همان اثر Show Completions را دارد. (بدون پیشوند، تورفتگی ایجاد می‌کند.) با این حال، اگر تنها یک مورد منطبق با پیشوند وجود داشته باشد، آن مورد بلافاصله بدون باز شدن جعبه‌ای، به متن ویرایشگر اضافه می‌شود.

فراخوانی «Show Completions»، یا فشردن Tab پس از یک پیشوند، خارج از یک رشته و بدون '.' پیشین، جعبه‌ای شامل کلیدواژه‌ها، نام‌های توکار و نام‌های موجود در سطح ماژول را باز می‌کند.

هنگام ویرایش کد در ویرایشگر (در مقابل پوسته)، با اجرای کد خود و خودداری از راه‌اندازی مجدد پوسته پس از آن، نام‌های در دسترس در سطح ماژول را افزایش دهید. این کار به‌ویژه پس از افزودن ایمپورت‌ها در بالای پرونده مفید است. این کار همچنین تکمیل‌های ممکن برای ویژگی‌ها را افزایش می‌دهد.

جعبه‌های تکمیل در ابتدا نام‌هایی را که با '_' شروع می‌شوند یا، برای ماژول‌ها، در '__all__' گنجانده نشده‌اند، نمایش نمی‌دهند. می‌توان با تایپ '_' پس از '.'، چه پیش از باز شدن جعبه و چه پس از آن، به نام‌های پنهان دسترسی پیدا کرد.

نکته‌های فراخوانی (Calltips)

هنگامی که شما ( را پس از نام یک تابع دسترسی‌پذیر تایپ می‌کنید، یک راهنمای فراخوانی (calltip) به‌طور خودکار نمایش داده می‌شود. یک عبارت نام تابع ممکن است شامل نقطه‌ها و اندیس‌ها باشد. یک راهنمای فراخوانی (calltip) تا زمانی که روی آن کلیک شود، مکان‌نما از بخش آرگومان‌ها خارج شود، یا ) تایپ شود، باقی می‌ماند. هر زمان که مکان‌نما در بخش آرگومان‌های یک تعریف قرار دارد، از منو Edit و «Show Call Tip» را انتخاب کنید یا میانبر آن را وارد کنید تا یک راهنمای فراخوانی (calltip) نمایش داده شود.

راهنمای فراخوانی شامل امضای تابع و رشته‌ی مستند آن تا نخستین خط خالی رشته‌ی مستند یا پنجمین خط غیرخالی آن است. (برخی توابع توکار امضای قابل‌دسترسی ندارند.) وجود یک «/» یا «*» در امضا نشان می‌دهد که آرگومان‌های پیش از آن یا پس از آن، به‌ترتیب فقط به‌صورت جایگاهی یا فقط با نام (کلیدواژه‌ای) ارسال می‌شوند. جزئیات ممکن است تغییر کنند.

در پوسته، توابع دسترسی‌پذیر به این بستگی دارند که چه ماژول‌هایی در فرایند کاربر ایمپورت شده‌اند، از جمله آن‌هایی که توسط خود Idle ایمپورت شده‌اند، و کدام تعریف‌ها اجرا شده‌اند؛ همه این‌ها از آخرین راه‌اندازی مجدد.

برای مثال، پوسته را مجدداً راه‌اندازی کنید و itertools.count( را وارد کنید. یک راهنمای فراخوانی (calltip) ظاهر می‌شود، زیرا Idle ماژول itertools را برای استفاده‌ی خودش به فرایند کاربر ایمپورت می‌کند. (ممکن است این تغییر کند.) turtle.write( را وارد کنید و هیچ چیزی ظاهر نمی‌شود. Idle خودش ماژول turtle را ایمپورت نمی‌کند. آیتم منو و میانبر نیز کاری انجام نمی‌دهند. import turtle را وارد کنید. پس از آن، turtle.write( یک راهنمای فراخوانی (calltip) نمایش خواهد داد.

در یک ویرایشگر، دستورات ایمپورت تا زمانی که پرونده را اجرا نکنید، هیچ اثری ندارند. ممکن است بخواهید پس از نوشتن دستورات ایمپورت، پس از افزودن تعاریف تابع، یا پس از باز کردن یک پرونده موجود، پرونده را اجرا کنید.

بلوک قالب‌بندی

Reformat Paragraph یک بلوک («پاراگراف») از کامنت‌های غیرخالی پیوسته با تورفتگی یکسان، یک بلوک مشابه از متن درون یک رشته چندخطی، یا زیرمجموعه‌ای انتخاب‌شده از هر یک را دوباره سطربندی می‌کند. در صورت نیاز، برای جدا کردن رشته از کد، یک خط خالی اضافه کنید. سطرهای ناقص در یک انتخاب به سطرهای کامل گسترش می‌یابند. سطرهای حاصل همان تورفتگی پیشین را دارند اما حداکثر طول کل آن‌ها N ستون (نویسه) است. مقدار پیش‌فرض N یعنی ۷۲ را در زبانه‌ی Window در تنظیمات IDLE تغییر دهید.

زمینه‌ی کد

در یک پنجره‌ی ویرایشگر که حاوی کد پایتون است، می‌توان وضعیت زمینه‌ی کد را تغییر داد تا یک بخش در بالای پنجره نمایش داده یا پنهان شود. هنگامی که این بخش نمایش داده می‌شود، سطرهای آغازین کد بلوکی، مانند سطرهایی که با کلیدواژه‌های class، def یا if آغاز می‌شوند و در غیر این صورت با پیمایش از دید خارج می‌شدند، ثابت نگه داشته می‌شوند. اندازه‌ی بخش به‌میزان لازم بزرگ و کوچک می‌شود تا همه‌ی سطح‌های فعلی زمینه، تا حداکثر تعداد سطرهای تعریف‌شده در پنجره‌ی محاوره‌ای Configure IDLE (که پیش‌فرض آن ۱۵ است) نمایش داده شوند. اگر هیچ خط زمینه‌ی فعلی وجود نداشته باشد و این قابلیت روشن شده باشد، یک خط خالی نمایش داده می‌شود. با کلیک بر روی یک خط در بخش زمینه، آن خط به بالای ویرایشگر منتقل می‌شود.

شما می‌توانید رنگ‌های متن و پس‌زمینه را برای فریم زمینه (context pane) در زبانه‌ی Highlights در گفت‌وگوی Configure IDLE پیکربندی کنید.

پنجره پوسته

در پوسته‌ی IDLE، دستورهای کامل را وارد، ویرایش و بازخوانی کنید. (بیشتر کنسول‌ها و پایانه‌ها فقط با یک خط فیزیکی در هر زمان کار می‌کنند).

برای ارسال یک دستور تک‌سطری جهت اجرا، در حالی که مکان‌نما در هر جای خط قرار دارد، Return را بفشارید. اگر سطری با بک‌اسلش (\) ادامه یابد، مکان‌نما باید روی آخرین خط فیزیکی باشد. برای ارسال یک دستور مرکب چندخطی، پس از دستور یک خط خالی وارد کنید.

هنگامی که کدی را در پوسته می‌چسبانید، تا زمانی که کلید Return را فشار ندهید، کامپایل نمی‌شود و ممکن است اجرا نیز نشود؛ همان‌طور که در بالا مشخص شد. می‌توانید ابتدا کد چسبانده‌شده را ویرایش کنید. اگر بیش از یک دستور را در پوسته بچسبانید، هنگامی که چند دستور به‌صورت یک دستور کامپایل شوند، نتیجه یک SyntaxError خواهد بود.

سطرهای حاوی RESTART به این معنا هستند که فرایند اجرای کاربر دوباره راه‌اندازی شده است. این اتفاق زمانی رخ می‌دهد که فرایند اجرای کاربر از کار افتاده باشد، کاربر از منوی Shell درخواست راه‌اندازی مجدد کند، یا کدی را در یک پنجره ویرایشگر اجرا کند.

قابلیت‌های ویرایش توصیف‌شده در زیربخش‌های پیشین، هنگام وارد کردن کد به‌صورت تعاملی کار می‌کنند. پنجره‌ی پوسته‌ی IDLE همچنین به موارد زیر پاسخ می‌دهد:

  • C-c تلاش می‌کند اجرای دستور را قطع کند (اما ممکن است شکست بخورد).

  • C-d پوسته را می‌بندد، اگر در اعلان >>> تایپ شود.

  • Alt-p و Alt-n (C-p و C-n در macOS) دستور واردشده‌ی قبلی یا بعدی را که با هر چیزی که از پیش‌تایپ‌شده است مطابقت دارد، در اعلان فعلی بازیابی می‌کنند.

  • Return در حالی که مکان‌نما روی هر دستور قبلی قرار دارد، آن دستور را به هر چیزی که از قبل در خط فرمان تایپ‌شده است اضافه می‌کند.

رنگ‌های متن

Idle به‌طور پیش‌فرض متن سیاه روی زمینه‌ی سفید دارد، اما متن‌هایی را که معنای خاصی دارند رنگ‌آمیزی می‌کند. برای پوسته، این موارد عبارت‌اند از خروجی پوسته، خطای پوسته، خروجی کاربر و خطای کاربر. برای کد پایتون، در اعلان پوسته یا در یک ویرایشگر، این موارد عبارت‌اند از کلیدواژه‌ها، نام کلاس‌ها و توابع توکار، نام‌های پس از class و def، رشته‌ها و کامنت‌ها. برای هر پنجره‌ی متنی، این موارد عبارت‌اند از مکان‌نما (در صورت وجود)، متن یافت‌شده (در صورت امکان) و متن انتخاب‌شده.

IDLE همچنین کلیدواژه‌های نرم match، case و _ را در دستورهای تطبیق الگو برجسته می‌کند. با این حال، این برجسته‌سازی کامل نیست و در برخی موارد نادر نادرست خواهد بود، از جمله برخی از _-ها در الگوهای case.

رنگ‌آمیزی متن در پس‌زمینه انجام می‌شود، بنابراین گاهی متن رنگ‌آمیزی‌نشده قابل مشاهده است. برای تغییر طرح‌واره رنگ، از زبانه‌ی Highlighting در محاوره‌ی Configure IDLE استفاده کنید. علامت‌گذاری سطرهای نقطه‌ی توقف اشکال‌زدا در ویرایشگر و متن در پنجره‌های بازشو و محاوره‌ها قابل پیکربندی توسط کاربر نیست.

راه‌اندازی و اجرای کد

هنگام راه‌اندازی با گزینه‌ی -s، IDLE پرونده اشاره‌شده توسط متغیرهای محیطی IDLESTARTUP یا PYTHONSTARTUP را اجرا می‌کند. IDLE ابتدا وجود IDLESTARTUP را بررسی می‌کند؛ اگر IDLESTARTUP وجود داشته باشد، پرونده اشاره‌شده اجرا می‌شود. اگر IDLESTARTUP وجود نداشته باشد، IDLE وجود PYTHONSTARTUP را بررسی می‌کند. پرونده‌های اشاره‌شده توسط این متغیرهای محیطی، محل‌های مناسبی برای ذخیره‌سازی توابعی هستند که به‌طور مکرر از پوسته‌ی IDLE استفاده می‌شوند، یا برای اجرای دستورهای ایمپورت جهت ایمپورت کردن ماژول‌های رایج.

علاوه بر این، Tk در صورت وجود، یک پرونده راه‌اندازی را نیز بارگذاری می‌کند. توجه داشته باشید که پرونده Tk بدون قید و شرط بارگذاری می‌شود. این پرونده اضافی .Idle.py است و در پوشه‌ی خانگی کاربر جستجو می‌شود. دستورات موجود در این پرونده در فضای نام Tk اجرا می‌شوند، بنابراین این پرونده برای ایمپورت کردن توابعی که از پوسته‌ی پایتون IDLE استفاده شوند، مفید نیست.

استفاده از خط فرمان

IDLE را می‌توان از خط فرمان با گزینه‌های مختلف فراخوانی کرد. سینتکس کلی به این صورت است:

python -m idlelib [options] [file ...]

گزینه‌های زیر در دسترس هستند:

-c <command>

فرمان پایتون مشخص‌شده را در پنجره پوسته اجرا کنید. برای مثال، -c "print('Hello, World!')" را وارد کنید. در ویندوز، علامت‌های نقل‌قول بیرونی باید همان‌طور که نشان داده شده است، علامت نقل‌قول دوتایی باشند.

-d

اشکال‌زدا را فعال کنید و پنجره‌ی پوسته را باز کنید.

-e

یک پنجره ویرایشگر باز کنید.

-h

چاپ یک پیام راهنما با ترکیب‌های مجاز گزینه‌ها و خروج.

-i

یک پنجره‌ی پوسته باز کنید.

-r <file>

پرونده مشخص‌شده را در پنجره پوسته اجرا کنید.

-s

پیش از باز کردن پنجره‌ی پوسته، پرونده راه‌اندازی را (همان‌طور که توسط متغیرهای محیطی IDLESTARTUP یا PYTHONSTARTUP تعریف‌شده است) اجرا کنید.

-t <title>

عنوان پنجره‌ی پوسته را تنظیم کنید.

-

ورودی استاندارد را در پنجره‌ی پوسته می‌خواند و اجرا می‌کند. این گزینه باید آخرین گزینه پیش از هر آرگومانی باشد.

اگر آرگومان‌هایی ارائه شده باشند:

  • اگر از -، -c یا -r استفاده شود، همه‌ی آرگومان‌ها در sys.argv[1:] قرار می‌گیرند و sys.argv[0] به‌ترتیب به ''، '-c' یا '-r' تنظیم می‌شود. هیچ پنجره‌ی ویرایشگری باز نمی‌شود، حتی اگر این حالت در گفت‌وگوی Options به‌عنوان پیش‌فرض تنظیم شده باشد.

  • در غیر این صورت، آرگومان‌ها به‌عنوان پرونده‌هایی که باید برای ویرایش باز شوند در نظر گرفته می‌شوند و sys.argv آرگومان‌های ارسال‌شده به خود IDLE را منعکس می‌کند.

شکست راه‌اندازی

IDLE برای ارتباط بین فرایند GUI IDLE و فرایند اجرای کد کاربر از یک سوکت استفاده می‌کند. هر زمان که پوسته شروع یا راه‌اندازی مجدد شود، باید یک اتصال برقرار شود. (دومی با یک خط جداکننده که عبارت 'RESTART' را دارد، مشخص می‌شود). اگر فرایند کاربر نتواند به فرایند GUI متصل شود، معمولاً یک جعبه خطای Tk همراه با پیام 'cannot connect' نمایش می‌دهد که کاربر را به اینجا ارجاع می‌دهد. سپس خارج می‌شود.

یک شکست اتصال مشخص در سیستم‌های یونیکسی ناشی از قوانین استتار (masquerading) با پیکربندی نادرست در جایی از تنظیمات شبکه‌ی سیستم است. هنگامی که IDLE از یک پایانه اجرا می‌شود، پیامی را خواهید دید که با ** Invalid host: آغاز می‌شود. مقدار معتبر 127.0.0.1 (idlelib.rpc.LOCALHOST) است. می‌توانید با tcpconnect -irv 127.0.0.1 6543 در یک پنجره‌ی پایانه و tcplisten <same args> در پنجره‌ای دیگر عیب‌یابی کنید.

یکی از دلایل رایج شکست، پرونده‌ای است که کاربر آن را نوشته و هم‌نام با یک ماژول کتابخانه استاندارد است، مانند random.py و tkinter.py. وقتی چنین پرونده‌ای در همان پوشه‌ی پرونده‌ای که قرار است اجرا شود قرار داشته باشد، IDLE نمی‌تواند پرونده کتابخانه استاندارد را ایمپورت کند. راه‌حل فعلی، تغییر نام پرونده کاربر است.

اگرچه کمتر از گذشته رایج است، اما یک برنامه ضدویروس یا فایروال ممکن است اتصال را متوقف کند. اگر نتوان برنامه را طوری تنظیم کرد که اتصال را مجاز کند، باید برای کار کردن IDLE آن را خاموش کرد. اجازه دادن به این اتصال داخلی بی‌خطر است، زیرا هیچ داده‌ای در پورت‌های خارجی قابل مشاهده نیست. یک مشکل مشابه، پیکربندی نادرست شبکه است که اتصال‌ها را مسدود می‌کند.

مسائل نصب پایتون گاهی باعث توقف IDLE می‌شوند: ممکن است نسخه‌های متعدد با هم تداخل داشته باشند، یا یک نصب واحد به دسترسی مدیر نیاز داشته باشد. اگر نتوانید تداخل را برطرف کنید، یا نتوانید یا نخواهید آن را به‌عنوان مدیر اجرا کنید، شاید آسان‌ترین کار حذف کامل پایتون و شروع دوباره باشد.

یک فرایند زامبی pythonw.exe می‌تواند مشکل‌ساز باشد. در ویندوز، از Task Manager برای بررسی وجود آن استفاده کنید و در صورت وجود، آن را متوقف کنید. گاهی اوقات ممکن است راه‌اندازی مجددی که بر اثر خرابی برنامه یا وقفه صفحه‌کلید (control-C) آغاز شده است، در اتصال شکست بخورد. بستن جعبه خطا یا استفاده از Restart Shell در منوی Shell ممکن است یک مشکل موقت را برطرف کند.

هنگامی که IDLE برای نخستین بار اجرا می‌شود، تلاش می‌کند پرونده‌های پیکربندی کاربر را در ~/.idlerc/ بخواند (~ پوشه‌ی خانگی کاربر است). اگر مشکلی وجود داشته باشد، باید پیام خطایی نمایش داده شود. جدا از اختلال‌های تصادفی دیسک، می‌توان با خودداری از ویرایش دستی پرونده‌ها از این مشکل پیشگیری کرد. در عوض، از پنجره‌ی پیکربندی، در بخش Options استفاده کنید. هنگامی که خطایی در یک پرونده پیکربندی کاربر وجود داشته باشد، بهترین راه‌حل ممکن است حذف آن و شروع دوباره از طریق پنجره‌ی تنظیمات باشد.

اگر IDLE بدون هیچ پیامی خارج شد و از یک کنسول اجرا نشده بود، سعی کنید آن را از یک کنسول یا پایانه اجرا کنید (python -m idlelib) و ببینید آیا این کار منجر به یک پیام خطا می‌شود.

در سیستم‌های مبتنی بر یونیکس با tcl/tk قدیمی‌تر از 8.6.11 (به About IDLE مراجعه کنید)، برخی نویسه‌ها در برخی فونت‌ها می‌توانند باعث خطای tk همراه با پیامی در پایانه شوند. این اتفاق ممکن است چه هنگام اجرای IDLE برای ویرایش پرونده‌ای حاوی چنین نویسه‌ای رخ دهد، و چه بعداً هنگام وارد کردن چنین نویسه‌ای. اگر نمی‌توانید tcl/tk را ارتقا دهید، IDLE را دوباره تنظیم کنید تا از فونتی استفاده کند که بهتر کار می‌کند.

اجرای کد کاربر

به‌جز استثناهای نادر، هدف این است که نتیجه‌ی اجرای کد پایتون با IDLE همان نتیجه‌ی اجرای همان کد به روش پیش‌فرض، یعنی مستقیماً با پایتون در کنسول سیستم در حالت متنی یا پنجره‌ی پایانه باشد. با این حال، رابط و عملکرد متفاوت گاهی بر نتایج قابل‌مشاهده اثر می‌گذارد. برای مثال، sys.modules با آیتم‌های بیشتری شروع می‌شود و threading.active_count() مقدار ۲ را به‌جای ۱ برمی‌گرداند.

به‌طور پیش‌فرض، IDLE کد کاربر را در یک فرایند جداگانه سیستم‌عامل اجرا می‌کند، نه در فرایند رابط کاربری که پوسته و ویرایشگر را اجرا می‌کند. در فرایند اجرا، sys.stdin، sys.stdout و sys.stderr با اشیایی جایگزین می‌شوند که ورودی را از پنجره پوسته دریافت می‌کنند و خروجی را به پنجره پوسته می‌فرستند. مقادیر اصلی ذخیره‌شده در sys.__stdin__، sys.__stdout__ و sys.__stderr__ دست‌نخورده باقی می‌مانند، اما ممکن است None باشند.

ارسال خروجی print از یک فرایند به یک ابزارک متنی در فرایند دیگر، کندتر از چاپ در یک پایانه‌ی سیستم در همان فرایند است. این موضوع بیشترین تأثیر را هنگام چاپ چند آرگومان دارد، زیرا رشته‌ی هر آرگومان، هر جداکننده و نویسه‌ی خط جدید به‌صورت جداگانه ارسال می‌شوند. برای توسعه، این موضوع معمولاً مشکلی نیست، اما اگر می‌خواهید در IDLE سریع‌تر چاپ کنید، هر آنچه را که می‌خواهید با هم نمایش داده شود، قالب‌بندی کنید و به هم متصل کنید و سپس یک رشته‌ی واحد را چاپ کنید. هم رشته‌های قالب‌بندی و هم str.join() می‌توانند به ترکیب فیلدها و سطرها کمک کنند.

جایگزین‌های جریان‌های استاندارد IDLE توسط زیرفرایندهای ایجادشده در فرایند اجرا به ارث برده نمی‌شوند، چه مستقیماً توسط کد کاربر و چه توسط ماژول‌هایی مانند multiprocessing. اگر چنین زیرفرایندی از input از sys.stdin یا از print یا write به sys.stdout یا sys.stderr استفاده کند، IDLE باید در یک پنجره خط فرمان راه‌اندازی شود. (در ویندوز، به‌جای pythonw یا pyw از python یا py استفاده کنید.) در این صورت، زیرفرایند ثانویه برای ورودی و خروجی به آن پنجره متصل خواهد شد.

اگر sys توسط کد کاربر بازنشانی شود، مانند استفاده از importlib.reload(sys)، تغییرات IDLE از بین می‌رود و ورودی از صفحه‌کلید و خروجی به صفحه به‌درستی کار نخواهند کرد.

هنگامی که پوسته فوکوس را دارد، صفحه‌کلید و صفحه‌نمایش را کنترل می‌کند. این حالت معمولاً شفاف است، اما توابعی که مستقیماً به صفحه‌کلید و صفحه‌نمایش دسترسی دارند کار نخواهند کرد. این توابع شامل توابع مختص سیستم هستند که تعیین می‌کنند آیا کلیدی فشرده شده است یا خیر، و در صورت فشرده شدن، کدام کلید بوده است.

کد IDLE در حال اجرا در فرایند اجرا، فریم‌هایی را به پشته فراخوانی اضافه می‌کند که در غیر این صورت وجود نمی‌داشتند. IDLE برای کاهش تأثیر فریم‌های اضافی پشته، دور sys.getrecursionlimit و sys.setrecursionlimit پوششی قرار می‌دهد.

هنگامی که کد کاربر، استثنای SystemExit را چه به‌صورت مستقیم و چه با فراخوانی sys.exit پرتاب می‌کند، IDLE به جای خروج، به خط فرمان پوسته بازمی‌گردد.

خروجی کاربر در پوسته

هنگامی که یک برنامه متنی را خروجی می‌کند، نتیجه توسط دستگاه خروجی متناظر تعیین می‌شود. هنگامی که IDLE کد کاربر را اجرا می‌کند، sys.stdout و sys.stderr به ناحیه‌ی نمایش پوسته‌ی IDLE متصل هستند. برخی از قابلیت‌های آن از ابزارک Text زیربنایی Tk به ارث رسیده‌اند. برخی دیگر افزوده‌های برنامه‌نویسی‌شده هستند. در موارد مهم، پوسته برای توسعه طراحی شده است، نه اجراهای عملیاتی.

برای مثال، پوسته هرگز خروجی را دور نمی‌اندازد. برنامه‌ای که خروجی نامحدودی به پوسته می‌فرستد، سرانجام حافظه را پر می‌کند و منجر به خطای حافظه می‌شود. در مقابل، برخی از پنجره‌های متنی سیستم فقط n خط پایانی خروجی را نگه می‌دارند. برای مثال، کنسول ویندوز ۱ تا ۹۹۹۹ خط را نگه می‌دارد که توسط کاربر قابل تنظیم است و پیش‌فرض آن ۳۰۰ خط است.

ابزارک Text در Tk، و بنابراین پوسته‌ی IDLE، نویسه‌ها (codepoints) موجود در زیرمجموعه‌ی BMP (صفحه‌ی چندزبانه‌ی پایه) از یونیکد را نمایش می‌دهد. اینکه کدام نویسه‌ها با یک گلیف مناسب و کدام با یک جعبه‌ی جایگزین نمایش داده می‌شوند، به سیستم‌عامل و قلم‌های نصب‌شده بستگی دارد. نویسه‌های Tab موجب می‌شوند متن بعدی پس از توقفگاه Tab بعدی آغاز شود. (این توقفگاه‌ها هر ۸ «نویسه» یک‌بار رخ می‌دهند). نویسه‌های خط جدید موجب می‌شوند متن بعدی در خط جدیدی نمایش داده شود. بسته به سیستم‌عامل و قلم، سایر نویسه‌های کنترلی نادیده گرفته می‌شوند یا به‌صورت یک فاصله، جعبه یا چیز دیگری نمایش داده می‌شوند. (حرکت دادن مکان‌نمای متن در میان چنین خروجی‌ای با کلیدهای جهت‌دار ممکن است رفتار فاصله‌گذاری غافلگیرکننده‌ای از خود نشان دهد.)

>>> s = 'a\tb\a<\x02><\r>\bc\nd'  # Enter 22 chars.
>>> len(s)
14
>>> s  # Display repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='')  # Display s as is.
# Result varies by OS and font.  Try it.

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

خروجی عادی و خروجی خطا معمولاً به‌طور جداگانه (در سطرهای جداگانه) از ورودی کد و از یکدیگر نگه داشته می‌شوند. هرکدام رنگ برجسته‌سازی متفاوتی دریافت می‌کنند.

در ردگیری‌های پشته‌ی SyntaxError، علامت معمول '^' که محل شناسایی خطا را نشان می‌دهد، با رنگ‌آمیزی متن همراه با برجسته‌سازی خطا جایگزین می‌شود. هنگامی که کد اجراشده از یک پرونده موجب استثناهای دیگر شود، می‌توانید روی یک خط از ردگیری پشته راست‌کلیک کنید تا به خط متناظر در ویرایشگر IDLE بروید. در صورت نیاز، پرونده باز خواهد شد.

پوسته یک امکان ویژه برای فشرده‌سازی سطرهای خروجی به یک برچسب «Squeezed text» دارد. این کار به‌طور خودکار برای خروجی با بیش از N خط انجام می‌شود (N به‌طور پیش‌فرض ۵۰ است). می‌توانید N را در بخش PyShell از صفحه‌ی General در پنجره‌ی Settings تغییر دهید. می‌توانید خروجی با سطرهای کمتر را با کلیک راست روی آن فشرده کنید. این می‌تواند برای سطرهایی که به اندازه‌ی کافی طولانی هستند و باعث کندی پیمایش می‌شوند، مفید باشد.

خروجی فشرده‌شده با دوبار کلیک روی برچسب، در همان جا باز می‌شود. همچنین می‌توان آن را با راست‌کلیک روی برچسب، به کلیپ‌بورد یا یک پنجره‌ی نمایش جداگانه ارسال کرد.

توسعه برنامه‌های tkinter

IDLE عمداً با پایتون استاندارد متفاوت است تا توسعه برنامه‌های tkinter را تسهیل کند. در پایتون استاندارد import tkinter as tk; root = tk.Tk() را وارد کنید؛ هیچ چیزی ظاهر نمی‌شود. همین دستور را در IDLE وارد کنید؛ یک پنجره‌ی tk ظاهر می‌شود. در پایتون استاندارد، برای دیدن پنجره باید root.update() را نیز وارد کنید. IDLE معادل آن را در پس‌زمینه انجام می‌دهد، حدود ۲۰ بار در ثانیه، یعنی تقریباً هر ۵۰ میلی‌ثانیه. سپس b = tk.Button(root, text='button'); b.pack() را وارد کنید. باز هم در پایتون استاندارد، تا زمانی که root.update() را وارد نکنید، هیچ تغییر قابل مشاهده‌ای رخ نمی‌دهد.

بیشتر برنامه‌های tkinter، root.mainloop() را اجرا می‌کنند، که معمولاً تا زمانی که برنامه‌ی tk تخریب نشده باشد بازگشت نمی‌کند. اگر برنامه با python -i یا از ویرایشگر IDLE اجرا شود، تا زمانی که mainloop() بازگشت نکند، اعلان پوسته‌ی >>> ظاهر نمی‌شود؛ در آن زمان دیگر چیزی برای تعامل باقی نمانده است.

هنگام اجرای یک برنامه tkinter از ویرایشگر IDLE، می‌توانید فراخوانی mainloop را کامنت کنید. در این صورت، بلافاصله اعلان پوسته را دریافت می‌کنید و می‌توانید با برنامه در حال اجرا تعامل کنید. فقط باید به‌خاطر داشته باشید که هنگام اجرا در پایتون استاندارد، فراخوانی mainloop را دوباره فعال کنید.

اجرای بدون زیرفرایند

به‌طور پیش‌فرض، IDLE کد کاربر را در یک زیرفرایند جداگانه از طریق یک سوکت اجرا می‌کند که از رابط loopback داخلی استفاده می‌کند. این اتصال از بیرون قابل مشاهده نیست و هیچ داده‌ای به اینترنت ارسال یا از آن دریافت نمی‌شود. اگر با این حال نرم‌افزار فایروال هشدار داد، می‌توانید آن را نادیده بگیرید.

اگر تلاش برای برقراری اتصال سوکت شکست بخورد، Idle به شما اطلاع خواهد داد. چنین شکست‌هایی گاهی گذرا هستند، اما اگر پایا باشند، ممکن است مشکل یا از فایروالی باشد که اتصال را مسدود کرده است یا از پیکربندی نادرست یک سیستم خاص. تا زمانی که مشکل برطرف نشده است، می‌توان Idle را با گزینه‌ی خط فرمان -n اجرا کرد.

اگر IDLE با گزینه خط فرمان -n راه‌اندازی شود، در یک فرایند واحد اجرا می‌شود و زیرفرایندی را که سرور اجرای پایتون از طریق RPC را اجرا می‌کند، ایجاد نمی‌کند. این حالت می‌تواند زمانی مفید باشد که پایتون نتواند زیرفرایند یا رابط سوکت RPC را در سکوی شما ایجاد کند. با این حال، در این حالت، کد کاربر از خود IDLE جدا نیست. همچنین، وقتی Run/Run Module (F5) انتخاب می‌شود، محیط دوباره راه‌اندازی نمی‌شود. اگر کد شما تغییر کرده است، برای اعمال تغییرات باید ماژول‌های متأثر را reload() کنید و هر آیتم مشخصی را دوباره ایمپورت کنید (مثلاً from foo import baz). به این دلایل، بهتر است تا حد امکان IDLE را با زیرفرایند پیش‌فرض اجرا کنید.

منسوخ شده از نسخه‌ی 3.4.

راهنما و تنظیمات

منابع راهنما

گزینه‌ی «IDLE Help» در منوی Help، یک نسخه‌ی html قالب‌بندی‌شده از فصل IDLE در مرجع کتابخانه (Library Reference) را نمایش می‌دهد. نتیجه، در یک پنجره‌ی متنی tkinter فقط‌خواندنی، نزدیک به چیزی است که در یک مرورگر وب می‌بینید. با چرخ ماوس، نوار پیمایش، یا نگه‌داشتن کلیدهای جهت‌نمای بالا و پایین، در متن پیمایش کنید. یا روی دکمه‌ی TOC (فهرست مطالب) کلیک کنید و یک عنوان بخش را در کادر بازشده انتخاب کنید.

گزینه «Python Docs» در منوی راهنما، منابع گسترده راهنما، از جمله آموزش‌ها را باز می‌کند که در docs.python.org/x.y در دسترس هستند، که در آن 'x.y' نسخه پایتون در حال اجرا است. اگر سیستم شما یک نسخه برون‌خط از مستندات داشته باشد (این ممکن است یک گزینه نصب باشد)، به‌جای آن، همان نسخه باز خواهد شد.

URLهای انتخاب‌شده را می‌توان در هر زمان با استفاده از زبانه General در پنجره Configure IDLE به منوی راهنما افزود یا از آن حذف کرد.

تنظیم ترجیحات

تنظیمات قلم، برجسته‌سازی، کلیدها و تنظیمات عمومی را می‌توان از طریق Configure IDLE در منوی Option تغییر داد. تنظیمات غیرپیش‌فرض کاربر در پوشه .idlerc در پوشه خانه کاربر ذخیره می‌شوند. مشکلات ناشی از پرونده‌های نامعتبر پیکربندی کاربر، با ویرایش یا حذف یک یا چند مورد از پرونده‌های موجود در .idlerc حل می‌شوند.

در زبانه‌ی Font، برای مشاهده‌ی اثر نوع قلم و اندازه بر نویسه‌های متعدد در زبان‌های مختلف، نمونه‌ی متنی را ببینید. نمونه را ویرایش کنید تا نویسه‌های دیگر مورد علاقه‌ی خود را اضافه کنید. برای انتخاب قلم‌های تک‌فاصله از نمونه استفاده کنید. اگر نویسه‌های خاصی در پوسته یا یک ویرایشگر مشکل دارند، آن‌ها را به ابتدای نمونه اضافه کنید و ابتدا تغییر اندازه و سپس تغییر قلم را امتحان کنید.

در زبانه‌ی Highlights and Keys، یک پوسته‌ی رنگی و مجموعه‌کلید توکار یا سفارشی انتخاب کنید. برای استفاده از یک پوسته‌ی رنگی یا مجموعه‌کلید توکار جدیدتر در IDLEهای قدیمی‌تر، آن را به‌عنوان یک پوسته یا مجموعه‌کلید سفارشی جدید ذخیره کنید تا برای IDLEهای قدیمی‌تر در دسترس باشد.

IDLE در macOS

در System Preferences: Dock، می‌توانید «Prefer tabs when opening documents» را روی «Always» تنظیم کنید. این تنظیم با چارچوب GUI tk/tkinter که IDLE از آن استفاده می‌کند سازگار نیست و چند ویژگی IDLE را از کار می‌اندازد.

افزونه‌ها

IDLE دارای یک قابلیت افزونه است. تنظیمات افزونه‌ها را می‌توان از طریق زبانه‌ی Extensions در محاوره‌ی تنظیمات تغییر داد. برای اطلاعات بیشتر، ابتدای config-extensions.def در پوشه‌ی idlelib را ببینید. تنها افزونه‌ی پیش‌فرض کنونی zzdummy است، یک نمونه که برای آزمایش نیز استفاده می‌شود.

idlelib --- پیاده‌سازی برنامه‌ی IDLE

کد منبع: Lib/idlelib


بسته Lib/idlelib برنامه IDLE را پیاده‌سازی می‌کند. برای نحوه استفاده از IDLE، ادامه این صفحه را ببینید.

پرونده‌های موجود در idlelib در idlelib/README.txt توصیف شده‌اند. برای دسترسی به این پرونده، یا آن را در idlelib باز کنید یا در منوی IDLE روی Help => About IDLE کلیک کنید. این پرونده همچنین آیتم‌های منوی IDLE را به کدی که آن آیتم را پیاده‌سازی می‌کند، نگاشت می‌کند. به جز پرونده‌های فهرست‌شده در «Startup»، کد idlelib به این معنا «خصوصی» است که تغییرات ویژگی‌ها می‌توانند به نسخه‌های قدیمی‌تر بک‌پورت شوند (به PEP 434 مراجعه کنید).