membuat aplikasi menggambar versi 5

BelajarPython - Assalamualaikum wr. wb.

Hay.. Jumpa lagi temen - temen di blog saya tercinta ini.. Pada kesempatan kali ini saya akan mencoba melanjutkan atau mengupdate fitur dari aplikasi yang sudah saya buat dan saya posting sebelumnya.. Jika kalian melewatkan postingan saya yang sebelumnya, KALIAN BISA KLIK DISINI  untuk melihatnya... Hehe Yuk langsung saja kita simak sama - sama postingan saya kali ini.. Let’s check it out temen - temen....

Pengenalan aplikasi yang akan kita buat.

Oke saya jelaskan lagi lebih rinci lagi ya aplikasi yang akan kita buat pada postingan kali ini.. Jadi, aplikasi yang akan kita buat kali ini adalah aplikasi menggambar versi yang ke lima yang saya buat.. Dimana telah saya tambah satu fitur yang cukup beruna.. Dan bisa dibilang cukup vital yang wajib ada di setiap aplikasi menggambar... Yaitu pemilihan warna dalam menggambar setiap objek di aplikasi ini..

Pada versi yang pertama hanya dapat menggores-goreskan kursor seperti pensil, dan pada versi yang kedua, kita bisa menggambar lingkaran, kotak dan yang lainnya lalu pada versi 3, akan ada fitur undo dan untuk versi ke empat, saya akan menambahkan kontrol lebar garis yang bisa kita atur sesuka kita.. Dan versi yang sedang kita bahas sekarang, yaitu versi ke lima, saya mennambahkan pemilihan warna untuk garis dan isian dari objek untuk menggambar.. Seperti yang sudah saya katakan di atas tadi.. Yang saya harap akan cukup berguna...

Oya perlu kalian ketahui lagi ya.. Aplikasi ini merupakan aplikasi versi ke lima yang sudah saya buat.. Dan ada beberapa versi penerus serta pendahulunya ya... untuk melihat perkembangan tiap versinya, kalian BISA KLIK DISINI.

Spesifikasi dan fitur aplikasi menggambar v.5 tkinter python.

Oya perlu kalian ketahui lagi.. Modul untuk membuat tampilan jam ini, saya menggunakan full tkinter... Untuk sekedar belajar atau membaca mengenai tkinter ini, kalian BISA KLIK DISINI. dan untuk lebih jelasnya mengenai aplikasi kali ini, simak penjabaran spesifikasi berikut ini ya temen - temen....

Nama: mn-paint 5.0
Versi: 5.0
Platform: Python 3.x
Modul: Tkinter
Baris Code: kurang lebih 290 baris code program.
Fitur: menggambar, Undo, mengatur besarnya garis, dan mengubah warna.
syarat menjalankan: install python 3.x, punya editor teks atau IDE.
Cara menjalankan: install python 3, copy dan paste code program pada editor atau IDE, simpan dalam file python(ekstensi .py), lalu jalankan.


Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu loh.. sehingga, nantinya kita cukup klik dua kali saja untuk menjalankan aplikasi ini... tanpa perlu repot - repot membuka nya di IDLE atau IDE python.. nah seperti apa caranya? cukup mudah kok.. dan saya juga sudah membuatkan tutorialnya.. untuk kalian yang menggunakan windows, KALIAN BISA KLIK DISINI ya temen - temen.. atau jika pada link pertama terlalu rumit, KALIAN BISA MENCOBA CARA INI ya.... dan bagi pengguna linux ? tenang saja.. bisa juga kok membuat file executable nya.. untuk melihat tutorialnya, KALIAN BISA KLIK DISINI temen - temen...

Code program untuk membuat aplikasi menggambar v.5 tkinter python.

Nah biar tidak lama - lama penasaran, yuk langsung saja simak sama - sama code program untuk membuat aplikasi menggambar ini... Silahkan di simak di bawah ini ya temen - temen.. Let’s check it out...

from tkinter import *
from PIL import Image, ImageDraw, ImageTk
from tkinter.colorchooser import askcolor
from tkinter import ttk, filedialog
from tkinter import Frame


class ImageGenerator():
    def __init__(self, parent, *kwargs):
        self.framekanvas = Frame(parent)
        self.frameTombol = Frame(parent)
        self.frameWarna = Frame(parent)

        self.parent = parent
        self.sizex = 420
        self.sizey = 400
        self.b1 = "tidakDiKlik"
        self.xold = None
        self.yold = None

        self.koordinat = []

        self.yangLama = None
        self.pilihan = IntVar()
        self.warnaFill = StringVar()
        self.warnaFill.set('blue')

        self.tag = 1
        self.tampungTag = []
        self.warna = StringVar()
        self.warna.set('blue')
        self.ukuran = IntVar()
        self.ukuran.set(3)

        self.buatTombol()
        self.buatTempatMenggambar()
        self.buatSlider()
        self.tempatTombolWarna()

    def buatTempatMenggambar(self):
        self.tempatMenggambar = Canvas(self.framekanvas, width=self.sizex, height=self.sizey, bg='white')
        self.tempatMenggambar.grid(row=0, column=0)

        self.framekanvas.pack()

    def menggambarDgPensil(self):
        self.tempatMenggambar.unbind("<Button-1>")
        self.tempatMenggambar.unbind("<B1-Motion>")
        self.tempatMenggambar.unbind("<ButtonRelease-1>")

        self.tempatMenggambar.bind("<Motion>", self.pembuatGaris)
        self.tempatMenggambar.bind("<ButtonPress-1>", self.jikaDilepas)
        self.tempatMenggambar.bind("<ButtonRelease-1>", self.jikaDiKlik)

    def menggambarBentuk(self):
        self.tempatMenggambar.unbind("<Motion>")
        self.tempatMenggambar.unbind("<ButtonPress-1>")
        self.tempatMenggambar.unbind("<ButtonRelease-1>")

        self.tempatMenggambar.bind("<Button-1>", self.onclick_handler)
        self.tempatMenggambar.bind("<B1-Motion>", self.mouse_move)
        self.tempatMenggambar.bind("<ButtonRelease-1>", self.onrelease_handler)

    def buatTombol(self):
        Radiobutton(self.frameTombol, text='pensil', indicatoron=0, width=5, padx=10, variable=self.pilihan, relief='flat', value='1', command=self.menggambarDgPensil).pack(side=LEFT)
        Radiobutton(self.frameTombol, text='garis', indicatoron=0, width=5, padx=10, variable=self.pilihan, relief='flat', value='2', command=self.menggambarBentuk).pack(side=LEFT)
        Radiobutton(self.frameTombol, text='kotak', indicatoron=0, width=5, padx=10, variable=self.pilihan,relief='flat', value='3', command=self.menggambarBentuk).pack(side=LEFT)
        Radiobutton(self.frameTombol, text='bulat', indicatoron=0, width=5, padx=10, variable=self.pilihan,relief='flat', value='4', command=self.menggambarBentuk).pack(side=LEFT)
        Radiobutton(self.frameTombol, text='arc', indicatoron=0, width=5, padx=10, variable=self.pilihan,relief='flat', value='5', command=self.menggambarBentuk).pack(side=LEFT)
        self.frameTombol.pack()

    def tempatTombolWarna(self):
        self.box_value = StringVar()
        self.box = ttk.Combobox(self.frameWarna, textvariable=self.box_value,
                                state='readonly', width=10)
        self.box['values'] = ('warna garis', 'warna isi')
        self.box.current(0)
        self.box.grid(row=0, column=1, columnspan=3)

        self.tombolWarna = Button(self.frameWarna, text='garis', width=3, bg=self.warna.get(), command=self.pilihWarna)
        self.tombolWarna.grid(row=0, column=4, columnspan=2)

        self.tombolWarnaIsi = Button(self.frameWarna, text='Fill', width=3, bg=self.warnaFill.get(),
                                     command=self.pilihWarnaFill)
        self.tombolWarnaIsi.grid(row=0, column=6, columnspan=2)

        self.tombolUndo = Button(self.frameWarna, text='undo', width=3, command=self.undo)
        self.tombolUndo.grid(row=0, column=8, columnspan=2)

        self.tombolHapus = Button(self.frameWarna, text='hapus', width=3, command=self.hapus)
        self.tombolHapus.grid(row=0, column=10, columnspan=2)

        Button(self.frameWarna, text='no', command=self.setTransparant).grid(row=1, column=1)
        Button(self.frameWarna, bg='blue', activebackground='blue', command=self.setBiru).grid(row=1, column=2)
        Button(self.frameWarna, bg='light blue', activebackground='light blue', command=self.setBiruMuda).grid(row=1,
                                                                                                               column=3)
        Button(self.frameWarna, bg='green', activebackground='green', command=self.setHijau).grid(row=1, column=4)
        Button(self.frameWarna, bg='light green', activebackground='light green', command=self.setHijauMuda).grid(row=1,
                                                                                                                  column=5)
        Button(self.frameWarna, bg='red', activebackground='red', command=self.setMerah).grid(row=1, column=6)
        Button(self.frameWarna, bg='pink', activebackground='pink', command=self.setMerahMuda).grid(row=1, column=7)
        Button(self.frameWarna, bg='yellow', activebackground='yellow', command=self.setKuning).grid(row=1, column=8)
        Button(self.frameWarna, bg='orange', activebackground='orange', command=self.setKuningMuda).grid(row=1,
                                                                                                         column=9)
        Button(self.frameWarna, bg='black', activebackground='black', command=self.setHitam).grid(row=1, column=10)
        Button(self.frameWarna, bg='magenta', activebackground='magenta', command=self.setMagenta).grid(row=1,
                                                                                                        column=11)
        self.frameWarna.pack()

    def setTransparant(self):
        if self.box.get() == 'warna garis':
            self.warna.set('')
            self.tombolWarna.config(bg='#d9d9d9')
        else:
            self.warnaFill.set('')
            self.tombolWarnaIsi.config(bg='#d9d9d9')

    def setBiru(self):
        if self.box.get() == 'warna garis':
            self.warna.set('blue')
            self.tombolWarna.config(bg='blue')
        else:
            self.warnaFill.set('blue')
            self.tombolWarnaIsi.config(bg='blue')

    def setBiruMuda(self):
        if self.box.get() == 'warna garis':
            self.warna.set('light blue')
            self.tombolWarna.config(bg='light blue')
        else:
            self.warnaFill.set('light blue')
            self.tombolWarnaIsi.config(bg='light blue')

    def setHijau(self):
        if self.box.get() == 'warna garis':
            self.warna.set('green')
            self.tombolWarna.config(bg='green')
        else:
            self.warnaFill.set('green')
            self.tombolWarnaIsi.config(bg='green')

    def setHijauMuda(self):
        if self.box.get() == 'warna garis':
            self.warna.set('light green')
            self.tombolWarna.config(bg='light green')
        else:
            self.warnaFill.set('light green')
            self.tombolWarnaIsi.config(bg='light green')

    def setMerah(self):
        if self.box.get() == 'warna garis':
            self.warna.set('red')
            self.tombolWarna.config(bg='red')
        else:
            self.warnaFill.set('red')
            self.tombolWarnaIsi.config(bg='red')

    def setMerahMuda(self):
        if self.box.get() == 'warna garis':
            self.warna.set('pink')
            self.tombolWarna.config(bg='pink')
        else:
            self.warnaFill.set('pink')
            self.tombolWarnaIsi.config(bg='pink')

    def setKuning(self):
        if self.box.get() == 'warna garis':
            self.warna.set('yellow')
            self.tombolWarna.config(bg='yellow')
        else:
            self.warnaFill.set('yellow')
            self.tombolWarnaIsi.config(bg='yellow')

    def setKuningMuda(self):
        if self.box.get() == 'warna garis':
            self.warna.set('orange')
            self.tombolWarna.config(bg='orange')
        else:
            self.warnaFill.set('orange')
            self.tombolWarnaIsi.config(bg='orange')

    def setHitam(self):
        if self.box.get() == 'warna garis':
            self.warna.set('black')
            self.tombolWarna.config(bg='black')
        else:
            self.warnaFill.set('black')
            self.tombolWarnaIsi.config(bg='black')

    def setMagenta(self):
        if self.box.get() == 'warna garis':
            self.warna.set('magenta')
            self.tombolWarna.config(bg='magenta')
        else:
            self.warnaFill.set('magenta')
            self.tombolWarnaIsi.config(bg='magenta')

    def hapus(self):
        self.tempatMenggambar.delete("all")
        self.koordinat = []

    def jikaDilepas(self, event):
        self.b1 = "diKlik"

    def jikaDiKlik(self, event):
        self.b1 = "tidakDiKlik"
        self.xold = None
        self.yold = None

    def pembuatGaris(self, event):
        if self.b1 == "diKlik":
            if self.xold is not None and self.yold is not None:
                garis = event.widget.create_line(self.xold, self.yold, event.x, event.y, smooth='true',
                                                 width=self.ukuran.get(), fill=self.warna.get(), tag=str(self.tag))
                self.koordinat.append((self.xold, self.yold))
                self.tampungTag.append(garis)
                self.tag += 1
        self.xold = event.x
        self.yold = event.y

    def pilihWarna(self):
        (rgb, hx) = askcolor()
        self.tombolWarna.config(bg=hx)
        self.warna.set(hx)

    def pilihWarnaFill(self):
        (rgb, hx) = askcolor()
        self.tombolWarnaIsi.config(bg=hx)
        self.warnaFill.set(hx)

    def buatSlider(self):
        self.slider = Scale(self.frameWarna, from_=1, to=20, label='ukuran :', orient=HORIZONTAL,
                            command=self.setUkuran).grid(row=0, column=0, rowspan=2)

    def setUkuran(self, nilai):
        self.ukuran.set(nilai)

    def undo(self):
        if len(self.tampungTag):
            self.tempatMenggambar.delete(self.tampungTag.pop())

    def onclick_handler(self, event):
        self.start = [event.x, event.y]

    def onrelease_handler(self, event):
        if self.start is not None:
            x = self.start[0]
            y = self.start[1]
            event.widget.delete(self.yangLama)

            if self.pilihan.get() == 2:
                self.bentuk = event.widget.create_line(x, y, event.x, event.y, width=self.ukuran.get(),
                                                       fill=self.warna.get())
            elif self.pilihan.get() == 3:
                self.bentuk = event.widget.create_rectangle(x, y, event.x, event.y, width=self.ukuran.get(),
                                                            fill=self.warnaFill.get(), outline=self.warna.get())
            elif self.pilihan.get() == 4:
                self.bentuk = event.widget.create_oval(x, y, event.x, event.y, width=self.ukuran.get(),
                                                       fill=self.warnaFill.get(), outline=self.warna.get())
            elif self.pilihan.get() == 5:
                self.bentuk = event.widget.create_arc(x, y, event.x, event.y, width=self.ukuran.get(),
                                                      fill=self.warnaFill.get(), outline=self.warna.get())
            self.tampungTag.append(self.bentuk)
            self.start = None

    def mouse_move(self, event):
        if self.start is not None:
            x = self.start[0]
            y = self.start[1]
            if self.yangLama:
                event.widget.delete(self.yangLama)

            if self.pilihan.get() == 2:
                self.yangLama = event.widget.create_line(x, y, event.x, event.y, width=self.ukuran.get(),
                                                         fill=self.warna.get())
            elif self.pilihan.get() == 3:
                self.yangLama = event.widget.create_rectangle(x, y, event.x, event.y, width=self.ukuran.get(),
                                                              fill=self.warnaFill.get(), outline=self.warna.get())
            elif self.pilihan.get() == 4:
                self.yangLama = event.widget.create_oval(x, y, event.x, event.y, width=self.ukuran.get(),
                                                         fill=self.warnaFill.get(), outline=self.warna.get())
            elif self.pilihan.get() == 5:
                self.yangLama = event.widget.create_arc(x, y, event.x, event.y, width=self.ukuran.get(),
                                                        fill=self.warnaFill.get(), outline=self.warna.get())


if __name__ == "__main__":
    root = Tk()
    root.title('aplikasi menggambar -> mn-belajarpython.blogspot.co.id')
    root.wm_geometry("%dx%d" % (430, 480))
    ImageGenerator(root)
    root.mainloop()


Nah itu dia temen - temen code program nya.. Jika dibandingkan code versi sebelumnya, code aplikasi menggambar versi 5 ini memiliki penambahan baris code program yang sangat signifikan.. Karena hampir dua kali lipat nya.. Walaupun saya hanya menambahkan pewarnaan saja... nah lalu sepertii apa ya temen - temen tampilan yang akan di hasilkan dari code program di atas? Nah, biar gak penasaran, langsung saja di simak gambar yang ada di bawah ini ya...


Nah itu dia temen - temen hasil dari code program di atas.. Gimana ? Masih sama ya tampilannya dengan versi sebelumnya.. Bedanya hanya menambah satu tombol - tombol pewarnaan saja yaa.. Namun hal itu membuatnya lebih menarik.. Karena ada warna - warni disana.. Hehe...


Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu loh.. sehingga, nantinya kita cukup klik dua kali saja untuk menjalankan aplikasi ini... tanpa perlu repot - repot membuka nya di IDLE atau IDE python.. nah seperti apa caranya? cukup mudah kok.. dan saya juga sudah membuatkan tutorialnya.. untuk kalian yang menggunakan windows, KALIAN BISA KLIK DISINI ya temen - temen.. atau jika pada link pertama terlalu rumit, KALIAN BISA MENCOBA CARA INI ya.... dan bagi pengguna linux ? tenang saja.. bisa juga kok membuat file executable nya.. untuk melihat tutorialnya, KALIAN BISA KLIK DISINI temen - temen...

Penjelasan Code program untuk membuat aplikasi menggambar v.5.

nah pada bagian ini saya akan mencoba untuk menjelaskan code program yang telah saya bagikan diatas tadi yaa.. Hal ini saya lakukan agar kalian bisa memahami code program untuk membuat aplikasi menggambar ini... Yuk tanpa lama - lama lagi langsung saja kita simak sama - sama penjelasan saya di bawah ini...


[NOTE : Teks yang berwarna merah pada penjelasan merupakan "Code program" yang di tambahkan pada versi kali ini. Dan tidak ada di versi sebelumnya]


from tkinter import *  //digunakan untuk mengimport modul tkinter
from PIL import Image, ImageDraw, ImageTk  //digunakan untuk mengimport class image, image draw dan ImageTk dari modul PIL
from tkinter.colorchooser import askcolor  //digunakan untuk mengimport pemilih warna dari tkinter.
from tkinter import ttk, filedialog  //digunakan untuk mengimport file dialog dar tkinter
from tkinter import Frame  //digunakan untuk mengimput Frame dari tkinter

class ImageGenerator():  //membuat class dengan ‘imageGenerator’
    def __init__(self,parent, *kwargs):  //untuk membuat konstruktor dari class ‘ImageGenerator’.
        self.framekanvas = Frame(parent)  //digunakan untuk membuat sub frame. Dengan nama’framekanvas’.  Yang akan digunakan sebagai tempat kanvas nya.
        self.frameTombol = Frame(parent)  //digunakan untuk membuat subframe dengan nama ‘frameTombol’. Yang akan digunakan untuk menempatkan tombol.
        self.frameWarna = Frame(parent)  //digunakan untuk membuat subframe tempat warna.

        self.parent = parent  //digunakan untuk menampung isi dari parameter ‘parent’.
        self.sizex = 420  //mendefinisikan ukuran lebar dari kanvas atau tempat menggambarnya.
        self.sizey = 400  //mendefinisikan ukuran tinggi dari kanvas atau tempat menggambarnya. 
        self.b1 = "tidakDiKlik"  //digunakan sebagai penanda jika mous di tekan atau belum
        self.xold = None  //digunakan untuk menentukan posisi x garis
        self.yold = None  //digunakan untuk mennetukan posisi y garis

        self.koordinat= []  //digunakan sebagai penampung koordinat.

        self.yangLama = None  //digunakan untuk meobjek mennghapus objek saat di drag. (khusus objek selain pensil).
        self.pilihan = IntVar()  //digunakan untuk menentukan pilihan objek menggambar.
        self.warnaFill = StringVar()  //mendeklarasikan variabel warna isian objek.
        self.warnaFill.set('blue')  //mengatur isian objek agar berwarna biru.

        self.tag = 1  //pembuatan variabel tag yang akan digunakan untuk pembuatan elemen pada proses menggambar.
        self.tampungTag = []  //variabel list  dengan nama ‘tampungTag’ yang akan digunakan untuk menampung semua tag objek pada kanvas.
        self.warna = StringVar()  //mendeklarasikan variabel warna garis objek;
        self.warna.set('blue')  //digunakan untuk menngatur warna garis agar berwarna biru.
        self.ukuran = IntVar()  //mendeklarisakan variabel pengatur tebal garis.
        self.ukuran.set(3)  //mengatur tebal baris sebesar 3.

        self.buatTombol()  //memanggil atau menjalankan sebuah metode dengan nama ‘buatTombol’
        self.buatTempatMenggambar()  //memanggil atau menjalankan sebuah metode dengan nama ‘buatTempatMenggambar’
        self.buatSlider()  //memanggil atau menjalankan sebuah metode dengan nama ‘buatSlider’.
        self.tempatTombolWarna()  //memanggil atau menjalankan sebuah metode dengan nama ‘tempatTombolWarna’

    def buatTempatMenggambar(self):  //untuk membuat metode dengan nama ‘buatTempatMenggambar’ yang berisi code untuk pembuatan kanvas tempat menggambar.
        self.tempatMenggambar=Canvas(self.framekanvas,width=self.sizex,height=self.sizey, bg='white')  //digunakan untuk membuat kanvas dengan settingan yang sudah saya atur. Yaitu : lebar dan tingg menggunakan variabel sizex dan sizey. Dan backgruoud putih.
        self.tempatMenggambar.grid(row = 0, column=0)  //memasukkan kanvas ke subframe. Yaitu ‘frameKanvas’.

        self.framekanvas.pack()  //memasukkan subframe (framekanvas) ke frame atau window utama.

    def menggambarDgPensil(self):  //digunakan untuk membuat metode dengan nama ‘menggambarDenganPensil’. Yaitu sebuah metode yang akan digunakan ketika menggambar.
        self.tempatMenggambar.unbind("<Button-1>")   //digunakan untuk mengosongkan perintah ketika mouse di tekan.
        self.tempatMenggambar.unbind("<B1-Motion>")   //digunakan untuk mengosongkan perintah ketika mouse di gerakkan.
        self.tempatMenggambar.unbind("<ButtonRelease-1>")   //digunakan untuk mengosongkan perintah ketika mouse di lepas.

        self.tempatMenggambar.bind("<Motion>", self.pembuatGaris)  //code yang akan menjalankan metode ‘pembuatGaris’ ketika mouse di drag
        self.tempatMenggambar.bind("<ButtonPress-1>", self.jikaDilepas)  //code yang akan menjalankan metode ‘jikaDiklik’ ketika mous di klik.
        self.tempatMenggambar.bind("<ButtonRelease-1>", self.jikaDiKlik)  //code yang akan menjalankan metode ‘jikaDilepas’ ketika mouse di lepas dari drag

    def menggambarBentuk(self):  //digunakan untuk membuat metode dengan nama ‘menggambarBentuk’ yan digunakan untuk menggambar objek selain pensil.
        self.tempatMenggambar.unbind("<Button-1>")   //digunakan untuk mengosongkan perintah ketika mouse di tekan.
        self.tempatMenggambar.unbind("<B1-Motion>")   //digunakan untuk mengosongkan perintah ketika mouse di gerakkan.
        self.tempatMenggambar.unbind("<ButtonRelease-1>")   //digunakan untuk mengosongkan perintah ketika mouse di lepas.

        self.tempatMenggambar.bind("<Button-1>", self.onclick_handler)  //memberikan perintah ketika mouse di klik. Yaitu menjalankan metode ‘onclick_handler’
        self.tempatMenggambar.bind("<B1-Motion>", self.mouse_move)  //memberikan perintah ketika mouse pindah atau bergerak. Yaitu menjalankan metode ‘mouse_move’
        self.tempatMenggambar.bind("<ButtonRelease-1>", self.onrelease_handler)  //memberikan perintah ketika mouse dilepas dari klik. Yaitu menjalankan metode ‘onrealease_handler’

    def buatTombol(self):  //membuat metode dengan nama ‘buatTombol’ yang berisi code untuk membuat tombol pilihan objek menggambar.
        Radiobutton(self.frameTombol, text='pensil', indicatoron=0, width=5, padx=10, variable=self.pilihan, relief='flat', value='1', command=self.menggambarDgPensil).pack(side=LEFT)  
        Radiobutton(self.frameTombol, text='garis', indicatoron=0, width=5, padx=10, variable=self.pilihan, relief='flat', value='2', command=self.menggambarBentuk).pack(side=LEFT)
        Radiobutton(self.frameTombol, text='kotak', indicatoron=0, width=5, padx=10, variable=self.pilihan, relief='flat', value='3', command=self.menggambarBentuk).pack(side=LEFT)
        Radiobutton(self.frameTombol, text='bulat', indicatoron=0, width=5, padx=10, variable=self.pilihan, relief='flat', value='4', command=self.menggambarBentuk).pack(side=LEFT)
        Radiobutton(self.frameTombol, text='arc', indicatoron=0, width=5, padx=10, variable=self.pilihan, relief='flat', value='5', command=self.menggambarBentuk).pack(side=LEFT)
        self.frameTombol.pack()

// code di atas digunakan untuk membuat radio button semua opsi atau pilihan objek menggambar yang akan digunakan untuk memeilih settingan menggambar nantinya. Serta dengan settingan tampilan yang telah saya sesuaikan. Seperti : ditempatkan di subframe ‘frameTombol’, isi text nya tergantung pada fungsinya, dan saya kasi indicatoron = 0 untuk menghilangkan efek titik pada radio buttonnya.  dengan lebar 5, padding 10, variable nya ‘pilihan’ yang berfungsi sebagai pengelompokkan tiap anggota radio button dan saya ‘flat’ kan agar tampilannya menarik, dengan nilai pilihan 1 dan perintah ketika di klik menjalankan metode tertentu pada ‘command’. Lalu langsung di masukkan ke subframe nya.

    def tempatTombolWarna(self):  //metode dengan nama ‘tempatTombolWarna’. Memiliki isi untuk membuat tombol hapus.
        self.box_value = StringVar()  //digunakan untuk membuat sebuah variabel untuk menampung nilai pilihan dari combobox.
        self.box = ttk.Combobox(self.frameWarna, textvariable=self.box_value,state='readonly', width=10)  //code yang digunakn untuk membuat combobox. Dengan setingan sbg berikut. Tempat meletakkannya di subframe ‘frameWarna’. Textvariable nya adalah ‘box_value’. Textvariabel digunakan untuk mendapatkan nilai perubahan darinya. State=’readonly’ digunakan agar combobox nya tidak bisa di edit. Dan lebarnya = ‘10’.
        self.box['values'] = ('warna garis', 'warna isi')  //digunakan untuk membuat isi dari combobox nya
        self.box.current(0)  //mengatur agar ‘warna garis’ terpilih yang pertama. Atau yang memiliki indeks 0.
        self.box.grid(row=0, column=1, columnspan=3)  //memasukkan combobox ke dalam subframe

        self.tombolWarna = Button(self.frameWarna, text='garis', width=3, bg=self.warna.get(), command=self.pilihWarna)  //digunakan untuk membuat tombol pemilih warna garis. Dengan settingan : tempat meletakkan = ‘frameWarna’. Text tombol = ‘garis’. Lebar = ‘3’.  Warna bagroundnya mengambil dari variabel ‘warna’. Dan akan menjalankan perintah atau metode ‘pilihWarna’.
        self.tombolWarna.grid(row=0, column=4, columnspan=2)  //memasukkan tombolwarna ke dalam sub window atau sub frame.

        self.tombolWarnaIsi = Button(self.frameWarna, text='Fill', width=3, bg=self.warnaFill.get(),command=self.pilihWarnaFill)//digunakan untuk membuat tombol pemilih warna isian objek. Dengan settingan : tempat meletakkan = ‘frameWarna’. Text tombol = ‘fill’. Lebar = ‘3’.  Warna bagroundnya mengambil dari variabel ‘pilihwarnaFill’. Dan akan menjalankan perintah atau metode ‘pilihWarnaFill’.
        self.tombolWarnaIsi.grid(row=0, column=6, columnspan=2)//memasukkan tombolWarnaIsi ke dalam sub window atau sub frame.

        self.tombolHapus = Button(self.frameWarna, text='hapus', width=3, command=self.hapus)  //digunakan untuk membuat tombol hapus. Dengan sub frame ‘frameWarna’ dan text tombol = ‘hapus’. Lebar =’3’ dan perintah ketika di klik menjalankan metode ‘hapus’.
        self.tombolHapus.grid(row=0, column=0)  //memasukkan tombol hapus ke dalam subframe ‘frameWarna’.
        self.tombolUndo = Button(self.frameWarna, text='undo', width=3, command=self.undo)  //digunakan untuk membuat tombol untuk fungsi undo. Dengan subframe atau tempat = ‘frameWarna’ text tombol = ‘undo’ dan lebar = ‘3’ dan perintah ketika di klik akan menjalankan perintah atau metode dengan nama ‘undo’.
        self.tombolUndo.grid(row=0, column=1)  //memasukkan tombol undo kedalam subframe ‘frameWarna’
        Button(self.frameWarna, text='no', command=self.setTransparant).grid(row=1, column=1)  //digunakan untuk membuat tombol transparan. Dengan tempat meletakkan di subframe ‘frameWarna’. Text tombol = ‘no’. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setTeransparant’.
        Button(self.frameWarna, bg='blue', activebackground='blue', command=self.setBiru).grid(row=1, column=2)  //digunakan untuk membuat tombol warna biru. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘blue’ atau biru.  Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah.  Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setBiru’.
        Button(self.frameWarna, bg='light blue', activebackground='light blue', command=self.setBiruMuda).grid(row=1, column=3)  //digunakan untuk membuat tombol warna biru cerah. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘light blue’ atau biru cerah. Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setBiruMuda’.
        Button(self.frameWarna, bg='green', activebackground='green', command=self.setHijau).grid(row=1, column=4)  //digunakan untuk membuat tombol warna hijau. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘green’ atau hijau. Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setHijau’.
        Button(self.frameWarna, bg='light green', activebackground='light green', command=self.setHijauMuda).grid(row=1, column=5)  //digunakan untuk membuat tombol warna hijau cerah. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘light green’ atau hijau muda.  Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setHijauMuda’.
        Button(self.frameWarna, bg='red', activebackground='red', command=self.setMerah).grid(row=1, column=6)  //digunakan untuk membuat tombol warna merah. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘green’ atau hijau.  Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setHijau’.
        Button(self.frameWarna, bg='pink', activebackground='pink', command=self.setMerahMuda).grid(row=1, column=7)  //digunakan untuk membuat tombol warna merah cerah. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘pink’ atau merah cerah.  Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setMerahMuda’.
        Button(self.frameWarna, bg='yellow', activebackground='yellow', command=self.setKuning).grid(row=1, column=8)  //digunakan untuk membuat tombol warna kuning. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘green’ atau hijau.  Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setHijau’.
        Button(self.frameWarna, bg='orange', activebackground='orange', command=self.setKuningMuda).grid(row=1, column=9)  //digunakan untuk membuat tombol warna oranye. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘orange’ atau oranye.  Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setKuningMuda’.
        Button(self.frameWarna, bg='black', activebackground='black', command=self.setHitam).grid(row=1, column=10)  //digunakan untuk membuat tombol warna hitam. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘black’ atau hitam.  Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setHitam’.
        Button(self.frameWarna, bg='magenta', activebackground='magenta', command=self.setMagenta).grid(row=1, column=11)  //digunakan untuk membuat tombol warna magenta. Dengan tempat meletakkan di subframe ‘frameWarna’. Dan background tombol berwarna ‘magenta’.  Warna ‘activebackground’ dibuat sama.. Agar saat kursor berada di atasnya, warnanya tidak berubah. Dan perintah ketika di klik akan menjalankan perintah atau metode ‘setMagenta’.

         
        self.frameWarna.pack()  //memasukkan subframe ‘frameWarna’ kedalam frame atau window utama

    def setTransparant(self):   //metode yang berisi perintah untuk mwngubah warna menjadi transparan
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('')  //mengosongkan variabel warna agar garis transparan
            self.tombolWarna.config(bg='#d9d9d9')  //mengubah warna background tombol pemilih warna garis menjadi warna abu-abu
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('')  //mengosongkan variabel warna agar isian transparan
            self.tombolWarnaIsi.config(bg='#d9d9d9')  //mengubah warna background tombol pemilih warna isian objek menjadi warna abu-abu

    def setBiru(self):   //metode yang berisi perintah untuk mwngubah warna menjadi Biru
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('blue')  //mengubah isi variabel warna menjadi ‘blue’. Agar garis berwarna biru
            self.tombolWarna.config(bg='blue')  //mengubah warna background tombol pemilih warna garis menjadi warna biru
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('blue')  //mengubah isi variabel warnaFill menjadi ‘blue’. Agar isian objek berwarna biru
            self.tombolWarnaIsi.config(bg='blue')  //mengubah warna background tombol pemilih warna isian objek menjadi warna biru

    def setBiruMuda(self):   //metode yang berisi perintah untuk mwngubah warna menjadi Biru muda
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('light blue')  //mengubah isi variabel warna menjadi ‘ light blue’. Agar garis berwarna biru cerah
            self.tombolWarna.config(bg='light blue')  //mengubah warna background tombol pemilih warna garis menjadi warna biru cerah
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('light blue')  //mengubah isi variabel warnaFill menjadi ‘ light blue’. Agar isian objek berwarna biru cerah
            self.tombolWarnaIsi.config(bg='light blue')  //mengubah warna background tombol pemilih warna isian objek menjadi warna biru cerah

    def setHijau(self):   //metode yang berisi perintah untuk mwngubah warna menjadi hijau
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('green')  //mengubah isi variabel warna menjadi ‘ green’. Agar garis berwarna hijau
            self.tombolWarna.config(bg='green')  //mengubah warna background tombol pemilih warna garis menjadi warna hijau
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('green')  //mengubah isi variabel warnaFill menjadi ‘ green’. Agar isian objek berwarna hijau
            self.tombolWarnaIsi.config(bg='green')  //mengubah warna background tombol pemilih warna isian objek menjadi warna hijau

    def setHijauMuda(self):   //metode yang berisi perintah untuk mwngubah warna menjadi hijau muda
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('light green')  //mengubah isi variabel warna menjadi ‘ light green’. Agar garis berwarna hijau cerah
            self.tombolWarna.config(bg='light green')  //mengubah warna background tombol pemilih warna garis menjadi warna hijau cerah
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('light green')  //mengubah isi variabel warnaFill menjadi ‘ light green’. Agar isian objek berwarna hijau cerah
            self.tombolWarnaIsi.config(bg='light green')  //mengubah warna background tombol pemilih warna isian objek menjadi warna hijau cerah

    def setMerah(self):   //metode yang berisi perintah untuk mwngubah warna menjadi merah
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('red')  //mengubah isi variabel warna menjadi ‘ red’. Agar garis berwarna merah
            self.tombolWarna.config(bg='red')  //mengubah warna background tombol pemilih warna garis menjadi warna merah
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('red')  //mengubah isi variabel warnaFill menjadi ‘ red’. Agar isian objek berwarna merah
            self.tombolWarnaIsi.config(bg='red')  //mengubah warna background tombol pemilih warna isian objek menjadi warna merah

    def setMerahMuda(self):   //metode yang berisi perintah untuk mwngubah warna menjadi merah muda
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('pink')  //mengubah isi variabel warna menjadi ‘ pink’. Agar garis berwarna merah muda atau cerah
            self.tombolWarna.config(bg='pink')  //mengubah warna background tombol pemilih warna garis menjadi warna merah muda
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('pink')  //mengubah isi variabel warnaFill menjadi ‘ pink’. Agar isian objek berwarna merah muda atau cerah
            self.tombolWarnaIsi.config(bg='pink')  //mengubah warna background tombol pemilih warna isian objek menjadi warna merah muda/cerah

    def setKuning(self):   //metode yang berisi perintah untuk mwngubah warna menjadi kuning
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('yellow')  //mengubah isi variabel warna menjadi ‘ light yellow’. Agar garis berwarna kuning
            self.tombolWarna.config(bg='yellow')  //mengubah warna background tombol pemilih warna garis menjadi warna kuning
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('yellow')  //mengubah isi variabel warnaFill menjadi ‘ yellow’. Agar isian objek berwarna kuning
            self.tombolWarnaIsi.config(bg='yellow')  //mengubah warna background tombol pemilih warna isian objek menjadi warna kuning

    def setKuningMuda(self):   //metode yang berisi perintah untuk mwngubah warna menjadi oranye
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('orange')  //mengubah isi variabel warna menjadi ‘ orange’. Agar garis berwarna oranye
            self.tombolWarna.config(bg='orange')  //mengubah warna background tombol pemilih warna garis menjadi warna oranye
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('orange')  //mengubah isi variabel warnaFill menjadi ‘ orange’. Agar isian objek berwarna orange
            self.tombolWarnaIsi.config(bg='orange')  //mengubah warna background tombol pemilih warna isian objek menjadi warna oranye

    def setHitam(self):   //metode yang berisi perintah untuk mwngubah warna menjadi hitam
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('black')  //mengubah isi variabel warna menjadi ‘ back’. Agar garis berwarna hitam
            self.tombolWarna.config(bg='black')  //mengubah warna background tombol pemilih warna garis menjadi warna hitam
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('black')  //mengubah isi variabel warnaFill menjadi ‘ hitam’. Agar isian objek berwarna black
            self.tombolWarnaIsi.config(bg='black')  //mengubah warna background tombol pemilih warna isian objek menjadi warna hitam

    def setMagenta(self):   //metode yang berisi perintah untuk mwngubah warna menjadi magenta
        if self.box.get() == 'warna garis':  //mengecek combo box pemilih warna. Apakah nilai yang terpilih adalah “warna garis”
            self.warna.set('magenta')  //mengubah isi variabel warna menjadi ‘ magenta’. Agar garis berwarna magenta
            self.tombolWarna.config(bg='magenta')  //mengubah warna background tombol pemilih warna garis menjadi warna magenta
        else:  //kondisi ketika combobox pemilih warna yang terpilih adalah ‘warna isi’.
            self.warnaFill.set('magenta')  //mengubah isi variabel warnaFill menjadi ‘ magenta’. Agar isian objek berwarna magenta
            self.tombolWarnaIsi.config(bg='magenta')  //mengubah warna background tombol pemilih warna isian objek menjadi warna magenta

    def hapus(self):  //metode dengan nama ‘hapus’ yang akan digunakan untuk membersihkan kanvas.
        self.tempatMenggambar.delete("all")  //code untuk membersihkan kanvas.
        self.koordinat=[]  //digunakan untuk mengosongkan penampung koordinat

    def jikaDilepas(self,event):  //metode yang akan dijalankan ketika mouse di klik atau di tekan
        self.b1 = "diKlik"  //mengubah nilai variabel menjadi string ‘diklik’.

    def jikaDiKlik(self,event):  //metode dengan nama ‘jikaDiklik’ dan akan di jalankan ketika mouse dilepas dari proses drag.
        self.b1 = "tidakDiKlik"  //mengubah nilai variabel menjadi ‘tidakDiKlik’.
        self.xold = None  //mengosongkan koordinat x
        self.yold = None  //mengosongkan koordinat y

    def pembuatGaris(self,event):  //metode dengan nama ‘pembuatGaris’ yang digunakan untuk membuat garisnya. Dan akan di jalan kan ketika mouse di drag.
        if self.b1 == "diKlik":  //mengecek apakah variabel ‘b1’ bernilai ‘diKlik’. Yang artinya apakah mouse sudah di klik
            if self.xold is not None and self.yold is not None:  //mengecek apakah xold dan yold tidak kosong.
            garis = event.widget.create_line(self.xold, self.yold, event.x, event.y, smooth='true',width=self.ukuran.get(), fill=self.warna.get(), tag=str(self.tag))  //digunakan untuk membuat atau menggambar garis dengan settingan yang cukup banyak. Yaitu titik koordinat awal x = ‘xold’, titik koordinat awal y = ‘yold’ dan sampai titik koordinat x = ‘event.x’ dan y = ‘event.y’. Dengan memberikan efek halus ‘smooth=true’. Dan ukuran tebal garis mendapatkan dari variabel ‘ukuran’. Dan warna nya dari variabel ‘warna’. Dan tag untuk identifikasi penghapusan dari variabel ‘tag’.
                self.koordinat.append((self.xold,self.yold))  //digunakan untuk menampung titik koordinatnya..
                self.tampungTag.append(garis)  //menampung garis atau objek nya. Untuk kepentingan identifikasi keberadaan objek untuk undo
                self.tag += 1  //digunakan untuk menambah nilai tag untuk selalu di tambah sebanyak 1. Untuk menghindari kesamaan tag dengan objek lain.
        self.xold = event.x  //digunakan untuk menampung koordinat x.
        self.yold = event.y  //digunakan untuk menampung koordinat y.

    def pilihWarna(self):  //metode yang akan di jalankan ketika tombol pemilih warna garis di klik. Dan memiliki code program untuk mengubah warna garis
        (rgb, hx) = askcolor()  //menampilkan window pemilih warna. Dan menyimpan hasil nya di variabel ‘hx’
        self.tombolWarna.config(bg=hx)  //mengubah warna background tombol pemilih warna garis menjadi warna yang telah di pilih sebelumnya. Atau yang ada di variabel ‘hx’.
        self.warna.set(hx)  //mengubah isi variabel ‘warna’ menjadi warna pilihan atau warna yang ada di var ‘hx’. Yang artinya merubah warna garis objek.

    def pilihWarnaFill(self):  //metode yang akan di jalankan ketika tombol pemilih warna isi di klik. Dan memiliki code program untuk mengubah warna isian objek
        (rgb, hx) = askcolor()  //menampilkan window pemilih warna. Dan menyimpan hasil nya di variabel ‘hx’
        self.tombolWarnaIsi.config(bg=hx)  //mengubah warna background tombol pemilih warna isi menjadi warna yang telah di pilih sebelumnya. Atau yang ada di variabel ‘hx’.
        self.warnaFill.set(hx))  //mengubah isi variabel ‘warnaFill’ menjadi warna pilihan atau warna yang ada di var ‘hx’. Yang artinya merubah warna isian objek.

 def buatSlider(self):  //metode dengan nama ‘buatSlider’ yang berisi perintah untuk membuat  slider pengubah ukuran garisnya.
        self.slider = Scale(self.frameWarna, from_=1, to=20, label='ukuran :', orient=HORIZONTAL, command=self.setUkuran).grid(row=0, column=0, columnspan=2)  //digunakan untuk membuat slider pengubah ukuran garisnya. Dengan settingan nilai dari 1 sampai 20. Dan memiliki teks atau label = “ukuran” dan posisi ‘horizontal’. Dan perintahnya ketika nilai berubah adalah menjalankan perintah atau metode dengan nama ‘setUkuran’. 

    def setUkuran(self, nilai):  //metode yang berisi code program untuk digunakan untuk mengubah nilai dari variabel ukuran garis objek.
        self.ukuran.set(nilai)  //digunakan untuk mengubah ukuran garis objek saat menggambar.

    def undo(self):  //metode dengan nama ‘undo’ yang berfungsi untuk perintah undo
        if len(self.tampungTag):  //digunakn untuk mengecek apakah list dengan variabel ‘tampungTag’ ada isinya atau tidak. Yang artinya sama saja kita mengecek apakah di kanvas ada objek yang digambar atau tidak.
            self.tempatMenggambar.delete(self.tampungTag.pop())  //digunakan untuk menghapus objek yang telah di gambar sebelumnya secara berurtan. Dari yang paling baru


    def onclick_handler(self, event):   //metode yang dengan nama ‘onclick_handler’ yang akan digunakan sebagai metode yang akan dijalankan ketika mouse ditekan dan objek menggambar selain pensil
        self.start = [event.x, event.y]  //menampung titik koordinat x dan y mouse saat di klik. Dan menampung nya dalam list agar lebih efisien.

    def onrelease_handler(self, event):  //metode dengan nama ‘onrelease_handler’ yang akan dijalankan ketika mouse di lepas dari proses klik atau drag.
        if self.start is not None:  //mengecek apakah variabel ‘start’ tidak sama dengan ‘None’
            x = self.start[0]  //mendapatkan titik koordinat x saat mouse di klik.
            y = self.start[1]  //mendapatkan titik koordinat y saat mouse di klik.
            event.widget.delete(self.yangLama)  //menghapus pembuatan objek saat di geser. Untuk memahami code yang ini, silahkan hapus dan jalankan. Lalu lihat perbedaannya

            if self.pilihan.get() == 2:  //untuk mengecek nilai pilihan radio button untuk menggambar objek apakah sama dengan 2. Atau apakah sama dengan garis.
                self.bentuk = event.widget.create_line(x, y, event.x, event.y, width=self.ukuran.get(),fill=self.warna.get())  //digunakan untuk membuat garis dengan koordinat dari posisi mouse dan tebal gari sama dengan isi dari variabel ‘ukuran’ dan warna sama dengan isi dari variabel ‘warna’.
            elif self.pilihan.get() == 3:  //untuk mengecek nilai pilihan radio button untuk menggambar objek apakah sama dengan 3.Atau apakah sama dengan kotak.
                self.bentuk = event.widget.create_rectangle(x, y, event.x, event.y, width=self.ukuran.get(),fill=self.warnaFill.get(), outline=self.warna.get())  //digunakan untuk membuat kotak atau rectangle dengan koordinat dari posisi mouse dan tebal gari sama dengan isi dari variabel ‘ukuran’ , warna garis sama dengan isi dari variabel ‘warna’ warna isian sama dengan isi dari variabel ‘warnaFill’.
            elif self.pilihan.get() == 4:  //untuk mengecek nilai pilihan radio button untuk menggambar objek apakah sama dengan 4.Atau apakah sama dengan lingkaran.
                self.bentuk = event.widget.create_oval(x, y, event.x, event.y, width=self.ukuran.get(),fill=self.warnaFill.get(), outline=self.warna.get())  //digunakan untuk membuat lingkaran atau oval dengan koordinat dari posisi mouse dan tebal gari sama dengan isi dari variabel ‘ukuran’ , warna garis sama dengan isi dari variabel ‘warna’ warna isian sama dengan isi dari variabel ‘warnaFill’.
            elif self.pilihan.get() == 5:  //untuk mengecek nilai pilihan radio button untuk menggambar objek apakah sama dengan 5.Atau apakah sama dengan arc.
                self.bentuk = event.widget.create_arc(x, y, event.x, event.y, width=self.ukuran.get(),fill=self.warnaFill.get(), outline=self.warna.get())  //digunakan untuk membuat arc atau seperempat lingkaran dengan koordinat dari posisi mouse dan tebal gari sama dengan isi dari variabel ‘ukuran’ , warna garis sama dengan isi dari variabel ‘warna’ warna isian sama dengan isi dari variabel ‘warnaFill’.
            self.tampungTag.append(self.bentuk)  //menampung setiap objek yang dibuat untuk kepentingan penghapusan saat proses undo
            self.start = None  //digunakan untuk mengosongkan variabel start

    def mouse_move(self, event):  //metode dengan nama ‘mouse_move’ yang akan dijalankan ketika mouse bergerak.
        if self.start is not None:  //mengecek apakah variabel ‘start’ tidak kosong


//code dibawah ini sama persis denga code di atas ya temen - temen.. Jadi saya rasa tidak perlu saya jelaskan kembali. Karena saya rasa sangat mubazir. Tapi saya akn menjelaskan nya beberapa saja yang beda.

            x = self.start[0]
            y = self.start[1]
            if self.yangLama:  //mengecek dan memastikan variabel ‘yangLama’ tidak kosong.
                event.widget.delete(self.yangLama)  //menghapus objek yang telah di buat sebelumnya. Untuk mengetahui perbedaannya, silahkan hapus dan cek perbedaannya.
            if self.pilihan.get() == 2:
                self.yangLama = event.widget.create_line(x, y, event.x, event.y, width=self.ukuran.get(),fill=self.warna.get())
            elif self.pilihan.get() == 3:
                self.yangLama = event.widget.create_rectangle(x, y, event.x, event.y, width=self.ukuran.get(),fill=self.warnaFill.get(), outline=self.warna.get())
            elif self.pilihan.get() == 4:
                self.yangLama = event.widget.create_oval(x, y, event.x, event.y, width=self.ukuran.get(),fill=self.warnaFill.get(), outline=self.warna.get())
            elif self.pilihan.get() == 5:
                self.yangLama = event.widget.create_arc(x, y, event.x, event.y, width=self.ukuran.get(),fill=self.warnaFill.get(), outline=self.warna.get())


if __name__ == "__main__":  //merrupakan metode utama. Yang artinya akan dijalankan atau di eksekusi pertama kali ketika file di run.
    root=Tk()  //membuat window. Atau menampilkan window.
    root.title('aplikasi menggambar -> mn-belajarpython.blogspot.co.id')  //digunakan untuk menampilkan judul window.
    root.wm_geometry("%dx%d" % (430, 430))  //digunakan untuk mengatur lebar window
    ImageGenerator(root)  //memanggil class aplikasi menggambarnya

    root.mainloop()  //diperlukan agar tidak langsung close saat window tampil.



nah itu dia temen - temen penjelasan dari code program diatas.. Semoga penjelasan yang sudah saya berikan tadi dapat sedikit membantu penjelasan code program untuk membuat aplikasi menggambar versi yang kelima pada postingan kali ini ya...

Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu loh.. sehingga, nantinya kita cukup klik dua kali saja untuk menjalankan aplikasi ini... tanpa perlu repot - repot membuka nya di IDLE atau IDE python.. nah seperti apa caranya? cukup mudah kok.. dan saya juga sudah membuatkan tutorialnya.. untuk kalian yang menggunakan windows, KALIAN BISA KLIK DISINI ya temen - temen.. atau jika pada link pertama terlalu rumit, KALIAN BISA MENCOBA CARA INI ya.... dan bagi pengguna linux ? tenang saja.. bisa juga kok membuat file executable nya.. untuk melihat tutorialnya, KALIAN BISA KLIK DISINI temen - temen...



Dan itu dia temen - temen cara untuk membuat aplikasi menggambar versi kelima ini.. Semoga apa yang telah saya sampaikan di atas dapat memberikan manfaat bagi kalian yaa... Dan tentu saja saya harap dapat menjadikan referensi untuk membuat sebuah produk atau untuk belajar python..

Oke sampai disini dulu ya temen - temen bahasan pada postingan saya kali ini,, jangan lupa baca tutorial menarik lainnya ya.. Dan jangan lupa berkomentar atau berikan masukan atau kritikan kalian ya... Terimakasih.. Sampai jumpa di tutorial yang lainnya ya...

Wassalamualaikum wr.wb.
Previous
Next Post »
Thanks for your comment