-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.py
109 lines (91 loc) · 3.39 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from tkinter import Tk, Canvas, OptionMenu, StringVar
import tkinter
from tkinter import messagebox as mbox
import os
from tkinter import colorchooser
from tkinter.ttk import *
import PIL
from PIL import Image, ImageDraw
root = Tk()
root.geometry("1200x800")
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
cn = Canvas(root, bg='white', height=30, width=30)
canvas = Canvas(root, bg='white', height=screen_height, width=screen_width)
root.title('Paint')
hx = None
value_color = None
rgb = None
col = (255, 255, 255)
def draw(event):
value = variable.get()
if value and hx:
canvas.create_oval((event.x - int(value) // 2, event.y - int(value) // 2),
(event.x + int(value) // 2, event.y + int(value) // 2), fill=hx, outline=hx)
drawer.ellipse((event.x - int(value) // 2, event.y - int(value) // 2,
event.x + int(value) // 2, event.y + int(value) // 2), hx)
else:
mbox.showerror("Ошибка", "Выберите цвет для рисования!")
def dalate():
global image, drawer
pixels = image.load()
x, y = image.size
for i in range(x):
for j in range(y):
pixels[i, j] = (255, 255, 255)
canvas.config(bg='white')
canvas.delete("all")
def zal():
global image, col, drawer
if hx:
canvas.config(bg=hx)
im = PIL.Image.new('RGB', (screen_width, screen_height), color=hx)
pixels = image.load()
pixels2 = im.load()
x, y = im.size
for i in range(x):
for j in range(y):
r1, g1, b1 = pixels[i, j]
if (r1, g1, b1) != col:
pixels2[i, j] = int(r1), int(g1), int(b1)
image = im
drawer = ImageDraw.Draw(image)
del im
col = (int(rgb[0]), int(rgb[1]), int(rgb[2]))
else:
mbox.showerror("Ошибка", "Выберите цвет заливки!")
def save():
if not os.path.exists(f'{text.get()}.png'):
image.save(f'{text.get()}.png')
else:
mbox.showerror("Ошибка", "Файл с таким именем существует!")
def color():
global hx, rgb
(rgb, hx) = colorchooser.askcolor()
cn.config(bg=hx)
image = PIL.Image.new('RGB', (screen_width, screen_height), 'white')
drawer = ImageDraw.Draw(image)
variable = StringVar(root)
shr = OptionMenu(root, variable, 15, 1, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 100)
bytton = tkinter.ttk.Button(root, text='Выбрать цвет', command=color)
btn = tkinter.ttk.Button(root, text='Очистить всё', command=dalate)
btno = tkinter.ttk.Button(root, text='Заливка', command=zal)
lable = tkinter.ttk.Label(root, text='Размер кисти:')
lable_2 = tkinter.ttk.Label(root, text='Цвет кисти (заливки):')
lable_3 = tkinter.ttk.Label(root, text='Название файла:')
btn2 = tkinter.ttk.Button(root, text='Save', command=save)
text = tkinter.ttk.Entry()
canvas.bind("<B1-Motion>", draw)
canvas.bind('<Button-1>', draw)
bytton.grid(column=59, row=1)
lable_3.grid(column=1, row=0, pady=7)
text.grid(column=3, row=0)
btn2.grid(column=9, row=0)
btn.grid(column=19, row=0, padx=100)
btno.grid(column=29, row=0, padx=50)
lable.grid(column=39, row=0, padx=50)
shr.grid(column=39, row=1, padx=50)
lable_2.grid(column=59, row=0, padx=25)
canvas.place(x=0, y=70)
cn.grid(column=69, row=1)
root.mainloop()