با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت text
text=ttk.Text(root,width = 40 , height = 10)
برای تنظیم فاصله ها بین نوشته های باید از پراپرتی wrap استفاده کرد سه نوع هم داره یکی none که اهمیتی نمیده به حالت فاصله ی بین نوشته ها یکی char که این حالت پیشفرضه و یکی هم word که فاصله رو بین کلمه ها تنظیم میکنه و مثلا وقتی میرسه اخر خط و یک کلمه طولانی مینویسی کلمه رو میبره پایین مینویسه که کلمه شکسته نشه طریقه ی نتظیمشم اینطوریه
text.config(wrap='woed')
خب کد زیر رو اجرا کنید یه نگاه بهش بندازید

برای گرفتن متن از text از تابع get استفاده میکنیم فقط حواستون باشه دوتا ورودی میگیره یکی شروع یکی پایان نحوه ی نوشتنش هم توی استرینگه و به صورت line.char نوشته میشه یعنی عدد اول شماره خط و عدد دوم شماره کاراکتر اون خطه مثلا من توی برنامه پایین از کاراکتر دوم خط دوم شروع میکنم و تا خط سوم کاراکتر 6 ام میگیرم فقط حواستون باشه خط ها شماره هاشون از 1 شروع میشه ولی کاراکتر ها از صفر
#**********************CODE*******************************
from tkinter import*

root=Tk()

text = Text(root,width = 40 , height = 10)
text.pack()
text.config(wrap='word')

text.insert(END,"ok \n i'm a good boy  \n i want to tell you that\n tkinter is easy ")

print(text.get('2.1', '3.5'))


توی کد بالا فقط باید بگم که برای ورود متن داخلش از تابع insert استفاده کردم و این که بجای ورودی اولش نوشتم END شما میتونید 'end' هم بنویسید این یعنی اخر متنتون و میتونید بجای این END از همون الگویی که گفتم برای تابع get استفاده کنید حالا میخوام منتن خط اول رو بگیرم مینویسم
text.get ('1.0' , '1.end')
حالا میخوام یه متن وارد کنم اینو ببینید
text.insert('1.0 + 2 lines','inserted message')
text.insert('1.0 + 2 lines lineend','and\ninserted message')

اون بعلاوه 2 hines یعنی دوخط بعد و توی اون دومیمون lineend یعنی ته همون خط خب برای پاک کردن یه متن از text از تابع delete استفاده میشه من این رو مینویسم یه سری چیز های اضافه داره که توضیح میدم
text.delete('1.0' ,'3.0 lineend + 1 chars')
اون بعلاوه 1 chars یعنی یه کاراکتر بیشتر مثل خط هست یه تابعم داریم به اسم replace که متن رو تا اونجایی که میخوایم برامون پاک میکنه و مقداری که میدیم رو جایگزین میکنه مثلا اگر بخوایم خط اول رو حذف کنیم و بجاش یه متن دیگه بذاریم اینطوری مینویسیم
text.replace('1.0' , '1.0 lineend','This is replaced text')
برای غیر فعال کردن text باید پراپرتی state vو برابر disabled قرار بدیم اینطوری نمیشه توش چیزی نوشت فقط میشه ازش خوند و به صورت زیر این کار رو انجام میدیم
text.config(state='disabled')
وقتی text شما غیر فعاله خودتون از توی برنامه هم نمیتونید متنش رو تغییر بدید برای فعال کردن دوباره ی text باید state رو برابر normal قرار بدیم البته اینها رو قبلا براتون گفتم فقط میخواستم دوباره بگم که یاد اوری بشه حالا وارد بحث یکم حرفه ای تر text میشیم
میخوان در مورد تگ ها بهتون بگم از تگ برای مشخص کدت یک قسمت از متنمون استفاده میشه چون ممکنه ما بخوایم مثلا خط دوممون رو رنگ پس زمینش رو زرد کنیم اول براش تگ میذاریم و بعد خصوصیات تگمون رو که در واقع خصوصیات متن مونه که تگمون مشخصش میکنه رو تغییر میدیم و بکرگاندش رو زرد میکنیم من این کارهایی که گفتم رو الان در زیر انجام میدم تا ببینید
from tkinter import*

root=Tk()

text = Text(root,width = 40 , height = 10)
text.pack()
text.config(wrap='word')

text.insert(END,"ok \n i'm a good boy  \n i want to tell you that\n tkinter is easy ")

text.tag_add('my_tag','2.0','2.0 wordend')
text.tag_config('my_tag' , backgroun='yellow')

برای ساخت تگ از تابع tag_add استفاده میکنیم اولین ورودی اسم تگمونه و دوتای بعدی میگه تگمون از کجا شروع میشه و تا کجا میره و برای تنظیم کردن از تابع tag_config استفاده میکنم اولین ورودی اسم تگمونه بعد بقیش خصوصیاتیه که میخوای تنظیم کنی مثلا رنگ متن یا نوع فونت و اندازش و ...
برای پاک کردن یه قسمت از تابع tag_remove استفاده میکنیم و بهش میگیم از کجا تا کجا رو باید remove کنیم اینطوری
text.tag_remove('my_tag', '2.1' , ' 2.3')
خی همینطور که میبینید الان دیگه تگتون یک پارچه نیست برای این که بفهمید چه قسمت هایی الان جزو تگتونه از تابع range استفاده میکنیم
print(text.tag_range('my_tag'))
خب برای این که نام تگ هایی که داریم رو ببینیم باید پرینت کنیم تابع tag_names رو
print(text.tag_names())
اگر این رو پرینت کنید میبینید علاوه بر تگهایی که ما ایجاد کردیم یه تگ دیگه به اسم sel هم نشون داده میشه در واقع این تگ به متنی که شما توی تکست انتخاب کرده اید هست و هرموقع انتخابتون رو تغییر بدید اپدیت میشه (انتخاب منظورم اینه که دیدید یه تیکه متن رو انتخاب میکنیم یه محوطه ی ابی کمرنگ نشون میده دورش همونو میگم )
خب اگر تگ های یک مکان خاص رو بخوایم اینطوری مینویسیم
text.tag_names('1.0')
که قبلا در مورد ورودی این توضیح دادم که عدد اول شماره خطمونه که با یک شروه میشه عدد دوم شماره کاراکترمونه که با 0 شروع میشه حالا خودتونم یه تست کنید

خب برای استفاده از تگ برای اندیس اینطوری عمل میکنیم مثلا توی تابع ریپلیس
text.tag_replace('my_tag.first','my_tag.last' , 'somthing')

برای پاک کردن تگ از تابع tag_delete استفاده میکنیم و تنها ورودیش اسم تگمون هست
text.tag_delete('my_tag')
یه خصوصیت دیگه هم که هست خصوصیت mark هست که میتونید نام مارک هایی که هست رو با پرینت کردن mark_names بدست بیارید اگر بدون این که مارکی ایجاد کنید نام مارک ها رو پرینت کنید سه تا نام براتون پرینت میشه من دوتای اولیشو توضیح میدم
insert : اگر به تکسک دقت کرده باشید اون کرسر که داره چشمک میزنه رو میبینید این مکان اون رو نشون میده
current : این مکان موس رو میگه
ما میتونیم از مارک ها برای ایندکس دهی استفاده کنیم مثال زیر رو ببینید من توی تابع delete از مارک اینسرت استفاده میکنم
text.delete('insert','insert + 2 lines')
حواستون باشه مارک ها به مکان یک کاراکتر اشاره میکنند نه یه بازه از کاراکتر ها برای ساخت مارک خودمون هم از تابع set استفاده میکنیم
text.mark_set('my_mark','end')
میبینید چه راحته ؟ وقتی میخواید از یک مارک استفاده کنید ملا از اون موقعیت به بعد متن وارد کنید دوتا اپشن هست این که از سمت راست مارک شروع بشه یا از سمت چپ برا این تابع mark_gravity استفاده میشه بهصورت زیر
text.mark_gravity('my_mark','right')
برای پاک کردن یک مارک هم از تابع mark_unsrt استفاده میشه
text.mark_unset('my_mark')
خب اگر یه برنامه واژه پرداز دیده باشید مثلا مایکروسافت افیس ورد میبینید که توش میشه تصویر هم اضافه کرد اینجا هم همین کار رو میشه کرد باید اول یه ایمیج درست کنید (قبلا توضیح دادم ولی بازم میگم )
my_image=PhotoImage(file='logo.gif')
اگر قراره از عکسی استفاده کنید دوراه برا ادرس دهی هست یکی این که ادرس کامل عکس رو بدید اینجا یکی این که عکس رو بذارید کنار فایلتون ( منظورم فایت .py که برنامتون رو توش مینویسید هست ) و قط اسم عکس رو بنویسید دقت کنید اگر میخواید این عکس رو ایجاد کنید اول باید یه عکس به اسم logo با پسوند gif داشته باشید تا درست بشه وگرنه میتونید عکس خودتون رو بذارید کنارش و بجای logo.gif اسم عکس خودتون رو با پسوند بنویسید حالا عکسمون رو درست کردیم ولی وارد تکت نکردیم هنوز اونم اینطوریه
text.image_great('insert',image=my_image)
خب دوستان میشه تمام ابزار هایی که دارم رو توی تکست باکس هم اضافه کنیم اول ایجادشون میکنم و به عنواند خانواده تکست رو بهش میدیم و بعد با تابع window_create ابزار رو توی تکست اد میکنیم اینطوری
button = Button(text,text='Clic me')
text.window_create('insert',window = button)
میتونید بجای دکمه هر ابزار دیگه ای رو اد کنید دوباره برای اخرین بار تکرار میکنم اون 'insert' موقعیتی هست که میخوایم اضافه بشه و از الگوی line.char پیروی میکنه مثلا خط اول و کاراکتر 5 ام میشه '1.4'
این درسم تموم شد