استفاده از canvas
در رابط گرافیکی tkinter پایتون شما توانایی ساخت طرح های گرافیکی دلخواه را نیز دارید و می توانید با استفاده از توابع مختلف اشکال متفاوتی را ایجاد نمایید که در زیر به بعضی از آن ها اشاره می کنیم. مواردی که در canvas قابل انجام هستند:
- arc - ساخت ربع دایره در صفحه قالب
- bitmap - درج تصاویر bitmap در قالب
- image - درج تصویر در قالب
- line - درج خط در قالب
- oval - درج دایره در قالب
- polygon -درج مختصات نقاط در قالب
- rectangle - درج مستطیل در قالب
- text - درج نوشته در قالب
- window - درج پنجره در قالب
مثال زیر یک مثال جامع از تمام روابطی است که می توان برای کانواس ایجاد کرد که در یک قاب به شما نشان داده خواهد شد، هر چند گه یم توانید با مطالعه بیشتر کاربرد های دیگری از آن ها را ایجاد کنید.
کد نمونه:
# importing tkinter modules
from tkinter import *
# building a window
window = Tk()
#adding window title
window.title("icc-aria gui app")
#initializing canvas area and making it ready
canvas_window = Canvas(window, width=500, height=320)
canvas_window.pack()
#drawing a simple line
canvas_window.create_line(10, 20, 10, 100)
#drawing a line with design
canvas_window.create_line(50, 20, 50, 100, fill="red", dash=(4, 4))
#creating rectangle
canvas_window.create_rectangle(100, 20, 200,100, fill="blue")
#creating eclipse with oval
canvas_window.create_oval(220,20, 340,100, fill="red")
#creating circle with oval
canvas_window.create_oval(350,20, 430,100, fill="yellow")
#adding polygon and multiple linesto create other shapes
canvas_window.create_polygon([10,120,10,180,80,180],outline='gray',fill='gray', width=2)
#adding image to the window with canvas
image_file = PhotoImage(file='icc-aria.png')
canvas_window.create_image(200, 160, image=image_file)
#adding text inside canvas area
canvas_window.create_text(370,160,fill="darkblue",font="Times 20 italic bold",text="www.icc-aria.ir")
#making arc in window
canvas_window.create_arc(0,200,90,300)
#creating the loop for the program
window.mainloop()
# importing tkinter modules
from tkinter import *
# inherianceing from Tk module and initializing the Tk class for creating object
class App(Tk):
def __init__(self):
Tk.__init__(self)
self.title("icc-aria gui app")
#initializing canvas area and making it ready
canvas_window = Canvas(self, width=500, height=320)
canvas_window.pack()
#drawing a simple line
canvas_window.create_line(10, 20, 10, 100)
#drawing a line with design
canvas_window.create_line(50, 20, 50, 100, fill="red", dash=(4, 4))
#creating rectangle
canvas_window.create_rectangle(100, 20, 200,100, fill="blue")
#creating eclipse with oval
canvas_window.create_oval(220,20, 340,100, fill="red")
#creating circle with oval
canvas_window.create_oval(350,20, 430,100, fill="yellow")
#adding polygon and multiple linesto create other shapes
canvas_window.create_polygon([10,120,10,180,80,180],outline='gray',fill='gray', width=2)
#adding image to the window with canvas
image_file = PhotoImage(file='icc-aria.png')
canvas_window.create_image(200, 160, image=image_file)
#adding text inside canvas area
canvas_window.create_text(370,160,fill="darkblue",font="Times 20 italic bold",text="www.icc-aria.ir")
#making arc in window
canvas_window.create_arc(0,200,90,300)
# creating the object of app for tk main window
if __name__ == "__main__":
app = App()
app.mainloop()
خروجی کد:
نکته: در بعضی شرایط ممکن است که طرح های دلخواهتان را نتوانید با استفاده از توابع از پیش تعیین شده بسازید و می بایستی به صورت دستی آن ها را ایجاد کنید مثل شکل مثلث که در تصویر بالا با استفاده از ایجاد خطوط پشت سر هم ایجاد شده.
سلام خدمت اساتید icc-aria
من یه قطعه کد نوشتم که داخل canvas میخوام دوتا عدد از کاربر بگیره و با توجه به نقاط شروع که دو تا نقطه ثابت هستن.یک rectangle رسم کنه.
همه اینا انجام میشه برنامه میاد بالا و اعداد که تو entry ها نوشته میشه بعدش که روی دکمه کلیک میکنم ارور میده:
unsupported operand type(s) for *: 'Entry' and 'int'
احساس میکنم میگه تایپ اینتیجر قبول نمیکنه یا بالعکس با casting هم تایپ رو عوض میکنم بازم قبول نمیکنه.
برنامه رو به چند مرحله بشکنید
1 - ساخت یک برنامه که اشکال مورد نیازتون رو با ورودی های ثابت انجام بده
2- ساخت برنامه ای که ورودی های لازم رو بگیریه
3- ورودی ها رو به برنامه اول متصل کنین (type ورودی ها رو با هم مطابقت بدید)
بهتره کمی بیشتر تو داکیومنت tkinter در رابطه با ورودی المانی که می خواید بگردید
عکس با فرمت png میشد گذاشت ولی با فرمت jpg ارور میداد.
به خاطر شیوه فشرده سازی هستش که توان این عملکرد رو نداره