Savas krāsošanas lietotnes kodēšana ir klasisks uzdevums, kas jums daudz iemācīs par GUI programmēšanu.
Vienkāršs krāsošanas rīks ir viena no visizplatītākajām lietotnēm, ko varat atrast lielākajā daļā datoru. Tas ļauj māksliniekam bez bailēm kļūdīties, izvēlēties jebkuru krāsu, nospiežot pogu, un uzreiz mainīt otas triepienu izmēru. Varat to izmantot, lai izveidotu zīmolu logotipus, konceptualizētu lietotāja saskarnes un anotētu diagrammas.
Tātad, kā jūs varat izveidot krāsas lietojumprogrammu?
Tkintera un spilvenu modulis
Lai izveidotu krāsas lietojumprogrammu, jums būs nepieciešami moduļi Tkinter un Pillow. Tkinter ir viens no populārākie Python ietvari, kurus varat izmantot, lai pielāgotu savu GUI. Tas ir standarta Python GUI modulis darbvirsmas lietojumprogrammu izveidei. Tkinter ir aprīkots ar dažādiem logrīkiem, piemēram, etiķeti, ierakstu, audeklu un pogu.
Pillow, Python Imaging Library (PIL) dakša, ir Python attēlu apstrādes modulis. Izmantojot Pillow, varat atvērt, mainīt izmērus, apgriezt un apgriezt attēlus. Jūs varat
konvertēt failu formātus, izveidojiet recepšu meklētāja lietojumprogrammu un ielādēt izlases attēlus.Lai instalētu šos moduļus, palaidiet:
pip install tk pillow
Definējiet krāsas lietojuma struktūru
Šeit varat atrast visu šī projekta avota kodu GitHub repozitorijs.
Sāciet ar nepieciešamo moduļu importēšanu. Definējiet klasi, DrawApp. Iestatiet nosaukumu, rādītāja krāsu un dzēšgumijas krāsu. Atveriet lietojumprogrammu pilnekrāna režīmā. Zvaniet uz setup_widgets metodi.
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()
Definējiet metodi, ko sauc setup_widgets. Definējiet etiķeti, kas parāda virsrakstu. Iestatiet vecākelementu, tekstu, ko vēlaties parādīt, fonta stilu, fona krāsu un teksta krāsu. Nosakiet rāmi krāsu paletei. Iestatiet vecākelementu, tekstu, kas tam jāparāda, fontu stilus un apmales platumu. Iestatiet apmali, lai tā izskatītos kā izciļņa, un fona krāsa ir balta.
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)
Sarakstā definējiet krāsu paletes krāsu kopu. Atkārtojiet to un izveidojiet pogu katram no tiem. Iestatiet vecāku elementu, fona krāsu, apmales platumu un izskatu. Iestatiet arī platumu un komandu, kas jāpalaiž katrai pogai, noklikšķinot. Sakārtojiet visus elementus ar atbilstošu polsterējumu un krāsām pa diviem komplektiem.
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
Līdzīgi definējiet dzēšgumijas pogu, vienu, lai notīrītu ekrānu, un otru, lai saglabātu attēlu.
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,
)
Definējiet mēroga logrīku, lai palielinātu vai samazinātu rādītāja vai dzēšgumijas izmēru. Iestatiet pamatelementu, orientāciju, diapazonu un garumu pikseļos. Definējiet audeklu un iestatiet vecākelementu, fona krāsu un apmales platumu. Iestatiet arī reljefu, lai tam būtu rievas izskats, kā arī tā augstums un platums.
Novietojiet audeklu ar atbilstošām koordinātām un iestatiet enkuru uz ziemeļrietumiem (augšējā kreisajā pusē). Saistīt B1-Kustība uz krāsošanas funkciju. B1 attiecas uz peles kreiso pogu, kas tiek turēta nospiesta un Kustība attiecas uz kustību. Kopumā jūs to izmantojat, lai izsekotu peles kustību, kamēr nospiežat kreiso pogu.
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)
Definējiet krāsas lietojumprogrammas funkcijas
Definējiet metodi, krāsu. Lai krāsotu, lietotne nepārtraukti zīmēs nelielus ovālus. Atņemiet 2 no x un y peles notikuma koordinātas, lai noteiktu ovāla augšējo kreiso stūri. Pievienojiet 2, lai noteiktu ovāla apakšējo labo stūri. Izveidojiet ovālu, izmantojot šīs ierobežojošās koordinātas.
Iestatiet aizpildījuma krāsu, kontūras krāsu un platumu atbilstoši rādītāja atlasei.
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(),
)
Definējiet trīs funkcijas, izvēlieties_krāsu, dzēšgumija, un, clear_screen. The izvēlieties_krāsu metode iegūst krāsu un attiecīgi iestata rādītāju. The dzēšgumija metode iestata rādītājam dzēšgumijas efektu un liek tai zīmēt caurspīdīgas līnijas. The clear_screen metode dzēš visus vienumus uz audekla.
defselect_color(self, col):
self.pointer = coldeferaser(self):
self.pointer = self.erase
defclear_screen(self):
self.canvas.delete("all")
Definējiet metodi, audekla_krāsa. Atveriet krāsu atlasītāju ar visām dažādajām krāsām. Atgrieziet virkni, kurā ir krāsa RGB formātā un heksadecimālajā formātā. Ja lietotājs izvēlas krāsu, izmantojiet konfigurēt metode fona krāsas iestatīšanai. Iestatiet dzēšgumijas krāsu uz fona krāsu.
defcanvas_color(self):
color = colorchooser.askcolor()
if color:
self.canvas.configure(background=color[1])
self.erase = color[1]
Definējiet metodi, saglabāt kā. Atveriet faila dialoglodziņu, lūdzot lietotājam izvēlēties faila nosaukumu un ceļu. Ja lietotājs izvēlas ceļu, izmantojiet Pillow's ImageGrab klasē, lai uzņemtu visu ekrānu. Apgrieziet attēlu, izmantojot norādītās koordinātas, lai iegūtu audekla apgabalu. Eksperimentējiet ar koordinātām, lai satvertu vēlamo daļu.
Saglabājiet šo rezultātu vajadzīgajā faila ceļā. Parādiet ziņojuma lodziņu, kas informē lietotāju, ka programma ir veiksmīgi saglabājusi krāsu kā attēlu. Jebkuras kļūdas gadījumā tiek parādīta atbilstošā kļūda.
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}")
Izveidojiet eksemplāru Tk un DrawApp klasē. The mainloop() funkcija liek Python palaist Tkinter notikumu cilpu un klausīties notikumus, līdz aizverat logu.
if __name__ == "__main__":
root = tk.Tk()
app = DrawApp(root)
root.mainloop()
Dažādu krāsošanas funkciju pārbaude, izmantojot Python
Palaižot krāsošanas programmu, tiks parādīta programma ar krāsu paleti, četrām pogām, vienu slīdni un audeklu, uz kura krāsot:
Noklikšķiniet uz jebkuras krāsas, lai to atlasītu. Pēc tam varat zīmēt uz audekla šajā krāsā ar peles kreiso pogu:
Noklikšķinot uz Dzēšgumija pogu un velkot slīdni vertikāli uz augšu, jūs atlasīsiet dzēšgumiju un palielināsiet tās izmēru. Pārbaudiet dzēšgumiju, velkot to pāri zīmējumam, lai izdzēstu svītras.
Kad noklikšķināt uz Notīrīt ekrānu pogu, programma notīra jūsu iepriekšējo zīmējumu. Noklikšķiniet uz Fons pogu, lai atvērtu krāsu paleti un izmantotu to, lai mainītu fona krāsu.
Noklikšķinot uz Saglabāt zīmējumu pogu, tiek atvērts faila dialoglodziņš. Izvēlieties faila ceļu un nosaukumu, un programma to saglabās.
Krāsas pielietojuma uzlabošana
Varat uzlabot krāsas lietojumprogrammas funkcionalitāti, pievienojot iespēju pievienot formas. Varat dot iespēju izvēlēties otas veidu un necaurredzamību. Pievienojiet iespēju pievienot tekstu un uzlīmes. Pievienojiet attēlu atsaukšanas, pārtaisīšanas, izmēru maiņas un apvēršanas opciju. Tas padarīs zīmēšanas procesu daudz gludāku.
Lai izveidotu formas, varat izmantot tādas metodes kā izveidot_taisnstūri, izveidot_ovālu, izveidot_līniju un izveidot_daudzstūri. Lai pievienotu tekstu un attēlus, izmantojiet metodes create_text un create_image. Lai mainītu attēlu izmērus un apvērstu, varat izmantot Pillow izmēra maiņas un transponēšanas metodes.