Kodiranje lastne aplikacije za slikanje je klasična vaja, ki vas bo naučila veliko o programiranju GUI.
Preprosto orodje za slikanje je ena najpogostejših aplikacij, ki jih najdete v večini računalnikov. Umetniku omogoča, da se brez strahu zmoti, izbere poljubno barvo s klikom na gumb in takoj spremeni velikost potez s čopičem. Uporabite ga lahko za ustvarjanje logotipov blagovnih znamk, konceptualizacijo uporabniških vmesnikov in označevanje diagramov.
Torej, kako lahko ustvarite barvno aplikacijo?
Modul Tkinter in Pillow
Za izdelavo aplikacije za barvanje boste potrebovali modula Tkinter in Pillow. Tkinter je eden od top Ogrodja Python, ki jih lahko uporabite za prilagoditev vašega GUI. Je standardni modul Python GUI za ustvarjanje namiznih aplikacij. Tkinter ima različne pripomočke, kot so oznaka, vnos, platno in gumb.
Pillow, razcep Python Imaging Library (PIL), je modul za obdelavo slik za Python. Z blazino lahko odpirate, spreminjate velikost, obračate in obrežete slike. Ti lahko pretvoriti formate datotek, sestavite aplikacijo za iskanje receptov in pridobi naključne slike.
Če želite namestiti te module, zaženite:
pip install tk pillow
Določite strukturo nanosa barve
Tukaj lahko najdete celotno izvorno kodo za ta projekt Repozitorij GitHub.
Začnite z uvozom zahtevanih modulov. Določite razred, DrawApp. Nastavite naslov, barvo kazalca in barvo radirke. Naj se aplikacija odpre na celotnem zaslonu. Pokličite setup_widgets metoda.
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()
Določite imenovano metodo setup_widgets. Določite oznako, ki prikazuje naslov. Nastavite nadrejeni element, besedilo, ki ga želite prikazati, slog pisave, barvo ozadja in barvo besedila. Določite okvir za barvno paleto. Nastavite nadrejeni element, besedilo, ki naj se prikaže, sloge pisave in širino obrobe. Obrobo nastavite tako, da bo videti kot greben, barva ozadja pa bela.
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)
Določite nabor barv za barvno paleto na seznamu. Preglejte ga in ustvarite gumb za vsakega od njih. Nastavite nadrejeni element, barvo ozadja, širino obrobe in videz. Nastavite tudi širino in ukaz, ki naj se zažene vsak gumb, ko ga kliknete. Organizirajte vse elemente z ustreznim oblazinjenjem in barvami v nizih po dva.
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
Podobno določite gumb za radirko, enega za brisanje zaslona in enega za shranjevanje slike.
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,
)
Določite gradnik merila, da povečate ali zmanjšate velikost kazalca ali radirke. Nastavite nadrejeni element, orientacijo, obseg in dolžino v slikovnih pikah. Definirajte platno in nastavite nadrejeni element, barvo ozadja in širino obrobe. Prav tako nastavite relief tako, da ima videz utora skupaj z njegovo višino in širino.
Postavite platno z ustreznimi koordinatami in nastavite sidro na severozahod (zgoraj levo). Zaveži B1-Gibanje na barvno funkcijo. B1 se nanaša na pritisnjen levi gumb miške in Gibanje nanaša na gibanje. Na splošno ga uporabljate za sledenje premikanju miške, medtem ko pritiskate levi gumb.
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)
Določite funkcije aplikacije Paint
Določite metodo, barve. Za barvanje bo aplikacija nenehno risala majhne ovale. Odštejte 2 od x in l koordinate dogodka miške, da določite zgornji levi kot ovala. Dodajte 2, da določite spodnji desni kot ovala. Z uporabo teh mejnih koordinat ustvarite oval.
Nastavite barvo polnila, barvo obrisa in širino glede na izbiro kazalca.
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(),
)
Določite tri funkcije, izberite barvo, radirka, in, čisti_zaslon. The izberite barvo metoda sprejme barvo in ustrezno nastavi kazalec. The radirka nastavi kazalec tako, da ima učinek radirke in poskrbi za risanje prosojnih črt. The čisti_zaslon metoda izbriše vse elemente na platnu.
defselect_color(self, col):
self.pointer = coldeferaser(self):
self.pointer = self.erase
defclear_screen(self):
self.canvas.delete("all")
Določite metodo, barva_platna. Odprite izbirnik barv z vsemi različnimi barvami. Vrne zbirko, ki vsebuje barvo RGB formatu in šestnajstiškem formatu. Če uporabnik izbere barvo, uporabi konfigurirati način za nastavitev barve ozadja. Barvo radirke nastavite na enako barvo ozadja.
defcanvas_color(self):
color = colorchooser.askcolor()
if color:
self.canvas.configure(background=color[1])
self.erase = color[1]
Določite metodo, shrani kot. Odprite pogovorno okno datoteke, ki uporabnika prosi, da izbere ime datoteke in pot. Če uporabnik izbere pot, uporabi Pillow's ImageGrab razred za zajem celotnega zaslona. Obrežite sliko z uporabo navedenih koordinat, da pridobite območje platna. Eksperimentirajte s koordinatami, da zgrabite želeni del.
Shranite ta rezultat na želeno pot datoteke. Prikažite okno s sporočilom, ki uporabnika obvesti, da je program uspešno shranil barvo kot sliko. V primeru kakršne koli napake prikaže ustrezno napako.
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}")
Ustvarite primerek Tk in DrawApp razred. The glavna zanka() funkcija pove Pythonu, naj zažene zanko dogodkov Tkinter in posluša dogodke, dokler ne zaprete okna.
if __name__ == "__main__":
root = tk.Tk()
app = DrawApp(root)
root.mainloop()
Preizkušanje različnih funkcij slikanja z uporabo Pythona
Ko zaženete program za slikanje, boste videli aplikacijo z barvno paleto, štirimi gumbi, enim drsnikom in platnom za slikanje:
Kliknite katero koli barvo, da jo izberete. Nato lahko z levim gumbom miške rišete na platno v tej barvi:
Ob kliku na Radirka in povlečete drsnik navpično navzgor, boste izbrali radirko in povečali njeno velikost. Preizkusite radirko tako, da jo povlečete čez risbo, da izbrišete poteze.
Ko kliknete na Počisti zaslon program počisti vašo prejšnjo risbo. Kliknite na Ozadje gumb, da odprete barvno paleto in z njo spremenite barvo ozadja.
Ob kliku na Shrani risbo se odpre pogovorno okno datoteke. Izberite pot in ime za datoteko in program jo bo shranil.
Izboljšanje aplikacije Paint
Funkcionalnost aplikacije za barvanje lahko izboljšate tako, da dodate možnost dodajanja oblik. Izberete lahko vrsto čopiča in motnost. Dodajte možnost za dodajanje besedila in nalepk. Dodajte možnost za razveljavitev, ponovitev, spreminjanje velikosti in obračanje slik. Tako bo postopek risanja veliko bolj gladek.
Za ustvarjanje oblik lahko uporabite metode, kot so create_rectangle, create_oval, create_line in create_polygon. Če želite dodati besedilo in slike, uporabite metodi create_text in create_image. Za spreminjanje velikosti in obračanje slik lahko uporabite Pillowove metode spreminjanja velikosti in prestavljanja.