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 از این تابع برای پیکربندی ویژگی‌های مربوط به یک تگ استفاده می‌شود.

این ویژگی‌ها شامل:

  • justify شامل مقادیر center ،left ،right.
  • tabs عملکرد یکسانی با ویژگی tabs عنصر Text دارد.
  • underline برای زیر خط دار کردن متن استفاده می‌شود.
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()

خروجی کد بالا به صورت زیر است:
text-in-tkinter-01
حال به توضیح کد می‌پردازیم:
در خطوط 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 در این دو خط تنها یک اسم است که برای بازه انتخاب شده در نظر گرفته‌ایم و می‌تواند هر اسمی باشد.