Text
عنصر Text قابلیتهای پیشرفتهای را برای ویرایش متنهای چند خطی و نحوه قالب بندی آنها برای نمایش بر روی صفحه از قبیل تغییر رنگ و فونت آن، فراهم میآورد. همچنین در این عنصر میتوانید از ساختارهای مناسبی از قبیل tab و mark برای تعیین مکان بخشهای خاصی از متن و اعمال تغییرات به آن محدودهها، استفاده کنید. علاوه بر این میتوانید پنجرهها و تصاویر را درون متن تعبیه کنید. این امکان به خاطر این است که عنصر Text به گونهای طراحی شده که هم متن ساده و هم متن قالب بندی شده را نمایش میدهد. نحوه تعریف کردن این عنصر به صورت زیر است:
Text(master, option, ...)
master، بیانگر پنجره والدی است که Text به آن تعلق خواهد داشت و option، تنظیمات پرکاربرد برای Text میباشند که میتوانند به صورت زوجهای کلید/مقدار که با ویرگول از هم جدا میشوند، مورد استفاده قرار گیرند. در جدول زیر لیست این تنظیمات آمده است:
تنظیمات | شرح |
bg | رنگ پس زمینه عنصر را مشخص میکند. |
bd | پهنای خط دور عنصر را مشخص میکند (مقدار پیش فرض 2 پیکسل). |
cursor | شکل نشانگر ماوس، زمانی که بر روی این عنصر قرار میگیرد را مشخص میکند. |
exportselection | در حالت عادی، متنی که درون عنصر Text انتخاب میشود، به window manger انتقال مییابد. برای ممانعت از این عمل exportselection=0 قرار دهید. |
font | فونت پیش فرض برای متنی که به عنصر Text اضافه میشود را مشخص میکند. |
fg | رنگ استفاده شده برای متن درون عنصر Text را مشخص میکند. این گزینه رنگ پیش فرض است، شما میتوانید رنگ محدودههای برچسب دار را تغییر دهید. |
height | ارتفاع عنصر بر اساس تعداد خطوط را مشخص میکند. با توجه به اندازه فونت، ارتفاع کلی مشخص خواهد شد. |
highlightbackground | رنگ فوکوس، زمانی که عنصر دارای فوکوس نیست را مشخص میکند. |
highlightcolor | رنگ فوکوس زمانی که عنصر text دارای فوکوس است را مشخص میکند. |
highlightthickness | ضخامت نوار فوکوس که در اطراف عنصر نمایش داده میشود را مشخص میکند. مقدار پیش فرض 1 است. با قرار دادن highlightthickness=0 نوار فوکوس نمایش داده نخواهد شد. |
insertbackground | رنگ مکان نما را مشخص میکند. مقدار پیش فرض سیاه (black) است. |
insertborderwidth | اندازه کادر سه بعدی اطراف مکان نما را مشخص میکند. پیش فرض 0 است. |
insertofftime | مدت زمانی (بر حسب میلی ثانیه) که مکان نما در یک دوره چشمک زدن، خاموش میشود (دیده نمیشود) را مشخص میکند. مقدار پیش فرض 300 است. با صفر قرار دادن آن مکان نما چشمک نخواهد زد. |
insertontime | مدت زمانی (بر حسب میلی ثانیه) که مکان نما در یک دوره چشمک زدن، دیده میشود را مشخص میکند. مقدار پیش فرض 600 است. |
insertwidth | پهنای مکان نما بر حسب پیکسل را مشخص میکند (پیش فرض 2 پیکسل است). ارتفاع آن با توجه به بلندترین حرف درون خط مشخص میشود. |
padx | میزان فاصله داخلی اضافه شده به سمت چپ و راست متن را مشخص میکند (پیش فرض 1 پیکسل است). |
pady | میزان فاصله داخلی اضافه شده به بالا و پایین متن را مشخص میکند (پیش فرض 1 پیکسل است). |
relief | نوع کادر سه بعدی عنصر را مشخص میکند (پیش فرض SUNKEN است). |
selectbackground | رنگ پس زمینهای که پشت متن انتخاب شده، نمایش داده میشود را مشخص میکند. |
selectborderwidth | پهنای کادری که دور متن انتخاب شده، نمایش داده میشود را مشخص میکند. |
spacing1 | این گزینه میزان فاصله عمودی که بالای هر خط قرار میگیرد را مشخص میکند (فاصله قبل از هر پاراگراف). اگر خطی شکسته شده باشد (wrap)، این فضا تنها برای خط اول اعمال میشود. مقدار پیش فرض 0 است. |
spacing2 | این گزینه میزان فاصله عمودی که بین خطوط شکسته شده قرار میگیرد را مشخص میکند (فاصله میان خطوط پاراگراف). مقدار پیش فرض 0 است. |
spacing3 | این گزینه میزان فاصله عمودی که پایین هر خط قرار میگیرد را مشخص میکند (فاصله بعد از هر پاراگراف). اگر خطی شکسته شده باشد، این فضا تنها برای خط آخر اعمال میشود. مقدار پیش فرض 0 است. |
state | در حالت پیش فرض (state=NORMAL) عنصر Text به رخدادهای ماوس و کیبورد پاسخ میدهد. اگر state=DISABLED را قرار دهید، عنصر غیر فعال شده و به رخدادها پاسخ گو نخواهند بود. همچنین در این حالت محتوای آن به وسیله برنامه نیز قابل تغییر نخواهد بود. |
tabs | این گزینه کنترل میکند که کاراکترهای Tab متن را در چه موقعیتی قرار بدهند. |
width | پهنای عنصر بر اساس تعداد حروف را مشخص میکند. با توجه به اندازه فونت فعلی، مشخص میشود. |
wrap | این گزینه نحوه شکسته شدن خطوط طولانی را کنترل میکند. با قرار دادن wrap=WORD، خطی که بیش از اندازه طولانی است، پس از آخرین کلمهای که در کادر جا میشود، شکسته خواهد شد. در حالت پیش فرض، wrap=CHAR، خطوط طولانی از هر حرفی شکسته خواهند شد. |
xscrollcommand | برای افزودن اسکرول بار افقی به عنصر Text، این گزینه باید به تابع set اسکرول بار افقی نسبت داده شود. |
yscrollcommand | برای افزودن اسکرول بار عمودی به عنصر Text، این گزینه باید به تابع set اسکرول بار عمودی نسبت داده شود. |
عنصر Text دارای توابع زیر است:
تابع | شرح |
delete(startindex [,endindex]) | این تابع حرف یا یک دنبالهای از متن مشخص شده، به وسیله ورودیها آن را از عنصر حذف میکند. |
get(startindex [,endindex]) | این تابع یک حرف خاص یا دنبالهای از متن مشخص شده را بر میگرداند. |
index(index) | موقعیت مطلق index داده شده را بر میگرداند. |
insert(index [,string]…) | این تابع رشته string را در مکان index اضافه میکند. |
see(index) | این تابع اگر متن در مکان index قابل مشاهده باشد، true بر میگرداند. |
عناصر Text از سه ساختار کمکی پشتیبانی میکنند: Mark ،Tag ،Index.
Mark ها برای بوک مارک کردن موقعیت میان دو کاراکتر درون متن استفاده میشوند. توابع زیر برای کار با مارکها وجود دارند.
تابع | شرح |
index(mark) | شماره خط و ستون مارک مشخص شده را بر میگرداند. |
mark_gravity(mark [,gravity]) | نحوه چسبندگی (gravity) مارک ارسالی را بر میگرداند. اگر پارامتر دوم به تابع ارسال شود، چسبندگی مارک مورد نظر تنظیم میشود. (LEFT یا RIGHT) |
mark_names() | همه مارکهای درون عنصر را بر میگرداند. |
mark_set(mark, index) | مکان مشخص شده در موقعیت index را به عنوان مارک جدید با نام مشخص شده در قسمت mark در نظر میگیرد. اگر مارک مورد نظر وجود داشته باشد، تنها موقعیت آن به index تغییر میکند. |
mark_unset(mark) | مارک داده شده را از عنصر حذف میکند. |
Tag ها برای مرتبط نمودن نامها و محدودههای متن استفاده میشوند. به این وسیله تغییرات تنظیمات بخشهای خاصی از متن آسان میشود. همچنین تگها برای متصل کردن توابع به رخدادهای بخش خاصی از متن استفاده میشوند. در ادامه توابع موجود برای کار با تگها آورده شده است.
تابع | شرح |
tag_add(tagname, startindex [,endindex] …) | این تابع startindex داده شده یا بازه مشخص شده به وسیله startindex و endindex را با نام tagname به عنوان تگ برچسب می زند. |
tag_config | از این تابع برای پیکربندی ویژگیهای مربوط به یک تگ استفاده میشود.
این ویژگیها شامل:
|
tag_delete(tagname) | این تابع برای پاک کردن و حذف تگ مشخص شده استفاده میشود. |
tag_remove(tagname [,startindex[.endindex]] …) | پس از اجرای این تابع، تگ مشخص شده از محدوده معین شده پاک میشود. خود تگ از عنصر حذف نمیشود. |
به مثال زیر توجه کنید:
1: import tkinter 2: from tkinter import * 3: 4: window = tkinter.Tk() 5: window.geometry('300x200') 6: 7: text1 = Text(window, height=5, width=20, font=('Arial', 15), bd=2) 8: text2 = Text(window, height=5, width=20, font=('Arial', 15), bd=2) 9: 10: text1.insert(INSERT, "Python programming is fun!") 11: text2.insert(INSERT, "Python programming is fun!") 12: 13: text1.pack(expand=YES, fill=Y, side=TOP) 14: text2.pack(expand=YES, fill=Y, side=TOP) 15: 16: text2.tag_add("start", 1.7, 1.18) 17: text2.tag_config("start", foreground="red") 18: 19: window.mainloop()
خروجی کد بالا به صورت زیر است:
حال به توضیح کد میپردازیم:
در خطوط 7 و 8 کد بالا دو عنصر Text ایجاد کردهایم. در داخل پرانتزهای آنها، نوع فونت را Arial و اندازه آن را برابر 15 پیکسل قرار دادهایم. در نتیجه height = 2 به معنای این است که ارتفاع هر یک از عناصر Text برابر 30 پیکسل یعنی 2 برابر اندازه فونت باشد. در خطوط 10 و 11 از متد ()insert برای وارد کردن متن در داخل عناصر Text استفاده کردهایم. پارامتر اول این متد یعنی INSERT به معنای این است که متن به ابتدای عنصر TEXT اضافه شود. به جای این کلمه میتوان از 1.0 هم استفاده کرد.
در خطوط 13 و 14 عبارت fill=Y باعث میشود که اگر ارتفاع عنصر والد یعنی پنجره از ارتفاع دو عنصر Text بیشتر بود، این دو عنصر در راستای عمودی کشیده شده و کل فضای فرم را اشغال کنند. عبارت side=TOP باعث میشود که دو عنصر Text در راستای عمودی روی هم قرار بگیرند. در خط 16 یک بازه را انتخاب کردهایم. در داخل متد ()add_tag گفتهایم که از کاراکتر 7 تا 18 خط 1 را انتخاب کن. توجه کنید که کاراکتر 18 انتخاب نمیشود. در خط 19 هم گفتهایم که این کاراکترهای انخاب شده را به رنگ قرمز در بیاور. این کار را با استفاده از متد ()tag_config انجام دادهایم. کلمه start در این دو خط تنها یک اسم است که برای بازه انتخاب شده در نظر گرفتهایم و میتواند هر اسمی باشد.