Kódovanie vlastnej aplikácie na maľovanie je klasické cvičenie, ktoré vás naučí veľa o programovaní GUI.

Jednoduchý nástroj na maľovanie je jednou z najbežnejších aplikácií, ktoré nájdete na väčšine počítačov. Umožňuje umelcovi robiť chyby bez strachu, vybrať si akúkoľvek farbu kliknutím na tlačidlo a okamžite zmeniť veľkosť ťahov štetcom. Môžete ho použiť na vytváranie log značiek, konceptualizáciu používateľských rozhraní a anotovanie diagramov.

Ako teda môžete vytvoriť aplikáciu farby?

Modul Tkinter a vankúš

Na vytvorenie aplikácie farby budete potrebovať moduly Tkinter a Pillow. Tkinter je jedným z najlepšie rámce Pythonu, ktoré môžete použiť na prispôsobenie svojho GUI. Je to štandardný modul Python GUI na vytváranie desktopových aplikácií. Tkinter prichádza s množstvom miniaplikácií, ako je štítok, záznam, plátno a tlačidlo.

Pillow, vidlica Python Imaging Library (PIL), je modul na spracovanie obrázkov pre Python. Pomocou vankúša môžete obrázky otvárať, meniť ich veľkosť, prevracať a orezávať. Môžeš

instagram viewer
konvertovať formáty súborovvytvoriť aplikáciu na vyhľadávanie receptov a načítať náhodné obrázky.

Ak chcete nainštalovať tieto moduly, spustite:

pip install tk pillow

Definujte štruktúru aplikácie farby

Celý zdrojový kód tohto projektu nájdete v tomto úložisko GitHub.

Začnite importovaním požadovaných modulov. Definujte triedu, DrawApp. Nastavte názov, farbu ukazovateľa a farbu gumy. Spustite aplikáciu na celú obrazovku. Zavolajte na setup_widgets metóda.

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

Definujte metódu tzv setup_widgets. Definujte štítok, ktorý zobrazuje nadpis. Nastavte nadradený prvok, text, ktorý chcete zobraziť, štýl písma, farbu pozadia a farbu textu. Definujte rámec pre farebnú paletu. Nastavte nadradený prvok, text, ktorý sa má zobraziť, štýly písma a šírku okraja. Nastavte okraj tak, aby mal vzhľad podobný hrebeňu a farbu pozadia ako bielu.

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)

Definujte množinu farieb pre farebnú paletu v zozname. Iterujte cez ňu a vytvorte tlačidlo pre každú z nich. Nastavte nadradený prvok, farbu pozadia, šírku orámovania a vzhľad. Nastavte tiež šírku a príkaz, ktorý má každé tlačidlo spustiť po kliknutí. Usporiadajte všetky prvky s vhodnou výplňou a farbami v súpravách po dvoch.

 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

Podobne definujte tlačidlo pre gumu, jedno na vymazanie obrazovky a druhé na uloženie obrázka.

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

Definujte miniaplikáciu mierky na zväčšenie alebo zmenšenie veľkosti ukazovateľa alebo gumy. Nastavte nadradený prvok, orientáciu, rozsah a dĺžku v pixeloch. Definujte plátno a nastavte nadradený prvok, farbu pozadia a šírku okraja. Tiež nastavte reliéf tak, aby mal vzhľad drážky spolu s jeho výškou a šírkou.

Umiestnite plátno s príslušnými súradnicami a nastavte kotvu na severozápad (vľavo hore). Zviazať B1-Pohyb na funkciu lakovania. B1 označuje stlačené ľavé tlačidlo myši a Pohyb odkazuje na pohyb. Celkovo ho používate na sledovanie pohybu myši pri stlačení ľavého tlačidla.

 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)

Definujte vlastnosti aplikácie Maľovanie

Definujte metódu, farba. Ak chcete maľovať, aplikácia bude nepretržite kresliť minútové ovály. Odčítajte 2 od X a r súradnice udalosti myši na určenie ľavého horného rohu oválu. Pridajte 2, aby ste určili pravý dolný roh oválu. Vytvorte ovál pomocou týchto ohraničujúcich súradníc.

Nastavte farbu výplne, farbu obrysu a šírku podľa výberu ukazovateľa.

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

Definujte tri funkcie, vybrať_farbu, gumaa, clear_screen. The vybrať_farbu metóda vezme farbu a podľa toho nastaví ukazovateľ. The guma metóda nastaví ukazovateľ tak, aby mal efekt podobný gume, a umožní mu kresliť priehľadné čiary. The clear_screen metóda vymaže všetky položky na plátne.

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

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

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

Definujte metódu, farba_plátna. Otvorte výber farieb so všetkými rôznymi farbami. Vráťte n-ticu obsahujúcu farbu RGB formát a hexadecimálny formát. Ak si používateľ vyberie farbu, použite nakonfigurovať spôsob nastavenia farby pozadia. Nastavte farbu gumy na rovnakú farbu ako je farba pozadia.

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

Definujte metódu, uložiť ako. Otvorte dialógové okno súboru, v ktorom používateľ požiada, aby si vybral názov súboru a cestu. Ak si používateľ vyberie cestu, použite vankúš ImageGrab triedy na zachytenie celej obrazovky. Orezajte obrázok pomocou zadaných súradníc, aby ste získali oblasť plátna. Experimentujte so súradnicami, aby ste uchopili požadovanú časť.

Uložte tento výsledok do požadovanej cesty k súboru. Zobrazí okno s hlásením, ktoré informuje používateľa, že program úspešne uložil farbu ako obrázok. V prípade akejkoľvek chyby zobrazí zodpovedajúcu chybu.

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

Vytvorte inštanciu súboru Tk a DrawApp trieda. The mainloop() funkcia hovorí Pythonu, aby spustil slučku udalostí Tkinter a počúval udalosti, kým nezatvoríte okno.

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

Testovanie rôznych funkcií maľovania pomocou Pythonu

Keď spustíte program maľovania, uvidíte aplikáciu s farebnou paletou, štyrmi tlačidlami, jedným posúvačom a plátnom na maľovanie:

Kliknutím na ľubovoľnú farbu ju vyberiete. Potom môžete kresliť na plátno v tejto farbe pomocou ľavého tlačidla myši:

Po kliknutí na Guma a potiahnutím posúvača zvisle nahor vyberiete gumu a zväčšíte jej veľkosť. Otestujte gumu tak, že ju pretiahnete cez kresbu, aby ste vymazali ťahy.

Keď kliknete na Vymazať obrazovku tlačidlo, program vymaže váš predchádzajúci výkres. Kliknite na Pozadie otvorte paletu farieb a použite ju na zmenu farby pozadia.

Po kliknutí na Uložiť kresbu tlačidlo, otvorí sa dialógové okno súboru. Vyberte cestu a názov súboru a program ho uloží.

Vylepšenie aplikácie farby

Funkcionalitu aplikácie farby môžete vylepšiť pridaním možnosti pridávania tvarov. Môžete dať možnosť vybrať typ štetca a krytie. Pridajte možnosť pridať text a nálepky. Pridajte možnosť pre vrátenie späť, opätovné vykonanie, zmenu veľkosti a prevrátenie obrázkov. Vďaka tomu bude proces kreslenia oveľa plynulejší.

Na vytváranie tvarov môžete použiť metódy ako create_rectangle, create_oval, create_line a create_polygon. Ak chcete pridať text a obrázky, použite metódy create_text a create_image. Ak chcete zmeniť veľkosť a prevrátiť obrázky, môžete použiť metódy zmeny veľkosti a transpozície od spoločnosti Pillow.