Kendi boya uygulamanızı kodlamak, size GUI programlama hakkında çok şey öğretecek klasik bir alıştırmadır.

Basit bir boyama aracı, çoğu bilgisayarda bulabileceğiniz en yaygın uygulamalardan biridir. Sanatçının korkmadan hata yapmasına, tek tuşla istediği rengi seçmesine ve fırça darbelerinin boyutunu anında değiştirmesine olanak tanır. Bunu marka logoları oluşturmak, kullanıcı arayüzlerini kavramsallaştırmak ve diyagramlara açıklama eklemek için kullanabilirsiniz.

Peki nasıl bir boya uygulaması oluşturabilirsiniz?

Tkinter ve Yastık Modülü

Bir boya uygulaması oluşturmak için Tkinter ve Pillow modüllerine ihtiyacınız olacak. Tkinter bunlardan biri GUI'nizi özelleştirmek için kullanabileceğiniz en iyi Python çerçeveleri. Masaüstü uygulamaları oluşturmaya yönelik standart Python GUI modülüdür. Tkinter, etiket, giriş, tuval ve düğme gibi çeşitli widget'larla birlikte gelir.

Python Imaging Library'nin (PIL) bir çatalı olan Pillow, Python için bir görüntü işleme modülüdür. Pillow ile görselleri açabilir, yeniden boyutlandırabilir, çevirebilir ve kırpabilirsiniz. Yapabilirsiniz

instagram viewer
dosya formatlarını dönüştür, bir tarif bulma uygulaması oluşturun ve rastgele görseller getir.

Bu modülleri yüklemek için şunu çalıştırın:

pip install tk pillow

Boya Uygulamasının Yapısını Tanımlayın

Bu projenin kaynak kodunun tamamını burada bulabilirsiniz. GitHub deposu.

Gerekli modülleri içe aktararak başlayın. Bir sınıf tanımlayın, Çizim Uygulaması. Başlığı, işaretçi rengini ve silgi rengini ayarlayın. Uygulamayı tam ekranda açın. Ara setup_widget'lar yöntem.

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

Adı verilen bir yöntemi tanımlayın setup_widget'lar. Bir başlığı görüntüleyen bir etiket tanımlayın. Ana öğeyi, görüntülemek istediğiniz metni, yazı tipi stilini, arka plan rengini ve metin rengini ayarlayın. Renk paleti için bir çerçeve tanımlayın. Ana öğeyi, görüntülemesi gereken metni, yazı tipi stillerini ve kenarlık genişliğini ayarlayın. Kenarlığı çıkıntıya benzer bir görünüme sahip olacak ve arka plan rengini beyaz olacak şekilde ayarlayın.

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)

Bir listede renk paleti için bir renk kümesi tanımlayın. Üzerinde yineleyin ve her biri için bir düğme oluşturun. Ana öğeyi, arka plan rengini, kenarlık genişliğini ve görünümü ayarlayın. Ayrıca her düğmenin tıklandığında çalışması gereken genişliği ve komutu da ayarlayın. Tüm öğeleri uygun dolgu ve renklerle ikili setler halinde düzenleyin.

 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

Benzer şekilde, silgi için bir düğme, ekranı temizlemek için bir düğme ve görüntüyü kaydetmek için bir düğme tanımlayın.

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

İşaretçinin veya silginin boyutunu artırmak veya azaltmak için bir ölçek widget'ı tanımlayın. Ana öğeyi, yönlendirmeyi, aralığı ve uzunluğu piksel cinsinden ayarlayın. Bir tuval tanımlayın ve ana öğeyi, arka plan rengini ve kenarlık genişliğini ayarlayın. Ayrıca kabartmayı, yüksekliği ve genişliğiyle birlikte oluk görünümüne sahip olacak şekilde ayarlayın.

Kanvası uygun koordinatlarla konumlandırın ve çapayı Kuzeybatıya (sol üst) ayarlayın. Bağla B1-Hareket boyama fonksiyonuna gidin. B1 Basılı tutulan sol fare düğmesini ifade eder ve Hareket hareketi ifade eder. Genel olarak, sol düğmeye bastığınızda fare hareketini izlemek için kullanırsınız.

 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)

Boya Uygulamasının Özelliklerini Tanımlayın

Bir yöntem tanımlayın, boyamak. Boyamak için uygulama sürekli olarak küçük ovaller çizecektir. 2'yi çıkarın X Ve sen Ovalin sol üst köşesini belirlemek için fare olayının koordinatları. Ovalin sağ alt köşesini belirlemek için 2 ekleyin. Bu sınırlayıcı koordinatları kullanarak bir oval oluşturun.

İşaretçinin seçimine göre dolgu rengini, anahat rengini ve genişliğini ayarlayın.

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

Üç işlevi tanımlayın, renk seç, silgi, Ve, temiz ekran. renk seç yöntem bir renk alır ve işaretçiyi buna göre ayarlar. silgi yöntemi işaretçiyi silgi benzeri bir etkiye sahip olacak şekilde ayarlar ve şeffaf çizgiler çizmesini sağlar. temiz ekran yöntem tuvaldeki tüm öğeleri siler.

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

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

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

Bir yöntem tanımlayın, tuval rengi. Tüm farklı renkleri içeren bir renk seçici açın. Rengi içeren bir demet döndür RGB biçimi ve onaltılık biçimi. Kullanıcı bir renk seçerse, yapılandır arka plan rengini ayarlama yöntemi. Silginin rengini arka plan rengiyle aynı olacak şekilde ayarlayın.

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

Bir yöntem tanımlayın, farklı kaydet. Kullanıcıdan dosya adını ve yolunu seçmesini isteyen bir dosya iletişim kutusu açın. Kullanıcı bir yol seçerse, Pillow's'u kullanın. ImageGrab tüm ekranı yakalamak için sınıf. Tuval bölgesini elde etmek için belirtilen koordinatları kullanarak görüntüyü kırpın. İstenilen parçayı yakalamak için koordinatlarla denemeler yapın.

Bu sonucu istediğiniz dosya yoluna kaydedin. Kullanıcıya programın boyayı resim olarak başarıyla kaydettiğini bildiren bir mesaj kutusu görüntüleyin. Herhangi bir hata durumunda ilgili hatayı görüntüler.

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

Bir örneğini oluşturun tk ve Çizim Uygulaması sınıf. Ana döngü() işlevi Python'a Tkinter olay döngüsünü çalıştırmasını ve siz pencereyi kapatana kadar olayları dinlemesini söyler.

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

Python Kullanarak Farklı Boyama Özelliklerini Test Etme

Boyama programını çalıştırdığınızda renk paleti, dört düğme, bir kaydırıcı ve üzerine boyama yapabileceğiniz bir tuval içeren bir uygulama göreceksiniz:

Seçmek için herhangi bir rengi tıklayın. Daha sonra farenin sol tuşuyla tuval üzerine o renkte çizim yapabilirsiniz:

Tıklandığında Silgi düğmesine basıp kaydırıcıyı dikey olarak yukarı sürükleyerek silgiyi seçip boyutunu artıracaksınız. Konturları silmek için silgiyi çiziminizin üzerine sürükleyerek test edin.

Tıkladığınızda Temiz ekran düğmesine bastığınızda program önceki çiziminizi temizler. Tıkla Arka plan Bir renk paleti açmak ve arka plan rengini değiştirmek için bu düğmeyi kullanın.

Tıklandığında Çizimi Kaydet düğmesine bastığınızda bir dosya iletişim kutusu açılır. Dosya için bir yol ve ad seçin; program onu ​​kaydedecektir.

Boya Uygulamasının Geliştirilmesi

Şekil ekleme seçeneğini ekleyerek boyama uygulamasının işlevselliğini artırabilirsiniz. Fırça tipini ve opaklığını seçme seçeneği verebilirsiniz. Metin ve çıkartma ekleme seçeneği ekleyin. Resimleri geri alma, yeniden yapma, yeniden boyutlandırma ve çevirme seçenekleri ekleyin. Bu, çizim sürecini çok daha sorunsuz hale getirecektir.

Şekiller oluşturmak için create_rectangle, create_oval, create_line ve create_polygon gibi yöntemleri kullanabilirsiniz. Metin ve resim eklemek için create_text ve create_image yöntemini kullanın. Görüntüleri yeniden boyutlandırmak ve çevirmek için Pillow'un yeniden boyutlandırma ve transpoze yöntemlerini kullanabilirsiniz.