Aplikasi pembuka foto dari Tkinter versi 5

BelajarPython - assalamualaikum wr. wb.

Jumpa lagi temen - temen.. Pada kesempatan kali ini, saya akan mengajak kalian untuk belajar membuat mini aplikasi dari tkinter.. Menggunakan library yang cukup sederhana ini, saya akan mencoba untuk mengajak berkereasi.. Walaupun fungsi nya tak sebagus aplikasi yang sejenis... Nah lalu aplikasi apa yang akan kita buat kali ini ? Langsung saja yuk kita simak sama - sama postingan kali ini...

Penjelasan umum Mini - Aplikasi yang akan di buat.

Pada postingan kali ini, saya akan mencoba untuk meng upgrade versi aplikasi pembuka foto yang telah saya posting sebelumnya... Yaitu versi ke lima.. Jika kalian belum atau ingin membacanya, kalian bisa KLIK DISINI.  Walaupun dengan tampilan seadanya dan kesederhanaan interface Tkinter. Saya tetap semangat untuk meningkatkan fitur mini aplikasi ini.. Semoga kalian juga demikian ya.. hehe

Pembuka foto versi kali ini merupakan versi yang ke lima.. Dimana pada versi kali ini, saya akan menambahkan fitur yang cukup berguna.. Yaitu untuk mem fungsikan scroll di mouse untuk menscroll kebawah maupun ke atas pada kanvas tempat menampilkan foto di aplikasi kali ini.. Jadi, pada versi - versi sebelumnya, kita tidak bisa menggunakan scroll pada mouse.. Untuk menscroll kanvas, kita harus meng klik scrollbarnya.. Tentu hal tersebut agak ribet dan tidak efisien ya..

Oya, perlu kalian ketahui ya, Aplikasi ini memiliki banyak versi yang tentu saja memiliki penambahan fitur di tiap versinya.. Dengan begitu, saya harap kalian dapat dengan mudah mempelajari code programnya.. Untuk membaca daftar isi atau rincian lengkap fitur dan pengembangan tiap versinya, KALIAN BISA KLIK DISINI YA temen - temen...

Rincian lengkap aplikasi Pembuka Foto Tkinter versi 5.0

Selanjutnya saya akan memperkenalkan lebih dalam lagi mengenai aplikasi pembuka foto tkinter ini..  Oya perlu kalian ketahui, pada aplikasi kali ini, saya menggunakan library tambahan PILLOW atau PIL. Untuk menginstall library tersebut, kalian BISA KLIK DISINI.

Oke, Langsung saja yuk kita simak sama - sama rincian lengkap dari aplikasi pembuka foto tkinter yang akan saya bagi kan kali ini..


Nama: mn-Photoview 5.0
Versi: 5.0 | klik disini untuk membaca versi selanjutnya.
Platform: Python 3.x
Modul: Tkinter dan PILLOW. Klik disini untuk menginstallnya.
Baris Code: kurang lebih 168 baris code program.
Terdiri dari: 1 class dan 15 metode.
Fitur: memfungsikan scroll pada mouse untuk menggeser kanvas dari atas kebawah atau sebaliknya.
syarat menjalankan: install python 3.x dan PILLOW atau PIL, punya editor teks atau IDE.
Cara menjalankan: install python 3 dan PILLOW atau PIL, 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 pembuka foto tkinter versi 5.0

Nah setelah kita mengenal aplikasi yang akan saya bagikan kali ini, maka selanjutnya kita akan langsung memasuki segmen yang palin penting pada postingan kali ini.. Yaitu membagikan code program dari mini aplikasi nya.. Langsung saja yuk kita simak sama - sama code programnya di bawah ini...

from tkinter import *
from PIL import Image
from PIL import ImageTk
from tkinter import filedialog

class GUI:
    def __init__(self,root):
        self.frame = Frame(root,relief=SUNKEN)
        self.frameTombol=Frame(root, relief=SUNKEN)
        self.frameHapus=Frame(root, relief=SUNKEN)
        self.foto = StringVar()

        self.pertambahan = 0.03
        self.ukuran = DoubleVar()
        self.ukuran.set(1)
        self.isiKolom=StringVar()

        root.title('Phowo viewer - mn-belajarpython.blogspot.co.id')

        self.buatScrollBarr()
        self.canvas = Canvas(self.frame, width=500, height=300, bg='white', xscrollcommand=self.xscrollbar.set,
                             yscrollcommand=self.yscrollbar.set)
        self.canvas.grid(row=0, column=0)
        self.buatCanvas()
        self.buatTombol()

    def buatScrollBarr(self):
        self.xscrollbar = Scrollbar(self.frame, orient=HORIZONTAL)
        self.xscrollbar.grid(row=1, column=0, sticky=E+W)
        self.yscrollbar = Scrollbar(self.frame)
        self.yscrollbar.grid(row=0, column=1, sticky=N+S)

    def buatCanvas(self):
        try :
            pil_image = Image.open(self.foto.get())
            width_org, height_org = pil_image.size

            factor = self.ukuran.get()

            width = int(width_org * factor)
            height = int(height_org * factor)

            pil_image2 = pil_image.resize((width, height), Image.ANTIALIAS)
            self.img = ImageTk.PhotoImage(pil_image2)

            self.canvas.create_image(0,0,image=self.img)
        except:
            pass

        self.canvas.config(scrollregion=self.canvas.bbox(ALL))
        self.xscrollbar.config(command=self.canvas.xview)
        self.yscrollbar.config(command=self.canvas.yview)

        self.frame.pack()
        self._addMouseBindings()


    def gambarPasWindow(self, tinggi, lebar):

        try :
            pil_image = Image.open(self.foto.get())
            width_org, height_org = pil_image.size

            pil_image2 = pil_image.resize((lebar, tinggi), Image.ANTIALIAS)
            self.img = ImageTk.PhotoImage(pil_image2)

            self.canvas.create_image(0,0,image=self.img)
        except:
            pass

        self.canvas.config(scrollregion=self.canvas.bbox(ALL))
        self.xscrollbar.config(command=self.canvas.xview)
        self.yscrollbar.config(command=self.canvas.yview)

        self._addMouseBindings()


    def buatTombol(self):
        Button(self.frameTombol,relief='flat', text="open", command=self.perintahBuka).grid(row=0, column=0)
        Button(self.frameTombol,relief='flat', text="zoom in", command=self.perintahPerbesar).grid(row=0, column=1)
        Button(self.frameTombol,relief='flat', text="zoom out", command=self.perintahPerkecil).grid(row=0, column=2)
        Button(self.frameTombol,relief='flat', text="normal", command=self.perintahNormal).grid(row=0, column=3)
        Button(self.frameTombol,relief='flat', text="fit", command=self.perintahFitToWindow).grid(row=0, column=4)
        Entry(self.frameHapus, width=50, textvariable=self.isiKolom).grid(row=0, column=0)
        Button(self.frameHapus,relief='flat', text="hapus", command=self.perintahHapus).grid(row=0, column=1)
        self.frameHapus.pack()
        self.frameTombol.pack()

    def perintahBuka(self):
        tipeFile = (('image files', '*.jpg'), ('png files', '*.png'), ('all files', '*'))
        self.pembuka = filedialog.askopenfilename(filetypes=tipeFile)
        if self.pembuka :
            self.isiKolom.set(self.pembuka)
            self.foto.set(self.pembuka)
            self.buatCanvas()


    def perintahPerbesar(self):
        self.ukuran.set(self.ukuran.get() + self.pertambahan)
        self.buatCanvas()

    def perintahNormal(self):
        self.ukuran.set(1)
        self.buatCanvas()

    def perintahPerkecil(self):
        try :
            self.ukuran.set(self.ukuran.get() - self.pertambahan)
            self.buatCanvas()
        except :
            self.ukuran.set(0.01)
            self.buatCanvas()

    def perintahHapus(self):
        self.canvas.delete('all')
        self.foto.set('')
        self.isiKolom.set('')

    def perintahFitToWindow(self):
        lebar = self.canvas.winfo_width()
        tinggi = self.canvas.winfo_height()
        self.gambarPasWindow(tinggi, lebar)



    def _addMouseBindings(self):
        # mouse wheel scroll
        self.canvas.bind('<4>', lambda event: self.canvas.yview('scroll', -1, 'units'))
        self.canvas.bind('<5>', lambda event: self.canvas.yview('scroll', 1, 'units'))


        # dragging canvas with mouse middle button
        self.canvas.bind("", self.__start_scroll)
        self.canvas.bind("", self.__update_scroll)
        self.canvas.bind("", self.__stop_scroll)

    def __start_scroll(self, event):
        # set the scrolling increment.
        # value of 0 is unlimited and very fast
        # set it to 1,2,3 or whatever to make it slower
        self.canvas.config(yscrollincrement=3)
        self.canvas.config(xscrollincrement=3)

        self._starting_drag_position = (event.x, event.y)

        self.canvas.config(cursor="fleur")

    def __update_scroll(self, event):
        deltaX = event.x - self._starting_drag_position[0]
        deltaY = event.y - self._starting_drag_position[1]

        self.canvas.xview('scroll', deltaX, 'units')
        self.canvas.yview('scroll', deltaY, 'units')

        self._starting_drag_position = (event.x, event.y)

    def __stop_scroll(self, event):
        # set scrolling speed back to 0, so that mouse scrolling
        # works as expected.
        self.canvas.config(xscrollincrement=0)
        self.canvas.config(yscrollincrement=0)

        self.canvas.config(cursor="")


root = Tk()
GUI(root)
root.mainloop()


Nah itu dia temen - temen code programnya.. Lalu seperti apa tampilannya ketika code program di atas saya Run atau di jalankan ? Biar tidak penasaran , Langsung saja yuk kita simak sama - sama contoh screenshoot dari aplikasi pembuka foto tkinter kali ini... Cek pada gambar di bawah ini ya temen - temen..





Tampilannya sama saja ya temen - temen.. Namun, untuk melihat perubahannya, kalain harus mencoba nya seidiri... Jadi silahkan copy dan paste code program di atas lalu jalankan code program nya ya.. Tapi sebelum nya harus menginstall pillow nya dulu dan tentu saja harus install python 3.x nya.. Hehe.. Lalu buka sebuah gambar dan zoom in... Lalu fungsikan scroll pada mouse kalian ya...


Sekali lagi saya ingatkan 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...

Penjelasan Code program untuk membuat Aplikasi Pembuka Foto Tkinter versi 5.0

Nah, setelah kita tau, code program dan tampilan aplikasi yang akan kita buat kali ini, maka  pada segmen ini saya akan menjelaskan baris demi baris dari code program diatas.. Hal ini saya lakukan dengan harapan dapat membantu proses pemahaman kalian nantinya.. Langsung saja yuk kita simak sama - sama penjelasannya 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 untu mengimport semua class yang ada di library tkinter
from PIL import Image  //digunakan untuk mengimport class “Image” dari Library “PIL”.
from PIL import ImageTk  //digunakan untuk mengimport class “ImageTk” dari librari PIL
from tkinter import filedialog  //digunakan untuk mengimport ‘filedialog’ dari library ‘tkinter’.

class GUI:  //digunakan untuk membuat class dengan nama ‘GUI’ yang akan digunakan untuk membuat pembuka foto nya.
    def __init__(self,root):  //digunakan untuk membuat sebuah konstruktor dari class ‘GUI’.
        self.frame = Frame(root,relief=SUNKEN)  //digunakan untuk membuat sebah frame utama yang akan digunakan untuk membuat frame utama. Dan disimpan ke dalam variabel ‘frame’.
        self.frameTombol=Frame(root, relief=SUNKEN)  //digunakan untuk membuat sebuah frame untuk tempat tombol. Dan disimpan ke dalam variabel ‘frameTombol’.
        self.frameHapus=Frame(root, relief=SUNKEN)  //digunakan untuk membuat sebuah frame untuk tempat tombol hapus dan penampil lokasi gambar. Dan disimpan ke dalam variabel ‘frameTombol’.
        self.foto = StringVar()  //digunakan untuk membuat variabel dengan nama ‘foto’ yang menampung class ‘StringVar’ dan akan digunakan untuk menampung path atau lokasi foto.

       self.pertambahan = 0.03  //mendefinisikan variabel dengan nama ‘pertambahan’ dengan nilai ‘0.03’ yang akan digunakan sebagai angka perbesaran dan perkecilan foto nantinya.
        self.ukuran = DoubleVar()  //digunakan untuk membuat variabel dengan nama ‘ukuran’ yang menampung class ‘DoubleVar’ dan akan digunakan untuk menampung nilai perbesaran foto.
        self.ukuran.set(1)  //digunakan untuk mengisi variabel ‘ukuran’ dengan nilai 1.
        self.isiKolom=StringVar()  //digunakan untuk membuat variabel dengan nama ‘isiKolom’ yang menampung class ‘StringVar’ dan akan digunakan untuk menampung lokasi gambar.

        root.title('Phowo viewer - mn-belajarpython.blogspot.co.id')  //digunakan untuk mengubah judul window.

            self.canvas = Canvas(self.frame, width=750, height=450, bg='white', xscrollcommand=self.xscrollbar.set, yscrollcommand=self.yscrollbar.set)  //digunakan untuk membuat sebuah kanvas. Dan disimpan ke dalam variabel ‘canvas’. Dengan parameter “frame” sebagai tempat penempatan di window. Lebar sebesar 750 dan tinggi 450. Dengan background(bg=white) adalah putih. Dan menghubungkan slide kanan dan kiri dengan scrollbar yang ada pada variabel ‘xscrollbar’. Dan perintah slide atas bawah dihubungkan dengan scrollbar yang ada di dalam variabel ‘yscrollbar’.
            self.canvas.grid(row=0, column=0)  //digunakan untuk memasukkan ‘canvas’ ke dalam window.

        self.buatScrollBarr()  //digunakan untuk memanggil atau menjalankan sebuah metode dengan nama ‘buatScrollBar’.
        self.buatCanvas()  //digunakan untuk memanggil atau menjalankan sebuah metode dengan nama ‘buatCanvas’.
        self.buatTombol()  //digunakan untuk memanggil atau menjalankan sebuah metode dengan nama ‘buatTombol’.

    def buatScrollBarr(self):  //digunakan untuk membuat metode dengan nama ‘buatScrollBar’ yang tentu saja untuk membuat scrollbar.
        self.xscrollbar = Scrollbar(self.frame, orient=HORIZONTAL)  //digunakan untuk membuat sebuah scrollbar  horizontal. Yang disimpan ke dalam variabel ‘xscrollbar’.
        self.xscrollbar.grid(row=1, column=0, sticky=E+W)  //digunakan untuk memasukkan scrollbar yang ada di dalam variabel ‘xscrollbar’ kedalam window.
        self.yscrollbar = Scrollbar(self.frame)  //digunakan untuk membuat sebuah scrollbar  vertical. Yang disimpan ke dalam variabel ‘yscrollbar’.
        self.yscrollbar.grid(row=0, column=1, sticky=N+S)  //digunakan untuk memasukkan scrollbar yang ada di dalam variabel ‘yscrollbar’ kedalam window.

    def buatCanvas(self):  //digunakan untuk membua metode dengan nama ‘buatCanvas’. Yang akan digunakan untuk membuat canvas dan menampilkan gambar.
        try :  //digunakan untuk mencoba menjalankan beberapa code program.
            pil_image = Image.open(self.foto.get())  //digunakan untuk membuka sebuah gambar yang lokasinya ada di dalam variabel ‘foto’. Dan disimpan ke dalam variabel ‘pil_image’.
            width_org, height_org = pil_image.size  //digunakan untuk mendapatkan ukuran gambar yang akan dibuka. Dengan nilai tinggi nya akan di tampung ke dalam variabel ‘height_org’ dan lebarnya akan di tampung ke dalam variabel ‘width_org’.

            factor = self.ukuran.get()  //digunakan untuk mendapatkan nilai yang ada di variabel ‘ukuran’. Dan disimpan ke dalam variabel ‘factor’.

            width = int(width_org * factor)  //digunakan untuk mengalikan ukuran lebar asli foto yang ada di variabel ‘width_org’ dengan nilai pembesaran atau perkecilan yang ada pada variabel ‘factor’ dan di konversi menjadi ‘int’. Dan disimpan ke dalam variabel ‘width’.
            height = int(height_org * factor)  //digunakan untuk mengalikan ukuran tinggi asli foto yang ada di variabel ‘height_org’ dengan nilai pembesaran atau perkecilan yang ada pada variabel ‘factor’ dan di konversi menjadi ‘int’. Dan disimpan ke dalam variabel ‘height’.

            pil_image2 = pil_image.resize((width, height), Image.ANTIALIAS)  //digunakanuntuk mengubah ukuran foto dengan nilai yang ada di variabel ‘width’ dan ‘height’ yang telah di definisikan sebelumnya. Dan disimpan ke dalam variabel ‘pil_image2’.
            self.img = ImageTk.PhotoImage(pil_image2)  //digunakan untuk memanggil metode dengan nama ‘PhotoImage’ yang ada di class ‘ImageTk’ dengan memasukkan variabel ‘pil_image’ sebagai parameter. Dan disimpan ke dalam variabel ‘img’.

            self.canvas.create_image(0,0,image=self.img)  //digunakan untuk memasukkan gambar yang telah dibuka ke dalam canvas.
        except:  //digunakan untuk menjalankan beberapa code program ketika pada block code ‘try’ terdapat eror.
            print("foto atau folder yang anda masukkan tidak benar. mohon koreksi ulang")  //digunakan untuk mencetak teks atau pesan error.

        self.canvas.config(scrollregion=self.canvas.bbox(ALL))  //digunakan untuk meng aktifkan scrollbar pada canvas.
        self.xscrollbar.config(command=self.canvas.xview)  //digunakan untuk menghubungkan slide kanan kiri dengan scrollbar yang ada di variabel ‘xscrollbar’
        self.yscrollbar.config(command=self.canvas.yview)  //digunakan untuk menghubungkan slide atas bawah dengan scrollbar yang ada di variabel ‘yscrollbar’

        self.frame.pack()  //digunakan untuk memasukkan frame utama kedalam window..

        self._addMouseBindings()  //digunakan untuk memanggil atau menjalankan metode dengan nama ‘_addMouseBindings’

    def gambarPasWindow(self, tinggi, lebar):  //digunakan untuk membuat metode dengan nama ‘gambarPasWindow’ yang akan digunakan untuk membuat gambar agar pas dengan lebar kanvas. Dengan membuatuhkan dua parameter tambahan. Yaitu ‘tinggi’ dan ‘lebar’ untuk mengetahui ukuran kanvas.

        try :  //digunakan untuk mencoba beberapa code program
            pil_image = Image.open(self.foto.get())  //digunakan untuk membuka foto ulang. Dengan mengambil lokasi fotonya di vaiabel ‘foto’. Lalu disimpan ke dalam variabel ‘pil_image’.
            width_org, height_org = pil_image.size  //digunakan untuk mendapatkan ukuran gambar. Nilai lebar nya di tampung ke dalam variabel ‘width_org’ dan tinggi nya di masukkan ke dalam variabel ‘height_org’.

            pil_image2 = pil_image.resize((lebar, tinggi), Image.ANTIALIAS)  //digunakan untuk mengubah ukuran gambar sesuai dengan parameter yang sudah dimasukkan melalui parameter variabel ‘lebar’ dan ‘tinggi’.
            self.img = ImageTk.PhotoImage(pil_image2)  //digunakan mengkonversi gambar agar bisa dimasukkan ke dalam kanvas. Lalu hasilnya ditampung ke dalam variabel ‘img’

            self.canvas.create_image(0,0,image=self.img)  //digunakan untuk memasukkan gambar yang sudah kita proses tadi ke dalam kanvas.
        except:  //digunakan untuk menjalankan code program ketika code program yang ada di block ‘try’ terdapat error.
            pass  //digunakan untuk tidak melakukan apa apa.

        self.canvas.config(scrollregion=self.canvas.bbox(ALL))  //digunakan untuk meng aktifkan scrollbar pada canvas.
        self.xscrollbar.config(command=self.canvas.xview)  //digunakan untuk menghubungkan slide kanan kiri dengan scrollbar yang ada di variabel ‘xscrollbar’
        self.yscrollbar.config(command=self.canvas.yview)  //digunakan untuk menghubungkan slide atas bawah dengan scrollbar yang ada di variabel ‘yscrollbar’
        self._addMouseBindings()  //digunakan untuk memanggil atau menjalankan metode dengan nama ‘_addMouseBindings’

    def buatTombol(self):  //digunakan untuk membuat metode dengan nama ‘buatTombol’ yang akan digunakan untuk membuat tombol.
        Button(self.frameTombol,relief='flat', text="open", command=self.perintahBuka).grid(row=0, column=0)  //digunakan untuk membuat tombol dengan parameter ‘self.frameTombol’ yang artinya tombol tersebut akan di tempatkan di frame yang ada di variabel ‘frameTombol’. “relief=flat” digunakan agar tombol tidak memiliki garis. Sehingga hanya akan tampil teks saja. “text=open” merupakan teks tombolnya. “Command=self.perintahBuka” merupakan perintah yang akan menjalankan metode dengan nama ‘perintahBuka’ ketika tombol diklik.
        Button(self.frameTombol,relief='flat', text="zoom in", command=self.perintahPerbesar).grid(row=0, column=1)  //digunakan untuk membuat tombol dengan parameter ‘self.frameTombol’ yang artinya tombol tersebut akan di tempatkan di frame yang ada di variabel ‘frameTombol’. “relief=flat” digunakan agar tombol tidak memiliki garis. Sehingga hanya akan tampil teks saja. “text=zoom in” merupakan teks tombolnya. “Command=self.perintahPerbesar” merupakan perintah yang akan menjalankan metode dengan nama ‘perintahPerbesar’ ketika tombol diklik. Lalu di masukkan kedalam frame yang ada di variabel ‘frameTombol’ yang menggunakan grid layout. Dengan posisi baris 0 dan kolom 1.
        Button(self.frameTombol,relief='flat', text="zoom out", command=self.perintahPerkecil).grid(row=0, column=2)  //digunakan untuk membuat tombol dengan parameter ‘self.frameTombol’ yang artinya tombol tersebut akan di tempatkan di frame yang ada di variabel ‘frameTombol’. “relief=flat” digunakan agar tombol tidak memiliki garis. Sehingga hanya akan tampil teks saja. “text=zoom out” merupakan teks tombolnya. “Command=self.perintahPerkecil” merupakan perintah yang akan menjalankan metode dengan nama ‘perintahPerkecil’ ketika tombol diklik. Lalu di masukkan kedalam frame yang ada di variabel ‘frameTombol’ yang menggunakan grid layout. Dengan posisi baris 0 dan kolom 2.
        Button(self.frameTombol,relief='flat', text="normal", command=self.perintahNormal).grid(row=0, column=3)  //digunakan untuk membuat tombol dengan parameter ‘self.frameTombol’ yang artinya tombol tersebut akan di tempatkan di frame yang ada di variabel ‘frameTombol’. “relief=flat” digunakan agar tombol tidak memiliki garis. Sehingga hanya akan tampil teks saja. “text=normal” merupakan teks tombolnya. “Command=self.perintahNormal” merupakan perintah yang akan menjalankan metode dengan nama ‘perintahNormal’ ketika tombol diklik. Lalu di masukkan kedalam frame yang ada di variabel ‘frameTombol’ yang menggunakan grid layout. Dengan posisi baris 0 dan kolom 3.
        Button(self.frameTombol,relief='flat', text="fit", command=self.perintahFitToWindow).grid(row=0, column=4)  //digunakan untuk membuat tombol dengan parameter ‘self.frameTombol’ yang artinya tombol tersebut akan di tempatkan di frame yang ada di variabel ‘frameTombol’. “relief=flat” digunakan agar tombol tidak memiliki garis. Sehingga hanya akan tampil teks saja. “text=fit” merupakan teks tombolnya. “Command=self.perintahFitToWindow” merupakan perintah yang akan menjalankan metode dengan nama ‘perintahFitToWindow’ ketika tombol diklik. Lalu di masukkan kedalam frame yang ada di variabel ‘frameTombol’ yang menggunakan grid layout. Dengan posisi baris 0 dan kolom 4.
        Entry(self.frameHapus, width=50, textvariable=self.isiKolom).grid(row=0, column=0)  //digunakan untuk membuat kolom teks yang akan di tempatkan di frame yang ada di variabel ‘frameHapus’. Dengan lebar / panjang ‘50’. Dan isi teks yang ada di variabel ‘isiKolom. Dan dimasukkan ke dalam frame posisi baris 0 dan kolom 0.
        Button(self.frameHapus,relief='flat', text="hapus", command=self.perintahHapus).grid(row=0, column=1)  //digunakan untuk membuat tombol dengan parameter ‘self.frameHapus’ yang artinya tombol tersebut akan di tempatkan di frame yang ada di variabel ‘frameHapus’. “relief=flat” digunakan agar tombol tidak memiliki garis. Sehingga hanya akan tampil teks saja. “text=hapus” merupakan teks tombolnya. “Command=self.perintahHapus” merupakan perintah yang akan menjalankan metode dengan nama ‘perintahHapus’ ketika tombol diklik. Lalu di masukkan kedalam frame yang ada di variabel ‘frameTombol’ yang menggunakan grid layout. Dengan posisi baris 0 dan kolom 1.
        self.frameHapus.pack()  //digunakan untuk memasukkan frame yang di variabel ‘frameHapus’ ke dalam  window
        self.frameTombol.pack() //digunakan untuk memasukkan frame yang ada pada variabel ‘frameTombol’ ke dalam window.

    def perintahBuka(self):  //digunakan untuk membuat metode dengan nama ‘perintahBuka’ yang akan dijalankan ketika tombol ‘open’ di klik. Dan juga digunakan untuk mencari file foto yang akan di tampilkan.
        tipeFile = (('image files', '*.jpg'), ('png files', '*.png'), ('all files', '*'))  //digunakan untuk mendefinisikan tipe - tipe file apa saja yang akan di tampilkan saat mencari file. Dan disimpan kedalam variabel ‘tipeFile’.
        self.pembuka = filedialog.askopenfilename(filetypes=tipeFile)  //digunakan untuk menampilkan file dialog yang akan digunakan untuk mencari file foto. Dan ketika user memilih, maka path atau alamatnya akan disimpan ke dalam variabel ‘pembuka’. Dan memasukkan tipe file yang ada di variabel ‘tipeFile’.
        if self.pembuka :  //digunakan untuk mengecek apakah variabel ‘pembuka’ tidak kosong. Yang artinya mengecek apakah user memilih file.
            self.foto.set(self.pembuka)  //digunakan untuk mengubah nilai variabel ‘foto’ menjadi alamat / path foto atau gambar yang sudah di pilih oleh user yang disimpan kedalamvariabel ‘pembuka’.
            self.buatCanvas()  //digunakan untuk menjalankan metode dengan nama ‘buatCanvas’.

    def perintahPerbesar(self):  //digunakan untuk membuat metode dengan nama ‘perintahPerbesar’ yang tentu saja dijalankan untuk memperbesar foto atau gambar yang ditampilkan.
        self.ukuran.set(self.ukuran.get() + self.pertambahan)  //digunakan untuk menambah nilai yang ada di variabel ‘ukuran’ dengan nilai yang ada di variabel ‘pertambahan’ dan dimasukkan kembali kedalam variabel ‘ukuran’.
        self.buatCanvas()  //digunakan untuk menjalankan metode dengan nama ‘buatCanvas’.

    def perintahNormal(self):  //digunakan untuk membuat metode dengan nama ‘perintahNormal’ yang akan digunakan untuk menormalkan ukuran gambar.
        self.ukuran.set(1)  //digunakan untuk mengubah nilai variabel dengan nama ‘ukuran’ menjadi 1.
        self.buatCanvas()  //digunakan untuk menjalankan metode dengan nama ‘buatCanvas’

    def perintahPerkecil(self):  //digunakan untuk membuat metode dengan nama ‘perintahPerkecil’ yang akan dijalankan ketika akan memperkecil foto.
        try :  //digunakan untuk mencoba beberapa code program.
            self.ukuran.set(self.ukuran.get() - self.pertambahan)  //digunakan untuk mengutangi nilai yang ada di variabel ‘ukuran’ dengan nilai yang ada di variabel ‘pertambahan’ dan dimasukkan kembali kedalam variabel ‘ukuran’.
            self.buatCanvas() //digunakan untuk menjalankan metode dengan nama ‘buatCanvas’.
        except :  //digunakan untuk menjalankan beberapa code program ketika program di block ‘try’ ada eror.
            self.ukuran.set(0.01)  //digunakan untuk mengubah nilai variabel ukuran menjadi ‘0.01’.
            self.buatCanvas()    //digunakan untuk menjalankan metode dengan nama ‘buatCanvas’.

    def perintahHapus(self):  //digunakan untuk membuat metode dengan nama ‘perintahHapus’ yang akan didungakn untuk menghapus gambar di kanvas.
        self.canvas.delete('all')  //digunakanuntuk menghapus semua objek yang ada di kanvas. Termasuk gambar yang sedang di tampilkan disana.
        self.foto.set('')  //digunakan untuk mengubah nilai variabel ‘foto’ menjadi kosong. Yang artinya menghapus alamat gambar yang telah dibuka sebelumnya.
        self.isiKolom.set('')  //digunakan untuk mengosongkan isi kolom yang menampilkan lokasi gambar pada window.

    def perintahFitToWindow(self):  //digunakan untuk membuat metode dengan nama ‘perintaFitToWindow’ yang akan didungakn untuk mengepaskan gambar dengan ukuran kanvas.
        lebar = self.canvas.winfo_width()  //digunakan untuk mendapatkan lebar kanvas. Kemudian di tampung ke dalam variabel ‘lebar’
        tinggi = self.canvas.winfo_height()  //digunakan untuk mendapatkan tinggi kanvas. Kemudian di tampung ke dalam variabel ‘tinggi’
        self.gambarPasWindow(tinggi, lebar)   //digunakan untuk memanggil metode dengan nama ‘gambarPasWindow’ dengan memasukkan nilai variabel ‘tinggi’ dan ‘lebar’ sebagai parameter.


    def _addMouseBindings(self):  //digunakan untuk membuat metode dengan nama ‘_addMouseBindings’ untuk mengaktifkan fungsi scroll
        # mouse wheel scroll  //komentar
        self.canvas.bind('<4>', lambda event: self.canvas.yview('scroll', -1, 'units'))  //digunakan untuk membuat canvas untuk menerima fungsi scroll. Dengan memberikan event.
        self.canvas.bind('<5>', lambda event: self.canvas.yview('scroll', 1, 'units'))  //digunakan untuk membuat canvas untuk menerima fungsi scroll. Dengan memberikan event.


        # dragging canvas with mouse middle button  //komentar
        self.canvas.bind("<Button-2>", self.__start_scroll)  //digunakan untuk menjalankan metode dengan nama ‘_start_scroll’ ketika scroll pada mous di drag
        self.canvas.bind("<B2-Motion>", self.__update_scroll)  //digunakan untuk menjalankan metode dengan nama ‘_update_scroll’ ketika scroll mouse di jalankan
        self.canvas.bind("<ButtonRelease-2>", self.__stop_scroll)  //digunakan untuk menjalankan metode dengan nama ‘_stop_scroll’ ketika scroll pada mouse berhenti ditekan atau di putar.

    def __start_scroll(self, event):  //digunakan untuk membuat metode dengan nama ’_start_scroll’ untuk memulai scroll
        # set the scrolling increment.  //komentar
        # value of 0 is unlimited and very fast  //komentar
        # set it to 1,2,3 or whatever to make it slower  //komentar
        self.canvas.config(yscrollincrement=3)  //digunakan untuk memasukkan nilai 3 ke parameter dengan variabel ‘yscrollincrement’
        self.canvas.config(xscrollincrement=3)  //digunakan untuk memasukkan nilai 3 ke parameter dengan variabel ‘xscrollincrement’

        self._starting_drag_position = (event.x, event.y)  //digunakan untuk membuat variabel tuple dengan nama ‘_starting_drag_position’ dengan memasukkan lokasi kursor. Yaitu ‘event.x’ dan ‘event.y’ sebagai isi atau nilai.

        self.canvas.config(cursor="fleur")  //digunakan untuk mengubah nilai parameter dengan variabel ‘cursor menjadi ‘fleur’.

    def __update_scroll(self, event):  //diguanakn untuk membuat metode dengan nama  ‘_update_scroll’ yang akan di jalankan untuk men scroll kanvas
        deltaX = event.x - self._starting_drag_position[0]  //digunakan uuntuk mengambil nilai pertama pada variabel ‘starting_drag_position’ dan ditampung kedalam variabel ‘deltaX’ 
        deltaY = event.y - self._starting_drag_position[1]  //digunakan uuntuk mengambil nilai kedua pada variabel ‘starting_drag_position’ dan ditampung kedalam variabel ‘deltaY’

        self.canvas.xview('scroll', deltaX, 'units')  //digunakan untuk menscroll kanvas dengan memasukkan nilai dalam variabel ‘deltaX’ sebagai parameter.
        self.canvas.yview('scroll', deltaY, 'units')  //digunakan untuk menscroll kanvas dengan memasukkan nilai dalam variabel ‘deltaY’ sebagai parameter.

        self._starting_drag_position = (event.x, event.y)  //digunakan untuk membuat variabel tuple dengan nama ‘_starting_drag_position’ dengan memasukkan lokasi kursor. Yaitu ‘event.x’ dan ‘event.y’ sebagai isi atau nilai.

    def __stop_scroll(self, event):  //digunaka untuk membuat metode dengan nama ‘_stop_scroll’ yang akan dijalankan ketika scroll berakhir.
        # set scrolling speed back to 0, so that mouse scrolling  //komentar
        # works as expected.  //komentar
        self.canvas.config(xscrollincrement=0)  //digunakan untuk mengosongkan nilai perpindahan scroll kanvas. Atau menghentikan proses scroll
        self.canvas.config(yscrollincrement=0)    //digunakan untuk mengosongkan nilai perpindahan scroll kanvas. Atau menghentikan proses scroll

        self.canvas.config(cursor="")  //digunakan untuk mengubah nilai parameter dengan variabel ‘cursor menjadi “” atau string kosong.

root = Tk()  //dkgunakan untuk memanggil window tkinter. Dan disimpan kedalam variabel ‘root’.
a = GUI(root)  //digunakan untuk memanggil class dengan nama ‘GUI’. Dengan memasukkan ‘root’ sebagai parameter. Dan disimpan ke dalam variabel ‘a’.
a.buatCanvas()  //digunakan untuk memanggil metode dengan nama ‘buatCanvas’. Yang ada di dalam class ‘GUI’.

root.mainloop()  //digunakan untuk membuat window tidak langsung close otomatis saat di jalankan.


Nah itu dia temen - temen penjelasan saya mengenai code program diatas... Saya harap dapat membantu kalian untuk memahami code program yang sudah saya bagikan di atas ya... Namun bila ada yang kurang jelas dari penjelasan di atas, kalian bisa menanyakannya langsung lewat komentar atau laman hubungi kami ya....

Terakhir kalinya saya ingatkan 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...



Oke sekian dulu postingan saya kali ini... Terimakasih sudah membaca postingan ini dan Sampai jumpa di postingan saya yang lainnya.. mohon maaf atas kesalahan penulisan disana sini serta kesalahan penulisan yang ada... Mohon dimaklumi saja yaa... Karena saya juga manusia.. Oke terimakasih..

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