At kode din egen malingsapp er en klassisk øvelse, der vil lære dig meget om GUI-programmering.

Et simpelt maleværktøj er en af ​​de mest almindelige apps, du kan finde på de fleste computere. Det lader kunstneren lave fejl uden frygt, vælge en hvilken som helst farve med et klik på en knap og ændre størrelsen på deres penselstrøg med det samme. Du kan bruge det til at skabe brandlogoer, konceptualisere brugergrænseflader og annotere diagrammer.

Så hvordan kan du bygge en maleapplikation?

Tkinter- og pudemodulet

For at bygge en maleapplikation skal du bruge modulerne Tkinter og Pillow. Tkinter er en af ​​de top Python-rammer, du kan bruge til at tilpasse din GUI. Det er standard Python GUI-modulet til oprettelse af desktop-applikationer. Tkinter kommer med en række widgets som etiket, indgang, lærred og knap.

Pillow, en gaffel fra Python Imaging Library (PIL), er et billedbehandlingsmodul til Python. Med Pillow kan du åbne, ændre størrelse, vende og beskære billeder. Du kan konvertere filformater, byg en opskriftsfinderapplikation og hente tilfældige billeder.

instagram viewer

For at installere disse moduler skal du køre:

pip install tk pillow

Definer strukturen af ​​malingsapplikationen

Du kan finde hele kildekoden til dette projekt i denne GitHub-depot.

Begynd med at importere de nødvendige moduler. Definer en klasse, DrawApp. Indstil titlen, markørens farve og viskelæderfarven. Gør applikationen åben i fuld skærm. Ring til setup_widgets metode.

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

Definer en metode kaldet setup_widgets. Definer en etiket, der viser en overskrift. Indstil det overordnede element, den tekst, du vil vise, skrifttypestilen, baggrundsfarven og tekstfarven. Definer en ramme til farvepaletten. Indstil det overordnede element, den tekst, det skal vise, skrifttypestilene og grænsebredden. Indstil kanten til at have et ryglignende udseende og baggrundsfarven som hvid.

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)

Definer et sæt farver til farvepaletten på en liste. Gentag den og lav en knap til hver af dem. Indstil det overordnede element, baggrundsfarven, kantbredden og udseendet. Indstil også bredden og den kommando, hver knap skal køre, når der klikkes på den. Organiser alle elementerne med passende polstring og farverne i sæt af to.

 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

På samme måde definerer du en knap til viskelæderet, en til at rydde skærmen og en til at gemme billedet.

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

Definer en skala-widget for at øge eller formindske størrelsen på markøren eller viskelæderet. Indstil det overordnede element, orienteringen, området og længden i pixels. Definer et lærred, og indstil det overordnede element, baggrundsfarven og kantbredden. Indstil også relieffet til at have et rilleudseende sammen med dets højde og bredde.

Placer lærredet med passende koordinater og sæt ankeret mod nordvest (øverst til venstre). Bind den B1-Motion til malefunktionen. B1 henviser til venstre museknap holdt nede og Bevægelse henviser til bevægelsen. Samlet set bruger du den til at spore musebevægelser, mens du trykker på venstre knap.

 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)

Definer funktionerne i maleapplikationen

Definer en metode, maling. For at male vil appen løbende tegne minutovaler. Træk 2 fra x og y koordinater for musehændelsen for at bestemme det øverste venstre hjørne af ovalen. Tilføj 2 for at bestemme det nederste højre hjørne af ovalen. Lav en oval ved hjælp af disse afgrænsningskoordinater.

Indstil fyldfarven, konturfarven og bredden i henhold til markørens valg.

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

Definer tre funktioner, vælg_farve, viskelæder, og, clear_screen. Det vælg_farve metoden tager en farve og indstiller markøren i overensstemmelse hermed. Det viskelæder metode indstiller markøren til at have en viskelæderlignende effekt og får den til at tegne gennemsigtige linjer. Det clear_screen metoden sletter alle elementer på lærredet.

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

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

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

Definer en metode, lærredsfarve. Åbn en farvevælger med alle de forskellige farver. Returner en tupel, der indeholder farven RGB format og hexadecimalt format. Hvis brugeren vælger en farve, skal du bruge konfigurere metode til at indstille baggrundsfarven. Indstil farven på viskelæderet til den samme som baggrundsfarven.

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

Definer en metode, Gem som. Åbn en fildialogboks, der beder brugeren om at vælge filnavn og sti. Hvis brugeren vælger en sti, skal du bruge Pillow's ImageGrab klasse for at fange hele skærmen. Beskær billedet ved hjælp af de angivne koordinater for at få lærredsområdet. Eksperimenter med koordinaterne for at få fat i den ønskede del.

Gem dette resultat til den ønskede filsti. Vis en beskedboks, der informerer brugeren om, at programmet har gemt malingen som et billede. I tilfælde af fejl, viser den den tilsvarende fejl.

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

Opret en instans af Tk og DrawApp klasse. Det mainloop() funktion fortæller Python at køre Tkinter-hændelsesløkken og lytte efter hændelser, indtil du lukker vinduet.

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

Test af forskellige malefunktioner ved hjælp af Python

Når du kører maleprogrammet, vil du se en app med en farvepalet, fire knapper, en skyder og et lærred til at male på:

Klik på en hvilken som helst farve for at vælge den. Du kan derefter tegne på lærredet i den farve med venstre museknap:

Ved at klikke på Viskelæder knappen og trækker skyderen lodret op, vælger du viskelæderet og øger dets størrelse. Test viskelæderet ved at trække det over din tegning for at slette stregerne.

Når du klikker på Ryd skærm knappen, rydder programmet din tidligere tegning. Klik på Baggrund knappen for at åbne en farvepalet og bruge den til at ændre baggrundsfarven.

Ved at klikke på Gem tegning knappen, åbnes en fildialogboks. Vælg en sti og et navn til filen, og programmet gemmer den.

Forbedring af maleapplikationen

Du kan forbedre funktionaliteten af ​​maleapplikationen ved at tilføje en mulighed for at tilføje former. Du kan give en mulighed for at vælge børstetype og opacitet. Tilføj en mulighed for at tilføje tekst og klistermærker. Tilføj en mulighed for at fortryde, fortryde, ændre størrelse og vende billeder. Dette vil gøre tegneprocessen meget glattere.

For at skabe figurer kan du bruge metoder som create_rectangle, create_oval, create_line og create_polygon. For at tilføje tekst og billeder skal du bruge metoden create_text og create_image. For at ændre størrelse og vende billeder kan du bruge Pillows metoder til at ændre størrelse og transponere.