अपने स्वयं के पेंट ऐप को कोड करना एक क्लासिक अभ्यास है जो आपको जीयूआई प्रोग्रामिंग के बारे में बहुत कुछ सिखाएगा।

एक साधारण पेंट टूल सबसे आम ऐप्स में से एक है जिसे आप अधिकांश कंप्यूटरों पर पा सकते हैं। यह कलाकार को बिना किसी डर के गलतियाँ करने देता है, एक बटन के क्लिक पर कोई भी रंग चुनने देता है, और अपने ब्रश स्ट्रोक का आकार तुरंत बदलने देता है। आप इसका उपयोग ब्रांड लोगो बनाने, उपयोगकर्ता इंटरफ़ेस की अवधारणा बनाने और आरेखों को एनोटेट करने के लिए कर सकते हैं।

तो, आप पेंट एप्लिकेशन कैसे बना सकते हैं?

टिंकर और तकिया मॉड्यूल

पेंट एप्लिकेशन बनाने के लिए, आपको टिंकर और पिलो मॉड्यूल की आवश्यकता होगी। टिंकर इनमें से एक है शीर्ष पायथन फ्रेमवर्क जिनका उपयोग आप अपने जीयूआई को अनुकूलित करने के लिए कर सकते हैं. यह डेस्कटॉप एप्लिकेशन बनाने के लिए मानक पायथन जीयूआई मॉड्यूल है। टिंकर विभिन्न प्रकार के विजेट जैसे लेबल, एंट्री, कैनवास और बटन के साथ आता है।

पिलो, पायथन इमेजिंग लाइब्रेरी (पीआईएल) का एक कांटा, पायथन के लिए एक इमेज-प्रोसेसिंग मॉड्यूल है। पिलो के साथ, आप छवियों को खोल सकते हैं, आकार बदल सकते हैं, फ़्लिप कर सकते हैं और क्रॉप कर सकते हैं। तुम कर सकते हो

instagram viewer
फ़ाइल स्वरूप परिवर्तित करें, एक रेसिपी खोजक एप्लिकेशन बनाएं, और यादृच्छिक छवियाँ लाएँ.

इन मॉड्यूल को स्थापित करने के लिए, चलाएँ:

pip install tk pillow

पेंट अनुप्रयोग की संरचना को परिभाषित करें

आप इसमें इस प्रोजेक्ट का संपूर्ण स्रोत कोड पा सकते हैं गिटहब रिपॉजिटरी.

आवश्यक मॉड्यूल आयात करके प्रारंभ करें। एक वर्ग परिभाषित करें, ड्राऐप. शीर्षक, सूचक रंग और इरेज़र रंग सेट करें। एप्लिकेशन को पूर्ण स्क्रीन में खोलें. बुलाएं setup_widgets तरीका।

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

नामक विधि को परिभाषित करें setup_widgets. एक लेबल परिभाषित करें जो एक शीर्षक प्रदर्शित करता है। मूल तत्व, वह पाठ जिसे आप प्रदर्शित करना चाहते हैं, फ़ॉन्ट शैली, पृष्ठभूमि रंग और पाठ का रंग सेट करें। रंग पैलेट के लिए एक फ़्रेम परिभाषित करें. मूल तत्व, उसे प्रदर्शित होने वाला टेक्स्ट, फ़ॉन्ट शैलियाँ और बॉर्डर की चौड़ाई सेट करें। बॉर्डर को रिज-जैसी और पृष्ठभूमि का रंग सफेद पर सेट करें।

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)

किसी सूची में रंग पैलेट के लिए रंगों का एक सेट परिभाषित करें। इस पर पुनरावृति करें और उनमें से प्रत्येक के लिए एक बटन बनाएं। मूल तत्व, पृष्ठभूमि रंग, सीमा चौड़ाई और उपस्थिति सेट करें। प्रत्येक बटन को क्लिक करने पर चलने वाली चौड़ाई और कमांड भी सेट करें। सभी तत्वों को उचित पैडिंग और रंगों के साथ दो के सेट में व्यवस्थित करें।

 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

इसी तरह, इरेज़र के लिए एक बटन, स्क्रीन साफ़ करने के लिए एक और छवि को सहेजने के लिए एक बटन परिभाषित करें।

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

पॉइंटर या इरेज़र के आकार को बढ़ाने या घटाने के लिए स्केल विजेट को परिभाषित करें। मूल तत्व, ओरिएंटेशन, रेंज और लंबाई को पिक्सेल में सेट करें। एक कैनवास को परिभाषित करें और मूल तत्व, पृष्ठभूमि रंग और सीमा की चौड़ाई निर्धारित करें। इसके अलावा, राहत को उसकी ऊंचाई और चौड़ाई के साथ एक खांचे की उपस्थिति के लिए सेट करें।

कैनवास को उचित निर्देशांक के साथ रखें और एंकर को उत्तर-पश्चिम (ऊपर बाईं ओर) पर सेट करें। बाँधो बी1-मोशन पेंट फ़ंक्शन के लिए. बी 1 नीचे दबाए गए बाएँ माउस बटन को संदर्भित करता है और गति आन्दोलन को संदर्भित करता है। कुल मिलाकर, आप बाएँ बटन को दबाते समय माउस की गति को ट्रैक करने के लिए इसका उपयोग करते हैं।

 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)

पेंट एप्लीकेशन की विशेषताओं को परिभाषित करें

एक विधि परिभाषित करें, रँगना. पेंट करने के लिए, ऐप लगातार छोटे-छोटे अंडाकार चित्र बनाएगा। में से 2 घटाएं एक्स और अंडाकार के ऊपरी बाएँ कोने को निर्धारित करने के लिए माउस इवेंट के निर्देशांक। अंडाकार के निचले दाएं कोने को निर्धारित करने के लिए 2 जोड़ें। इन बाउंडिंग निर्देशांकों का उपयोग करके एक अंडाकार बनाएं।

पॉइंटर के चयन के अनुसार भरण रंग, रूपरेखा रंग और चौड़ाई सेट करें।

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

तीन कार्यों को परिभाषित करें, रंग चुनो, रबड़, और, साफ़ स्क्रीन. रंग चुनो विधि एक रंग लेती है और उसके अनुसार पॉइंटर सेट करती है। रबड़ विधि पॉइंटर को इरेज़र जैसा प्रभाव देने के लिए सेट करती है और इसे पारदर्शी रेखाएँ खींचने में सक्षम बनाती है। साफ़ स्क्रीन विधि कैनवास पर सभी आइटम हटा देती है।

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

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

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

एक विधि परिभाषित करें, कैनवास का रंग. सभी अलग-अलग रंगों वाला एक रंग चयनकर्ता खोलें। रंग युक्त टुपल लौटाएँ आरजीबी प्रारूप और हेक्साडेसिमल प्रारूप। यदि उपयोगकर्ता कोई रंग चुनता है, तो इसका उपयोग करें कॉन्फ़िगर पृष्ठभूमि रंग सेट करने की विधि. इरेज़र का रंग पृष्ठभूमि रंग के समान सेट करें।

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

एक विधि परिभाषित करें, के रूप रक्षित करें. एक फ़ाइल संवाद बॉक्स खोलें और उपयोगकर्ता से फ़ाइल का नाम और पथ चुनने के लिए कहें। यदि उपयोगकर्ता कोई पथ चुनता है, तो पिलो का उपयोग करें छवि पकड़ो पूरी स्क्रीन कैप्चर करने के लिए क्लास। कैनवास क्षेत्र प्राप्त करने के लिए निर्दिष्ट निर्देशांक का उपयोग करके छवि को क्रॉप करें। वांछित भाग प्राप्त करने के लिए निर्देशांक के साथ प्रयोग करें।

इस परिणाम को वांछित फ़ाइल पथ पर सहेजें। एक संदेश बॉक्स प्रदर्शित करें जो उपयोगकर्ता को सूचित करता है कि प्रोग्राम ने पेंट को छवि के रूप में सफलतापूर्वक सहेज लिया है। किसी भी त्रुटि के मामले में, यह संबंधित त्रुटि प्रदर्शित करता है।

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

का एक उदाहरण बनाएं टी और यह ड्राऐप कक्षा। मुख्य घेरा() फ़ंक्शन पायथन को टिंकर ईवेंट लूप चलाने और विंडो बंद करने तक ईवेंट सुनने के लिए कहता है।

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

पायथन का उपयोग करके विभिन्न पेंटिंग सुविधाओं का परीक्षण

जब आप पेंट प्रोग्राम चलाते हैं, तो आपको रंग पैलेट, चार बटन, एक स्लाइडर और पेंट करने के लिए एक कैनवास वाला एक ऐप दिखाई देगा:

किसी भी रंग को चुनने के लिए उस पर क्लिक करें। फिर आप बाईं माउस बटन से कैनवास पर उस रंग का चित्र बना सकते हैं:

क्लिक करने पर रबड़ बटन दबाएं और स्लाइडर को लंबवत ऊपर खींचें, आप इरेज़र का चयन करेंगे और उसका आकार बढ़ाएंगे। स्ट्रोक मिटाने के लिए इरेज़र को अपनी ड्राइंग पर खींचकर उसका परीक्षण करें।

जब आप क्लिक करते हैं साफ़ स्क्रीन बटन, प्रोग्राम आपकी पिछली ड्राइंग को साफ़ कर देता है। क्लिक करें पृष्ठभूमि रंग पैलेट खोलने और पृष्ठभूमि रंग बदलने के लिए इसका उपयोग करने के लिए बटन।

क्लिक करने पर ड्राइंग सहेजें बटन, एक फ़ाइल संवाद बॉक्स खुलता है। फ़ाइल के लिए पथ और नाम चुनें, और प्रोग्राम इसे सहेज लेगा।

पेंट अनुप्रयोग को बढ़ाना

आप आकृतियाँ जोड़ने का विकल्प जोड़कर पेंट एप्लिकेशन की कार्यक्षमता बढ़ा सकते हैं। आप ब्रश प्रकार और अपारदर्शिता का चयन करने का विकल्प दे सकते हैं। टेक्स्ट और स्टिकर जोड़ने का विकल्प जोड़ें। पूर्ववत करें, पुनः करें, आकार बदलें और छवियों को फ़्लिप करने के लिए एक विकल्प जोड़ें। इससे ड्राइंग प्रक्रिया बहुत आसान हो जाएगी.

आकृतियाँ बनाने के लिए, आप create_rectangel, create_oval, create_line, और create_polygon जैसी विधियों का उपयोग कर सकते हैं। टेक्स्ट और छवियाँ जोड़ने के लिए, create_text और create_image विधि का उपयोग करें। छवियों का आकार बदलने और फ़्लिप करने के लिए, आप पिलो के आकार बदलने और स्थानांतरित करने के तरीकों का उपयोग कर सकते हैं।