Savo dažų programos kodavimas yra klasikinis pratimas, kuris daug išmokys apie GUI programavimą.

Paprastas dažymo įrankis yra viena iš labiausiai paplitusių programų, kurias galite rasti daugumoje kompiuterių. Tai leidžia menininkui be baimės klysti, vienu mygtuko paspaudimu pasirinkti bet kokią spalvą ir akimirksniu pakeisti teptuko potėpių dydį. Galite naudoti jį kurdami prekės ženklo logotipus, konceptualizuodami vartotojo sąsajas ir komentuodami diagramas.

Taigi, kaip sukurti dažų programą?

Tkinterio ir pagalvės modulis

Norėdami sukurti dažų programą, jums reikės „Tkinter“ ir „Pillow“ modulių. Tkinteris yra vienas iš populiariausios Python sistemos, kurias galite naudoti norėdami tinkinti savo GUI. Tai standartinis Python GUI modulis, skirtas darbalaukio programoms kurti. „Tkinter“ yra su įvairiais valdikliais, tokiais kaip etiketė, įrašas, drobė ir mygtukas.

„Pillow“, „Python Imaging Library“ (PIL) šakutė, yra „Python“ vaizdo apdorojimo modulis. Naudodami pagalvę galite atidaryti, keisti dydį, apversti ir apkarpyti vaizdus. Tu gali

instagram viewer
konvertuoti failų formatus, sukurkite receptų ieškiklio programą ir gauti atsitiktinius vaizdus.

Norėdami įdiegti šiuos modulius, paleiskite:

pip install tk pillow

Apibrėžkite dažų taikymo struktūrą

Čia galite rasti visą šio projekto šaltinio kodą GitHub saugykla.

Pradėkite importuodami reikiamus modulius. Apibrėžkite klasę, DrawApp. Nustatykite pavadinimą, žymeklio spalvą ir trintuko spalvą. Atidarykite programą visame ekrane. Paskambinkite į setup_widgets metodas.

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

Apibrėžkite metodą, vadinamą setup_widgets. Apibrėžkite etiketę, kurioje rodoma antraštė. Nustatykite pirminį elementą, norimą rodyti tekstą, šrifto stilių, fono spalvą ir teksto spalvą. Apibrėžkite spalvų paletės rėmelį. Nustatykite pirminį elementą, tekstą, kurį jis turi rodyti, šrifto stilius ir kraštinės plotį. Nustatykite, kad kraštinė atrodytų kaip ketera, o fono spalva – 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)

Sąraše apibrėžkite spalvų paletės spalvų rinkinį. Pakartokite jį ir sukurkite mygtuką kiekvienam iš jų. Nustatykite pagrindinį elementą, fono spalvą, kraštinės plotį ir išvaizdą. Taip pat nustatykite plotį ir komandą, kurią kiekvienas mygtukas turėtų paleisti spustelėjus. Sutvarkykite visus elementus su atitinkamu kamšalu ir spalvomis į rinkinius po du.

 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

Panašiai nustatykite trintuko mygtuką, vieną – ekranui išvalyti, o kitą – vaizdui išsaugoti.

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

Apibrėžkite mastelio valdiklį, kad padidintumėte arba sumažintumėte žymeklio arba trintuko dydį. Nustatykite pirminį elementą, orientaciją, diapazoną ir ilgį pikseliais. Apibrėžkite drobę ir nustatykite pirminį elementą, fono spalvą ir kraštinės plotį. Taip pat nustatykite, kad reljefas atrodytų griovelio pavidalu kartu su jo aukščiu ir pločiu.

Padėkite drobę atitinkamomis koordinatėmis ir nustatykite inkarą į šiaurės vakarus (viršuje kairėje). Surišti B1-Judesys į dažymo funkciją. B1 reiškia kairįjį pelės mygtuką, palaikytą ir Judėjimas nurodo judėjimą. Apskritai, jūs naudojate jį pelės judėjimui stebėti, kol paspausite kairįjį mygtuką.

 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)

Apibrėžkite dažų programos ypatybes

Apibrėžkite metodą, dažyti. Norėdami piešti, programa nuolat pieš nedidelius ovalus. Atimkite 2 iš x ir y pelės įvykio koordinates, kad nustatytų viršutinį kairįjį ovalo kampą. Pridėkite 2, kad nustatytumėte apatinį dešinįjį ovalo kampą. Sukurkite ovalą naudodami šias ribojančias koordinates.

Nustatykite užpildymo spalvą, kontūro spalvą ir plotį pagal žymeklio pasirinkimą.

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

Apibrėžkite tris funkcijas, pasirinkti_spalvą, trintukas, ir, Clear_screen. The pasirinkti_spalvą metodas paima spalvą ir atitinkamai nustato žymeklį. The trintukas metodas nustato, kad žymeklis turėtų trintuko efektą ir nubrėžia skaidrias linijas. The Clear_screen metodas ištrina visus drobėje esančius elementus.

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

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

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

Apibrėžkite metodą, drobės_spalva. Atidarykite spalvų parinkiklį su visomis skirtingomis spalvomis. Grąžinkite eilutę, kurioje yra spalva RGB formatu ir šešioliktainiu formatu. Jei vartotojas pasirenka spalvą, naudokite konfigūruoti būdas nustatyti fono spalvą. Nustatykite trintuko spalvą į tokią pat kaip ir fono spalvą.

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

Apibrėžkite metodą, Išsaugoti kaip. Atidarykite failo dialogo langą, kuriame prašoma vartotojo pasirinkti failo pavadinimą ir kelią. Jei vartotojas pasirenka kelią, naudokite pagalvę ImageGrab klasėje, kad užfiksuotumėte visą ekraną. Apkarpykite vaizdą naudodami nurodytas koordinates, kad gautumėte drobės sritį. Eksperimentuokite su koordinatėmis, kad paimtumėte norimą dalį.

Išsaugokite šį rezultatą norimame failo kelyje. Rodyti pranešimų laukelį, informuojantį vartotoją, kad programa sėkmingai išsaugojo dažus kaip vaizdą. Įvykus bet kokiai klaidai, rodoma atitinkama klaida.

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

Sukurkite egzempliorių Tk ir DrawApp klasė. The mainloop () funkcija liepia Python paleisti Tkinter įvykių kilpą ir klausytis įvykių, kol uždarysite langą.

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

Įvairių tapybos funkcijų išbandymas naudojant Python

Kai paleisite dažymo programą, pamatysite programą su spalvų palete, keturiais mygtukais, vienu slankikliu ir drobe, ant kurios galėsite piešti:

Spustelėkite bet kurią spalvą, kad ją pasirinktumėte. Tada galite piešti ant drobės ta spalva kairiuoju pelės mygtuku:

Spustelėjus Trintukas mygtuką ir vilkite slankiklį vertikaliai aukštyn, pasirinksite trintuką ir padidinsite jo dydį. Išbandykite trintuką, vilkdami jį ant piešinio, kad ištrintumėte brūkšnius.

Kai paspausite Išvalyti ekraną mygtuką, programa išvalo ankstesnį piešinį. Spustelėkite Fonas mygtuką, kad atidarytumėte spalvų paletę ir pakeistumėte fono spalvą.

Spustelėjus Išsaugoti piešinį mygtuką, atidaromas failo dialogo langas. Pasirinkite failo kelią ir pavadinimą, o programa jį išsaugos.

Dažų taikymo tobulinimas

Galite patobulinti dažų programos funkcionalumą pridėdami formų pridėjimo parinktį. Galite pasirinkti šepetėlio tipą ir neskaidrumą. Pridėkite teksto ir lipdukų pridėjimo parinktį. Pridėkite parinktį anuliuoti, perdaryti, keisti dydį ir apversti vaizdus. Taip piešimo procesas taps daug sklandesnis.

Norėdami sukurti figūras, galite naudoti tokius metodus kaip sukurti_stačiakampį, sukurti_ovalų, sukurti_liniją ir sukurti_daugiakampį. Norėdami pridėti teksto ir vaizdų, naudokite "create_text" ir "create_image" metodus. Norėdami pakeisti vaizdų dydį ir apversti, galite naudoti pagalvės dydžio keitimo ir perkėlimo metodus.