Здравствуйте, мне нужно сделать свой простой графический редактор. Осталось сделать функции сохранения и открытия файлов, а еще связать эти функции с меню. Нужно сохранить рисунок с Canvas(формат не важен, jpeg или png и тд) и также открывать в Canvas картинки. Пытался найти решение сам, но ничего не нашел. ОС-Windows 10, Python 3.8
Python:
from tkinter import *
from tkinter.messagebox import *
canvas_width=700
canvas_height=500
brush_size=3
color='black'
def paint(event):
global brush_size
global color
x1=event.x-brush_size
x2=event.x+brush_size
y1=event.y-brush_size
y2=event.y+brush_size
w.create_oval(x1,y1,x2,y2, fill=color, outline=color)
def Okey():
global ent
a=ent.get()
a=str(a)
color_change(a)
def Okey1():
global ent0
a=ent0.get()
a=int(a)
brush_size_change(a)
def Okey2():
global ent3
a=ent3.get()
a=str(a)
w.config(bg=a)
def brush_size_change(new_size):
global brush_size
brush_size=new_size
def color_change(new_color):
global color
color=new_color
def close_win():
if askyesno('Exit','Вы хотите выйти?'):
root.destroy()
def about():
win=Toplevel(root)
lab=Label(win,text='Это простейший графический редактор. Рисовалка!)\n Здесь ты можешь рисовать')
lab.pack()
def helping():
win0=Toplevel(root)
lab0=Label(win0,text='Разноцветные квадратики выбирают цвет,\n а цифирки выбирают размер. \n Стереть все - убирает все')
lab0.pack()
def Ok():
global ent1
global ent2
a=ent1.get()
b=ent2.get()
a=int(a)
b=int(b)
w.config(width=a,height=b)
def size():
global ent1
global ent2
win=Toplevel(root)
ent1=Entry(win, width=20, bd=3)
ent2=Entry(win, width=20, bd=3)
but=Button(win,width=20,text='Ok', command=lambda:Ok())
ent1.pack()
ent2.pack()
but.pack()
def color_Newest ():
global ent
win=Toplevel(root)
ent=Entry(win, width=20, bd=3)
but=Button(win,width=20,text='Okey',command=lambda:Okey())
ent.pack()
but.pack()
def sizeBrush():
global ent0
win=Toplevel(root)
ent0=Entry(win, width=20, bd=3)
but=Button(win,width=20,text='Okey',command=lambda:Okey1())
ent0.pack()
but.pack()
def colorCanvas():
global ent3
win=Toplevel(root)
ent3=Entry(win,width=20,bd=3)
but=Button(win,width=20,text='Okey',command=lambda:Okey2())
ent3.pack()
but.pack()
root=Tk()
root.title('Paint на Питоне')
m=Menu(root)
root.config(menu=m)
fm=Menu(m)
m.add_cascade(label='File',menu=fm)
fm.add_command(label='Open') #нужна команда открытия файла
fm.add_command(label='Save') #нужна команда сохранения файла
fm.add_command(label='List color',command=colorCanvas)
fm.add_command(label='List Size', command=size)
fm.add_command(label='Brush color',command=color_Newest)
fm.add_command(label='Brush size',command=sizeBrush)
fm.add_command(label='Exit',command=close_win)
hm=Menu(m)
m.add_cascade(label='Help',menu=hm)
hm.add_command(label='Help',command=helping)
hm.add_command(label='About',command=about)
w=Canvas(root, width=canvas_width, height=canvas_height, bg='white')
w.bind('<B1-Motion>',paint)
red_but=Button(bg='red', width=2, command=lambda:color_change('red'))
orange_but=Button(bg='orange',width=2,command=lambda: color_change('orange'))
yellow_but=Button(bg='yellow',width=2,command=lambda: color_change('yellow'))
green_but=Button(bg='green',width=2,command=lambda: color_change('green'))
blue_but=Button(bg='blue',width=2,command=lambda: color_change('blue'))
violet_but=Button(bg='violet',width=2,command=lambda: color_change('violet'))
black_but=Button(bg='black',width=2,command=lambda: color_change('black'))
white_but=Button(bg='white',width=2,command=lambda: color_change('white'))
clear_but=Button(text='Удалить все!', width=10, command=lambda: w.delete('all'))
one_but=Button(text='1',width=2,command=lambda:brush_size_change(1))
two_but=Button(text='2',width=2,command=lambda:brush_size_change(2))
three_but=Button(text='3',width=2,command=lambda:brush_size_change(3))
four_but=Button(text='4',width=2,command=lambda:brush_size_change(4))
five_but=Button(text='5',width=2,command=lambda:brush_size_change(5))
six_but=Button(text='6',width=2,command=lambda:brush_size_change(6))
seven_but=Button(text='7',width=2,command=lambda:brush_size_change(7))
eight_but=Button(text='8',width=2,command=lambda:brush_size_change(8))
nine_but=Button(text='9',width=2,command=lambda:brush_size_change(9))
ten_but=Button(text='10',width=2,command=lambda:brush_size_change(10))
w.grid(row=2, column=0, columnspan=100, padx=5, pady=5,sticky=E+W+S+N)
w.columnconfigure(6, weight=1)
w.rowconfigure(2, weight=1)
red_but.grid(row=0, column=10)
orange_but.grid(row=0,column=11)
yellow_but.grid(row=0,column=12)
green_but.grid(row=0,column=13)
blue_but.grid(row=1,column=10)
violet_but.grid(row=1,column=11)
black_but.grid(row=1,column=12)
white_but.grid(row=1,column=13)
clear_but.grid(row=0,column=15)
one_but.grid(row=0,column=30)
two_but.grid(row=0,column=31)
three_but.grid(row=0,column=32)
four_but.grid(row=0,column=33)
five_but.grid(row=0,column=34)
six_but.grid(row=1,column=30)
seven_but.grid(row=1,column=31)
eight_but.grid(row=1,column=32)
nine_but.grid(row=1,column=33)
ten_but.grid(row=1,column=34)
root.mainloop()