from tkinter import *

from tkinter.filedialog import asksaveasfilename as saveAs

import PIL

from PIL import Image, ImageDraw

#from PIL import Image

from PIL import ImageTk

from tkinter.messagebox import *

from tkinter.ttk import Combobox

from tkinter import Tk, Button

from tkinter.colorchooser import askcolor

brush_size=3 color='black'

wc = 1000

hc = 650

bg='white'

#сохранение

def save():

global image_number

filename = f'image_{image_number}.png'

image1.save(filename)

image_number += 1

win2=Toplevel(win)

lab2=Label(win2,text='Файл успешно сохранён', width=30, height=10, font='Times 10', fg='Black', bg="#A8D8EA")

lab2.pack()

#кисть

def paint(e):

global lastx, lasty

line_width = choose_size_button.get()

x, y = e.x, e.y

cv.create_line((lastx, lasty, x, y), fill=color, width=line_width, capstyle=ROUND, smooth=TRUE, splinesteps=100)

draw.line((lastx, lasty, x, y), fill=color, width=line_width)

lastx, lasty = x, y

def paint_rec(e):

global lastx, lasty

line_width = choose_size_button.get()

x, y = e.x, e.y

cv.create_rectangle((lastx, lasty, x, y), fill=color, width=line_width, capstyle=ROUND, smooth=TRUE, splinesteps=100)

draw.rectangle((lastx, lasty, x, y), fill=color, width=line_width)

lastx, lasty = x, y

#активное окно

def activate_paint(e):

global lastx, lasty

cv.bind('', paint)

lastx, lasty = e.x, e.y

#цвет

def color_change():

global color

color=askcolor(color=color)[1]

def eraser(new_color):

global color

color=new_color

#о приложении

def about():

win1=Toplevel(win)

lab=Label(win1,text='''Это простейший графический редактор.

В нём можно выбрать цвет из палитры, стереть ненужные линии с помощью ластика, настроить размер кисти.'''

, width=90, height=25, font='Times 15', fg='Black', bg="#A8D8EA")

lab.pack()

#помощь

def helping():

win0=Toplevel(win)

lab0=Label(win0,text='''Ваш рисунок сохраняется в ту же папку, где находится программа.

Сохранение происходит в формате PNG.

После сохранения настоятельно советуем переименовать Ваш рисунок или переместить его в другую папку.

Удачи! '''

, font='Times 15', fg='Black', bg="#A8D8EA", width=90, height=25)

lab0.pack()

#выход из приложения

def close_win():

if askyesno('Exit','Вы хотите выйти?'):

win.destroy()

#окно

win = Tk()

win.title("Snake Paint")

#win.iconbitmap('icon.ico')

win.configure(bg='#AA96DA')

lastx, lasty = None, None

image_number = 0

#рабочее поле

cv = Canvas(win, width=wc, height=hc, bg=bg)

image1 = PIL.Image.new('RGB', (wc, hc), bg)

draw = ImageDraw.Draw(image1)

cv.bind('<1>', activate_paint)

cv.pack(expand=YES, fill=BOTH)

#меню

m=Menu(win)

win.config(menu=m)

fm=Menu(m)

m.add_cascade(label='Файл',menu=fm)

fm.add_command(label="Сохранить", command=save)

fm.add_command(label='Выход', command=close_win)

hm=Menu(m)

m.add_cascade(label='Помощь',menu=hm)

hm.add_command(label='Помощь',command=helping)

hm.add_command(label='О приложении',command=about)

#im = ImageTk.IPhotomage(file="рисуем_1.png")#Photo

#im1 = ImageTk.PhotoImage(file="рисуем_2.png")

im2=Menu(m)

im2 =ImageTk.PhotoImage

file=("палитра.png")

cv.grid(row=2, column=0, columnspan=100,

padx=5, pady=5,sticky=E+W+S+N)

#image = im2,

color_button = Button(win,

width=30,height=35, command = color_change)

color_button.grid(row=0, column=0)

#image = im,

eraser_button = Button(win, width=30,height=35,

command = lambda: eraser('white'))

eraser_button.grid(row=0, column=1)

#pencil_button = Button(win, image = im1,width=30,height=35, command = lambda: eraser('black'))

#pencil_button.grid(row=0, column=2)

choose_size_button = Scale(win, from_=1, to=100, orient=HORIZONTAL, width=15)

choose_size_button.grid(row=0, column=3)

win.mainloop()