Кодирање сопствене апликације за бојење је класична вежба која ће вас научити много о ГУИ програмирању.

Једноставан алат за фарбање је једна од најчешћих апликација које можете пронаћи на већини рачунара. Омогућава уметнику да прави грешке без страха, бира било коју боју притиском на дугме и тренутно мења величину потеза четкице. Можете га користити за креирање логотипа брендова, концептуализацију корисничких интерфејса и означавање дијаграма.

Дакле, како можете да направите апликацију за бојење?

Ткинтер и модул јастука

Да бисте направили апликацију за бојење, биће вам потребни модули Ткинтер и Пиллов. Ткинтер је један од топ Питхон оквири које можете користити да прилагодите свој ГУИ. То је стандардни Питхон ГУИ модул за креирање десктоп апликација. Ткинтер долази са разним виџетима као што су етикета, унос, платно и дугме.

Пиллов, виљушка Питхон библиотеке слика (ПИЛ), је модул за обраду слика за Питхон. Помоћу јастука можете да отварате, мењате величину, окрећете и исецате слике. Можете

instagram viewer
претворити формате датотека, направите апликацију за проналажење рецепата и дохвати насумичне слике.

Да бисте инсталирали ове модуле, покрените:

pip install tk pillow

Дефинишите структуру апликације боје

Овде можете пронаћи цео изворни код за овај пројекат ГитХуб спремиште.

Започните увозом потребних модула. Дефинишите класу, ДравАпп. Подесите наслов, боју показивача и боју гумице. Отварање апликације преко целог екрана. Звати сетуп_видгетс методом.

import tkinter as tk
from tkinter.ttk import Scale
from tkinter import colorchooser, filedialog, messagebox
import PIL.ImageGrab as ImageGrab

classDrawApp:
def__init__(self, root):
self.root = root
self.root.title("Kids' Paint App")
self.root.attributes("-fullscreen", True)
self.pointer = "black"
self.erase = "white"
self.setup_widgets()

Дефинишите метод тзв сетуп_видгетс. Дефинишите ознаку која приказује наслов. Подесите надређени елемент, текст који желите да прикажете, стил фонта, боју позадине и боју текста. Дефинишите оквир за палету боја. Подесите родитељски елемент, текст који треба да прикаже, стилове фонта и ширину ивице. Подесите ивицу да има изглед попут гребена, а боју позадине као белу.

defsetup_widgets(self):
self.title_label = tk.Label(
self.root,
text="Kids' Paint App",
font=("Comic Sans MS", 30),
bg="lightblue",
fg="purple",
)
self.title_label.pack(fill=tk.X, pady=10)
self.color_frame = tk.LabelFrame(
self.root,
text="Colors",
font=("Comic Sans MS", 15),
bd=5,
relief=tk.RIDGE,
bg="white",
)
self.color_frame.place(x=10, y=80, width=90, height=180)

Дефинишите скуп боја за палету боја на листи. Пређите преко њега и направите дугме за сваку од њих. Подесите родитељски елемент, боју позадине, ширину ивице и изглед. Такође подесите ширину и команду коју свако дугме треба да покреће када се кликне. Организујте све елементе са одговарајућим подлогама и бојама у сетове од два.

 colors = [
"blue",
"red",
"green",
"orange",
"violet",
"black",
"yellow",
"purple",
"pink",
"gold",
"brown",
"indigo",
]
i, j = 0, 0
for color in colors:
tk.Button(
self.color_frame,
bg=color,
bd=2,
relief=tk.RIDGE,
width=3,
command=lambda col=color: self.select_color(col),
).grid(row=i, column=j, padx=2, pady=2)
i += 1
if i == 4:
i = 0
j = 1

Слично томе, дефинишите дугме за гумицу, једно за брисање екрана и једно за чување слике.

 self.eraser_btn = tk.Button(
self.root,
text="Eraser",
bd=4,
bg="white",
command=self.eraser,
width=9,
relief=tk.RIDGE,
font=("Comic Sans MS", 12),
)
self.eraser_btn.place(x=10, y=310)
self.clear_screen_btn = tk.Button(
self.root,
text="Clear Screen",
bd=4,
bg="white",
command=self.clear_screen,
width=12,
relief=tk.RIDGE,
font=("Comic Sans MS", 12),
)
self.clear_screen_btn.place(x=10, y=370)
self.save_as_btn = tk.Button(
self.root,
text="Save Drawing",
bd=4,
bg="white",
command=self.save_as,
width=12,
relief=tk.RIDGE,
font=("Comic Sans MS", 12),
)
self.save_as_btn.place(x=10, y=430)
self.bg_btn = tk.Button(
self.root,
text="Background",
bd=4,
bg="white",
command=self.canvas_color,
width=12,
relief=tk.RIDGE,
font=("Comic Sans MS", 12),
)
self.bg_btn.place(x=10, y=490)
self.pointer_frame = tk.LabelFrame(
self.root,
text="Size",
bd=5,
bg="white",
font=("Comic Sans MS", 15, "bold"),
relief=tk.RIDGE,
)

Дефинишите виџет за скалирање да бисте повећали или смањили величину показивача или гумице. Подесите родитељски елемент, оријентацију, опсег и дужину у пикселима. Дефинишите платно и поставите родитељски елемент, боју позадине и ширину ивице. Такође, подесите рељеф да има изглед жлеба заједно са својом висином и ширином.

Поставите платно са одговарајућим координатама и поставите сидро на северозапад (горе лево). Везите Б1-Мотион на функцију боје. Б1 се односи на леви тастер миша који се држи притиснут и Кретање односи се на покрет. Све у свему, користите га за праћење кретања миша док притискате лево дугме.

 self.pointer_frame.place(x=10, y=580, height=150, width=70)
self.pointer_size = Scale(
self.pointer_frame, orient=tk.VERTICAL, from_=48, to=1, length=120
)
self.pointer_size.set(1)
self.pointer_size.grid(row=0, column=1, padx=15)
self.canvas = tk.Canvas(
self.root, bg="white", bd=5, relief=tk.GROOVE, height=650, width=1300
)
self.canvas.place(x=160, y=120, anchor="nw")
self.canvas.bind("", self.paint)

Дефинишите карактеристике апликације Паинт

Дефинишите метод, боје. За сликање, апликација ће непрекидно цртати минутне овале. Одузми 2 од Икс и и координате догађаја миша за одређивање горњег левог угла овала. Додајте 2 да бисте одредили доњи десни угао овала. Направите овал користећи ове граничне координате.

Подесите боју испуне, боју контуре и ширину према избору показивача.

defpaint(self, event):
x1, y1 = (event.x - 2), (event.y - 2)
x2, y2 = (event.x + 2), (event.y + 2)
self.canvas.create_oval(
x1,
y1,
x2,
y2,
fill=self.pointer,
outline=self.pointer,
width=self.pointer_size.get(),
)

Дефинишите три функције, селецт_цолор, гумица за брисање, и, цлеар_сцреен. Тхе селецт_цолор метода узима боју и у складу са тим поставља показивач. Тхе гумица за брисање метода поставља показивач да има ефекат попут гумице и чини га да црта прозирне линије. Тхе цлеар_сцреен метода брише све ставке на платну.

defselect_color(self, col):
self.pointer = col

deferaser(self):
self.pointer = self.erase

defclear_screen(self):
self.canvas.delete("all")

Дефинишите метод, цанвас_цолор. Отворите бирач боја са свим различитим бојама. Вратите тупле који садржи боју РГБ формат и хексадецимални формат. Ако корисник одабере боју, користи конфигурисати метод за постављање боје позадине. Поставите боју гумице на исту као и боја позадине.

defcanvas_color(self):
color = colorchooser.askcolor()
if color:
self.canvas.configure(background=color[1])
self.erase = color[1]

Дефинишите метод, Сачувај као. Отворите дијалошки оквир датотеке тражећи од корисника да одабере име датотеке и путању. Ако корисник одабере путању, користи јастук ИмагеГраб класе да снимите цео екран. Изрежите слику користећи наведене координате да бисте добили регион платна. Експериментишите са координатама да бисте ухватили жељени део.

Сачувајте овај резултат на жељеној путањи датотеке. Прикажите оквир са поруком који обавештава корисника да је програм успешно сачувао боју као слику. У случају било какве грешке, приказује одговарајућу грешку.

defsave_as(self):
file_path = filedialog.asksaveasfilename(
defaultextension=".jpg", filetypes=[("Image files", "*.jpg")]
)
if file_path:
try:
y = 148
x = 200
y1 = 978
x1 = 1840
ImageGrab.grab().crop((x, y, x1, y1)).save(file_path)
messagebox.showinfo("Save Drawing", "Image file saved successfully!")
except Exception as e:
messagebox.showerror("Error", f"Failed to save the image file: {e}")

Креирајте инстанцу Тк анд тхе ДравАпп класа. Тхе маинлооп() функција каже Питхон-у да покрене Ткинтер петљу догађаја и ослушкује догађаје док не затворите прозор.

if __name__ == "__main__":
root = tk.Tk()
app = DrawApp(root)
root.mainloop()

Тестирање различитих карактеристика сликања помоћу Питхон-а

Када покренете програм за бојење, видећете апликацију са палетом боја, четири дугмета, једним клизачем и платном за сликање:

Кликните на било коју боју да бисте је изабрали. Затим можете да цртате на платну у тој боји левим тастером миша:

Кликом на Гумица за брисање дугме и повлачењем клизача вертикално нагоре, изабраћете гумицу и повећати њену величину. Тестирајте гумицу тако што ћете је превући преко цртежа да бисте избрисали потезе.

Када кликнете на Цлеар Сцреен дугме, програм брише ваш претходни цртеж. Кликните Позадина дугме да отворите палету боја и користите је за промену боје позадине.

Кликом на Сачувај цртеж дугме, отвара се дијалошки оквир датотеке. Изаберите путању и име за датотеку и програм ће је сачувати.

Побољшање апликације боје

Можете побољшати функционалност апликације боје додавањем опције за додавање облика. Можете дати опцију да изаберете тип четкице и непрозирност. Додајте опцију за додавање текста и налепница. Додајте опцију за поништавање, понављање, промену величине и окретање слика. Ово ће учинити процес цртања много лакшим.

Да бисте креирали облике, можете користити методе као што су цреате_рецтангле, цреате_овал, цреате_лине и цреате_полигон. Да бисте додали текст и слике, користите методе цреате_тект и цреате_имаге. Да бисте променили величину и преокренули слике, можете користити методе промене величине и транспоновања Пиллов-а.