Oman maalisovelluksen koodaus on klassinen harjoitus, joka opettaa sinulle paljon GUI-ohjelmoinnista.
Yksinkertainen maalaustyökalu on yksi yleisimmistä sovelluksista, joita voit löytää useimmista tietokoneista. Sen avulla taiteilija voi tehdä virheitä ilman pelkoa, valita minkä tahansa värin napin painalluksella ja muuttaa siveltimen vetojen kokoa välittömästi. Voit käyttää sitä tuotemerkkilogojen luomiseen, käyttöliittymien käsitteelliseen muotoilemiseen ja kaavioiden merkitsemiseen.
Joten kuinka voit rakentaa maalisovelluksen?
Tkinter- ja tyynymoduuli
Maalisovelluksen rakentamiseen tarvitset Tkinter- ja Pillow-moduulit. Tkinter on yksi niistä suosituimmat Python-kehykset, joita voit käyttää graafisen käyttöliittymän mukauttamiseen. Se on vakio Python GUI -moduuli työpöytäsovellusten luomiseen. Tkinterin mukana tulee erilaisia widgetejä, kuten tarra, merkintä, kangas ja painike.
Pillow, Python Imaging Libraryn (PIL) haarukka, on Pythonin kuvankäsittelymoduuli. Pillow-sovelluksella voit avata, muuttaa niiden kokoa, kääntää ja rajata kuvia. Sinä pystyt
muuntaa tiedostomuotoja, rakentaa reseptihakusovellus ja hakea satunnaisia kuvia.Asenna nämä moduulit suorittamalla:
pip install tk pillow
Määritä maalisovelluksen rakenne
Löydät tämän projektin koko lähdekoodin tästä GitHub-arkisto.
Aloita tuomalla tarvittavat moduulit. Määritä luokka, DrawApp. Aseta otsikko, osoittimen väri ja pyyhekumiväri. Avaa sovellus koko näytöllä. Soita setup_widgets menetelmä.
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()
Määrittele menetelmä nimeltä setup_widgets. Määritä otsikko, joka näyttää otsikon. Aseta pääelementti, näytettävä teksti, kirjasintyyli, taustaväri ja tekstin väri. Määritä väripaletin kehys. Aseta pääelementti, sen näytettävä teksti, kirjasintyylit ja reunuksen leveys. Aseta reunus näyttämään harjanteelta ja taustaväriksi valkoinen.
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)
Määritä värivalikoima väripaletille luettelossa. Toista sitä ja luo painike jokaiselle niistä. Aseta yläelementti, taustaväri, reunuksen leveys ja ulkoasu. Aseta myös leveys ja komento, jonka jokaisen painikkeen tulee toimia, kun sitä napsautetaan. Järjestä kaikki elementit sopivilla pehmusteilla ja väreillä kahden kappaleen sarjoiksi.
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
Samoin määritä pyyhekumille painike, yksi näytön tyhjentämiseksi ja toinen kuvan tallentamiseksi.
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,
)
Lisää tai pienennä osoittimen tai pyyhekumin kokoa määrittämällä mittakaava-widget. Aseta pääelementti, suunta, alue ja pituus pikseleinä. Määritä kangas ja aseta pääelementti, taustaväri ja reunuksen leveys. Aseta myös kohokuvio siten, että sen korkeus ja leveys näyttävät uralta.
Aseta kankaalle sopivat koordinaatit ja aseta ankkuri luoteeseen (vasemmalla yläkulmalla). Sido B1-liike maalitoimintoon. B1 tarkoittaa hiiren vasenta painiketta painettuna ja Liike viittaa liikkeeseen. Kaiken kaikkiaan käytät sitä hiiren liikkeen seuraamiseen, kun painat vasenta painiketta.
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)
Määritä maalisovelluksen ominaisuudet
Määritä menetelmä, maali. Maalaamista varten sovellus piirtää jatkuvasti pieniä soikioita. Vähennä 2 arvosta x ja y hiiren tapahtuman koordinaatit määrittääksesi soikean vasemman yläkulman. Lisää 2 määrittääksesi soikean oikean alakulman. Luo soikea käyttämällä näitä rajakoordinaatteja.
Aseta täyttöväri, ääriviivan väri ja leveys osoittimen valinnan mukaan.
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(),
)
Määritä kolme funktiota, valitse_väri, pyyhekumi, ja, clear_screen. The valitse_väri menetelmä ottaa värin ja asettaa osoittimen sen mukaan. The pyyhekumi menetelmä asettaa osoittimelle pyyhekumimaisen vaikutelman ja saa sen piirtämään läpinäkyviä viivoja. The clear_screen menetelmä poistaa kaikki kohteet kankaalta.
defselect_color(self, col):
self.pointer = coldeferaser(self):
self.pointer = self.erase
defclear_screen(self):
self.canvas.delete("all")
Määritä menetelmä, canvas_color. Avaa värinvalitsin kaikilla eri väreillä. Palauta monikko, joka sisältää värin RGB muoto ja heksadesimaalimuoto. Jos käyttäjä valitsee värin, käytä konfiguroida tapa asettaa taustaväri. Aseta pyyhkimen väriksi sama kuin taustaväri.
defcanvas_color(self):
color = colorchooser.askcolor()
if color:
self.canvas.configure(background=color[1])
self.erase = color[1]
Määritä menetelmä, Tallenna nimellä. Avaa tiedoston valintaikkuna, jossa pyydetään käyttäjää valitsemaan tiedoston nimi ja polku. Jos käyttäjä valitsee polun, käytä Pillow'sia ImageGrab luokkaa kaapataksesi koko näytön. Rajaa kuvaa käyttämällä määritettyjä koordinaatteja saadaksesi kanvasalueen. Kokeile koordinaatteja saadaksesi halutun osan.
Tallenna tämä tulos haluttuun tiedostopolkuun. Näytä viestiruutu, joka ilmoittaa käyttäjälle, että ohjelma on onnistuneesti tallentanut maalin kuvana. Virheen sattuessa se näyttää vastaavan virheen.
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}")
Luo esiintymä Tk ja DrawApp luokkaa. The mainloop() -toiminto käskee Pythonia suorittamaan Tkinterin tapahtumasilmukan ja kuuntelemaan tapahtumia, kunnes suljet ikkunan.
if __name__ == "__main__":
root = tk.Tk()
app = DrawApp(root)
root.mainloop()
Erilaisten maalausominaisuuksien testaus Pythonilla
Kun suoritat maaliohjelman, näet sovelluksen, jossa on väripaletti, neljä painiketta, yksi liukusäädin ja maalattava kangas:
Napsauta mitä tahansa väriä valitaksesi sen. Voit sitten piirtää kankaalle kyseisellä värillä hiiren vasemmalla painikkeella:
Napsauttamalla Pyyhekumi -painiketta ja vetämällä liukusäädintä pystysuunnassa ylös, valitset pyyhekumia ja suurennat sen kokoa. Testaa pyyhekumia vetämällä se piirustuksen päälle poistaaksesi vedot.
Kun napsautat Tyhjennä näyttö -painiketta, ohjelma tyhjentää edellisen piirustuksen. Klikkaa Tausta -painiketta avataksesi väripaletin ja käyttämällä sitä taustavärin vaihtamiseen.
Napsauttamalla Tallenna piirustus -painiketta, tiedostovalintaikkuna avautuu. Valitse tiedostolle polku ja nimi, niin ohjelma tallentaa sen.
Maalisovelluksen parantaminen
Voit parantaa maalisovelluksen toimivuutta lisäämällä vaihtoehdon muotojen lisäämiseen. Voit antaa mahdollisuuden valita siveltimen tyypin ja peittävyyden. Lisää vaihtoehto tekstin ja tarrojen lisäämiseksi. Lisää vaihtoehto kuvien kumoamiseen, uudelleen tekemiseen, koon muuttamiseen ja kääntämiseen. Tämä tekee piirtämisestä paljon sujuvampaa.
Voit luoda muotoja käyttämällä menetelmiä, kuten luo_suorakulmio, luo_oval, luo_viiva ja Luo_polygoni. Voit lisätä tekstiä ja kuvia käyttämällä create_text- ja create_image -menetelmiä. Voit muuttaa kuvien kokoa ja kääntää niitä käyttämällä Pillown kokoa ja transponointimenetelmiä.