Oma värvirakenduse kodeerimine on klassikaline harjutus, mis õpetab teile GUI programmeerimise kohta palju.

Lihtne värvimistööriist on üks levinumaid rakendusi, mida enamikus arvutites leiate. See võimaldab kunstnikul kartmata vigu teha, valida ühe nupuvajutusega mis tahes värvi ja muuta pintslitõmmete suurust koheselt. Saate seda kasutada brändilogode loomiseks, kasutajaliideste kontseptualiseerimiseks ja diagrammide märkimiseks.

Niisiis, kuidas saate värvirakendust luua?

Tkinteri ja padja moodul

Värvirakenduse loomiseks vajate mooduleid Tkinter ja Pillow. Tkinter on üks populaarseimad Pythoni raamistikud, mida saate oma GUI kohandamiseks kasutada. See on standardne Pythoni GUI moodul töölauarakenduste loomiseks. Tkinteriga on kaasas mitmesuguseid vidinaid, nagu silt, kirje, lõuend ja nupp.

Pillow, Python Imaging Library (PIL) kahvel, on Pythoni pilditöötlusmoodul. Pillow abil saate pilte avada, nende suurust muuta, ümber pöörata ja kärpida. Sa saad teisendada failivorminguid, koostage retseptiotsija rakendus ja hankige juhuslikke pilte.

instagram viewer

Nende moodulite installimiseks käivitage:

pip install tk pillow

Määratlege värvirakenduse struktuur

Selle projekti kogu lähtekoodi leiate siit GitHubi hoidla.

Alustage vajalike moodulite importimisega. Määratlege klass, DrawApp. Määrake pealkiri, kursori värv ja kustutuskummi värv. Avage rakendus täisekraanil. Helistage setup_widgets meetod.

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()

Määratlege meetod nimega setup_widgets. Määrake silt, mis kuvab pealkirja. Määrake põhielement, kuvatav tekst, fondi stiil, taustavärv ja teksti värv. Määrake värvipaleti raam. Määrake emaelement, tekst, mida see kuvatakse, fondi stiilid ja äärise laius. Määrake ääris nii, et see oleks rihvel ja taustavärv valge.

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)

Määratlege loendis värvipaleti jaoks värvide komplekt. Korrake seda ja looge igaühe jaoks nupp. Määrake põhielement, taustavärv, äärise laius ja välimus. Määrake ka laius ja käsk, mida iga nupp peaks klõpsamisel käivitama. Korraldage kõik elemendid sobiva polsterduse ja värvidega kahekaupa.

 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

Samamoodi määrake kustutuskummi nupp, üks ekraani tühjendamiseks ja teine ​​pildi salvestamiseks.

 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,
)

Kursori või kustutuskummi suuruse suurendamiseks või vähendamiseks määrake skaala vidin. Määrake põhielement, suund, vahemik ja pikkus pikslites. Määrake lõuend ja määrake põhielement, taustavärv ja äärise laius. Samuti määrake reljeef koos selle kõrguse ja laiusega soonega.

Asetage lõuend sobivate koordinaatidega ja seadke ankur loodesse (üleval vasakul). Siduge B1-Liikumine värvimisfunktsioonile. B1 viitab hiire vasaku nupu all hoidmisele ja Liikumine viitab liikumisele. Üldiselt kasutate seda hiire liikumise jälgimiseks, kui vajutate vasakut nuppu.

 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)

Määratlege värvirakenduse funktsioonid

Määratlege meetod, värvida. Värvimiseks joonistab rakendus pidevalt väikeseid ovaaale. Lahutage 2 x ja y hiire sündmuse koordinaadid, et määrata ovaali vasak ülanurk. Ovaali alumise parema nurga määramiseks lisage 2. Looge nende piiravate koordinaatide abil ovaal.

Määrake täitevärv, piirjoone värv ja laius vastavalt kursori valikule.

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(),
)

Määrake kolm funktsiooni, vali_värv, kustutuskummja, selge_ekraan. The vali_värv meetod võtab värvi ja määrab kursori vastavalt. The kustutuskumm meetod määrab kursori kustutuskummitaolise efekti ja paneb selle läbipaistvaid jooni joonistama. The selge_ekraan meetod kustutab kõik lõuendil olevad üksused.

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

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

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

Määratlege meetod, lõuendi_värv. Avage värvivalija kõigi erinevate värvidega. Tagastab värvi sisaldava korteeži RGB vormingus ja kuueteistkümnendvormingus. Kui kasutaja valib värvi, kasutage seadistada taustavärvi määramise meetod. Määrake kustutuskummi värviks taustavärviga sama.

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

Määratlege meetod, Salvesta kui. Avage faili dialoogiboks, milles palutakse kasutajal valida faili nimi ja tee. Kui kasutaja valib tee, kasutage Pillow's ImageGrab klassis, et jäädvustada kogu ekraan. Lõuendi piirkonna saamiseks kärpige pilti määratud koordinaatide abil. Soovitud osa haaramiseks katsetage koordinaatidega.

Salvestage see tulemus soovitud failiteele. Kuvab teatekasti, mis teavitab kasutajat, et programm on värvi edukalt pildina salvestanud. Mis tahes vea korral kuvab see vastava vea.

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}")

Loo eksemplar Tk ja DrawApp klass. The mainloop() funktsioon käsib Pythonil käivitada Tkinteri sündmusetsükli ja kuulata sündmusi, kuni sulgete akna.

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

Erinevate maalimisfunktsioonide testimine Pythoni abil

Kui käivitate värvimisprogrammi, näete värvipaleti, nelja nupu, ühe liuguri ja lõuendiga rakendust, millele maalida:

Selle valimiseks klõpsake mis tahes värvi. Seejärel saate seda värvi lõuendile joonistada hiire vasaku nupuga:

Klõpsates Kustutuskumm nuppu ja lohistades liugurit vertikaalselt üles, valite kustutuskummi ja suurendate selle suurust. Katsetage kustutuskummi, lohistades selle joonise peale, et kriipsud kustutada.

Kui klõpsate Tühjenda ekraan nuppu, kustutab programm teie eelmise joonise. Klõpsake nuppu Taust nuppu, et avada värvipalett ja kasutada seda taustavärvi muutmiseks.

Klõpsates Salvesta joonis nuppu, avaneb faili dialoogiboks. Valige faili tee ja nimi ning programm salvestab selle.

Värvirakenduse täiustamine

Saate täiustada värvirakenduse funktsionaalsust, lisades võimaluse kujundite lisamiseks. Saate anda võimaluse valida pintsli tüüp ja läbipaistmatus. Lisage teksti ja kleebiste lisamise võimalus. Lisage piltide tagasivõtmise, uuesti tegemise, suuruse muutmise ja ümberpööramise valik. See muudab joonistamise protsessi palju sujuvamaks.

Kujundite loomiseks saate kasutada selliseid meetodeid nagu loo_ristkülik, loo_ovaal, Loo_joon ja Loo_polügon. Teksti ja piltide lisamiseks kasutage meetodeid create_text ja create_image. Piltide suuruse muutmiseks ja ümberpööramiseks võite kasutada Pillow's suuruse muutmise ja ümberpaigutamise meetodeid.