با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت canvas
خب دوستان canvas برای کشیدن خطوط و اشکال هندسی وهمینطور استفاده از عکس ها هستش و حتی میشه از بقیه ابزار ها توی این ابزار استفاده کرد خب طریفه ی ساخت این ابزار به صورت زیر هست
MyCanvas= Cancas(root)
خب اوین چیزی که اموزش میدم کشیدن یک خط هست کد زیر رو ببینید تا توضیح بدم بهتون

#****************************CODE**********************************************
from tkinter import *

root=Tk()

canvas=Canvas(root)
canvas.pack()
canvas.config(width= 640,height=480)

line=canvas.create_line(160,360,480,120,fill='blue',width=5)
#****************************************************************************
حب دوستان با تابع creat_line که مال canvas هست یک خط ایجاد کردیم حواستون باشه عدد اول x و دومی y برای نقطه ی شروع خط هست و سومی و چهارمی به ترتیب x و y نقطه ی پایان هست و بعدش با fill رنگ خط رو مشخص کردیم و با width عرض خط رو مشخص کردیم اجرا کنید ببینید برنامه رو خب حالا برای تنظیم دوباره ی خصوصیات از تابع itemconfigure استفاده میکنیم به صورت زیر
canvas.itemconfigure(line,fill='green')
و برای گرفتن نقاط از تابع coords استفاده میکنیم مثلا کد زیر رو به کدتون اضافه کنید
print(canvas.coords(line))
برای تنظیم دوباره ی نقطه ها هم از تابع coords استفاده میکنیم
canvas.coords(line,0,0,320,240,640,0)

کد زیر رو ببینید
#*****************************CODE*******************************
from tkinter import *

root=Tk()

canvas=Canvas(root)
canvas.pack()
canvas.config(width= 640,height=480)

line=canvas.create_line(160,360,480,120,fill='blue',width=5)

canvas.itemconfigure(line,fill='green')

print(canvas.coords(line))

canvas.coords(line,0,0,320,240,640,0)

canvas.itemconfigure(line,smooth=True)
#***************************************************************
خب smooth رو برابر True گذاشتم یعنی خط رو به حالت منحنی در اوردم با تابع splinesteps هم میشه تعداد نقاطی که توی خط هست رو مشخص میکنیم هرچقدر این نقاط بره بالا خط حالت منحنی تر میشه و گوشه هاش کمتر میشه اول با یه عدد کوچیک تست کن و بعد با یه عدد بزرگ
canvas.itemconfigure(line, splinesteps=5)
الان من گذاشتمش 5 شما با 5 تست کنید و بعد 100 رو تست کنید برای پاک کردن هم از delete استفاده میکنیم
canvas.delete(line)
استفاده میکنیم برای ساخت مستطیل
rect = canvas.create_rectangle(160,120,480,320)
استفاده میکنیم و حواستون باشه اگر پراپرتی fill رو رن بهش بدیم داخل مستطیل پر میشه
canvas.itemconfigure(rect,fill='yellow')
برای ساخت بیضی
oval=canvas.create_oval(160,120,480,360)
برای ساخت یک قسمت از دایره که به صورت پیشفرض 90 درجه هست
arc=canvas.create_arc(160,1,120,480)
برای تنظیم درجه ی کمان
canvas.itemconfigure(act,start=0,extent=180)
خب ببینید start میگه زاویه ی کمانمون از چند درجه شروع بشه و extent میگه تا چند درجه بره و برای ساخت مثلث از تابع زیر استفاده میکنیم دقت کندی م به سه تا نقطه یعنی سه تا جفت عدد نیاز داریم
poly=canvas.create_polygon(160,360,320,480,480,360,fill='blue')

برای ساخت text باید کد زیر رو اضافه کنید
text=canvas.create_text(320,240,text='python',font=('courear',32,'bold'))
دقت کنید ما دوتا عدد( یک نقطه )  برای وسط text دادیم و به فونت دقت کنید
font=('courear',32,'bold')
برای تکست ورودی اول خانواده ی فونتومن هست و دومی سایزشه که اینت هست و سومی رو اگر bold بود بهش میدیم و رسیدیم به نقطه ی مهمش یعنی اضافه کردن عکس به canvas میگم مهم چون برای بازی سازی بیشتر از این استفاده میکنیم اول باید طبق معمول عکستون رو درست کنیم که قبلا توضیح دادم و بعد مثل زیر بهش اضافه میکنیم
image1 = canvas.create_image(320,240,image=logo)
برای جابجا کردن لایه های ایتم هایی که داریم از توابع lower و lift استفاده میکنیم که قبلا توضیح دادم و اینجا هم یه بار دیگه اشاره میکنم
canvas.lower(image1,text)
این تابع الان عکسمون رو میبریم زیر text برای lift هم همینطوره و فقط بجای این که ببره زیر میاره بالا برای اضافه کردن دیگر ابزار ها اول اونها رو ایجاد میکنیم و بعدا مثل زیر اونها رو اضافه میکنیم به canvas
button=Button(canvas,text='click')
canvas.create_window(360,20,window=button)
اون دوتا نقطه ای که دادیم مرکز ابزارمون رو مشخص میکنه و برای دسترسی و گروه کردن از tag استفاده میکنیم میتونیم برای هر ایتم یک تگ یا بیشتر بذاریم و هر تگ هم میتونه برای یک ایتم یا بیشتر باشه طریقه ی درست کردن تگ هم مثل زیر هست
canvas.itemconfigure(rect,tag=('shape'))
canvas.itemconfigure(oval,tag=('shape','round'))
خب الان برای rect یک تگ معین کردم و برای oval دوتا که یکیش همون تگ rect هست و حالا طریقه ی استفاده از تگ ها اینطوریه
canvas.itemconfigure('shape',fill='red')

حالا وقتی من خط بالا رو مینویسم تمام ایتم هایی که دارای تگ 'shape' هیتند رنگشون میشه قرمز و حالا اخرین تابع برای این که بفهمیم هر ایتم چه تگ یا تگهایی داره
canvas.gettags(oval)
بارها شنیدستی این بار هم شنو اگر خط بالا رو بنویسید اخر کدتون هیچ اتفاقی نمیافته اگر میخواید تگ ها براتون نمایش داده بشه باید از کد بالا استفاده کنید چون کد بالا تگ ها رو براتون بر میگردونه و چاپ نمیکنه اگر در حالت شل این کد رو بزنید علاوه بر برگردوندن براتون چاپ هم میکنه ولی اگر دارید کدتون رو توی یک فایل .py یا .pyw مینویسد دقت کنید مثلا برای دیدن کد بالا توی محیط شل باید اون رو print کنید اینطوری
print(canvas.gettags(oval))
این هم پایان canvas