Aplikasi SLideShow foto PySide versi 4

BelajarPython - Assalamualaikum wr. wb.

Jumpa lagi sahabat python.. Pada kesempatan kali ini saya akan mengajak kalian untuk membuat aplikasi slide show nih.. Seperti apa? Langsung saja yuk di simak...

Pengenalan aplikasi yang akan kita buat.

Aplikasi yang kita buat kali ini adalah siide show foto yang biasanya ada di pembuka foto.. Namun fungsi ini saya buat menjadi aplikasi mandiri...

Aplikasi ini saya posting dengan berbagai versi.. Dengan penambahan fitur di tiap versinya.. Jika kalian ingin melihat semua versi nya, KLIK DISINI ya...

Kali ini, saya akan memberikan versi 4. Pada versi ini saya akan memberikan fitur untuk memilih folder yang ada file foto nya ketika di dalam folder tempat file python aplikasi ini berada tidak ada foto.

Rincian Lengkap Aplikasi SlideShow foto PySide Versi 4.0

Aplikasi ini menggunakan library PySide.. Jadi, untuk menjalankannya, harus install dulu (KLIK DISINI untuk install).... Dan berikut rincian lengkap versi ini..

Nama: mn-SlideShow 4.0
Versi: 4.0 || selanjutnya.
Platform: Python 3.x  || Install.
Modul: PySide || Install.
Baris Code: +-150 baris.
Penambahan: +-7 baris.
Terdiri dari: 2 class dan 13 metode.
Fitur: Memilih folder tempat file foto jika tidak ada foto di lokasi file python.
Kelemahan: mungkin saja ada bug. (laporkan jika ada).
syarat menjalankan: Python 3.x, PySIde, dan editor teks / IDE.
Cara menjalankan: install python 3 dan PySide, copy paste code program pada editor/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.. 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 aplikasi SlideShow foto PySide versi 4.0

Nah lalu seperti apa code program versi ini ? Oke, Berikut saya berikan code program nya ya...

import sys
import os
from PySide import QtGui,QtCore

class SlideShow(QtGui.QMainWindow):
    def __init__(self, imgLst, parent=None):
        super(SlideShow, self).__init__(parent)

        self.daftarGambar = imgLst
        self.jedaPutar = False
        self.posisi = 0
        self.animFlag = True
        self.waktuGanti = QtCore.QTimer()
        self.connect(self.waktuGanti, QtCore.SIGNAL("timeout()"), self.gambarSelanjutnya)
        self.siapkanLayar()
        self.gambarSelanjutnya()
        self.jedaPutar = self.putar()
        self.instruksi()

    def instruksi(self):
        QtGui.QMessageBox.information(self, "Tentang aplikasi",
                self.tr("Aplikasi ini merupakan sebuah apliakasi sederhana. "
                        "Namun, saya rasa aplikasi ini sudah cukup bagus "
                        "karena, didukung oleh modul yang "
                        "cukup lengkap dari PySide. sehingga saya hanya "
                        "menggunakannya saja\n"
                        "\nShortcut Tombol :"
                        "\n- esc \t : Mengakhiri slide show.\n"
                        "- > \t : Gambar selanjutnya.\n"
                        "- < \t : Gambar sebelumnya.\n"
                        "- spasi \t : untuk jeda slide show.\n"
                        "\nnah gimana ? menarikkan ? yuk kunjungi :  "
                        "mn-belajarpython.blogspot.co.id untuk tutorial "
                        "menarik lainnya...\n\n"
                        "silahkan tekan 'Ok' untuk memulai slide show nya.."
                        "\ndan selamat menikmati..."))

        self.jedaPutar = self.putar()
        self.setStyleSheet("QWidget{background-color: #fff;}")

    def siapkanLayar(self):
        screen = QtGui.QDesktopWidget().screenGeometry(self)
        size = self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
        self.buildUi()
        self.showFullScreen()
        self.putar()

    def buildUi(self):
        self.label = QtGui.QLabel()
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.setCentralWidget(self.label)

    def gambarSelanjutnya(self):
        if self.daftarGambar:
            if self.posisi >= len(self.daftarGambar):
                self.posisi = 0
            elif self.posisi < 0 :
                self.posisi = len(self.daftarGambar)-1

            self.showImageByPath(self.daftarGambar[self.posisi])

            if self.animFlag:
                self.posisi += 1
            else:
                self.posisi -= 1

    def showImageByPath(self, path):
        if path:
            image = QtGui.QImage(path)
            pp = QtGui.QPixmap.fromImage(image)
            self.label.setPixmap(pp.scaled(self.label.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation))

    def putar(self):
        if not self.jedaPutar:
            self.jedaPutar = True
            self.waktuGanti.start(4000)
            return self.jedaPutar
        else:
            self.jedaPutar = False
            self.waktuGanti.stop()

    def keyPressEvent(self, keyevent):
        event = keyevent.key()
        if event == QtCore.Qt.Key_Escape:
            self.close()
        if event == QtCore.Qt.Key_Left:
            self.animFlag = False
            self.gambarSelanjutnya()
        if event == QtCore.Qt.Key_Right:
            self.animFlag = True
            self.gambarSelanjutnya()
        if event == 32:
            self.jedaPutar = self.putar()

class pengelolaFile():
    def jalankanClass(self, lokasiGambar):
        if isinstance(lokasiGambar, list):
            daftarGambar = self.pencariGambar(lokasiGambar)
            return daftarGambar
        elif isinstance(lokasiGambar, str):
            daftarGambar = self.pencariGambar([lokasiGambar])
            return daftarGambar
        else:
            print(" You can either enter a list of paths or single path")
            return None

    def cekFile(self, filename):
        if filename.endswith('PNG') or filename.endswith('png') or filename.endswith('JPG') or filename.endswith('jpg'):
            return True

    def pencariGambar(self, lokasiGambar):
        kembalian = []
        for lokasi in lokasiGambar:
            try:
                dirContent = os.listdir(lokasi)
            except OSError:
                raise OSError("Provided path '%s' doesn't exists." % lokasi)

            for each in dirContent:
                selFile = os.path.join(lokasi, each)
                if os.path.isfile(selFile) and self.cekFile(selFile):
                    kembalian.append(selFile)
        return list(set(kembalian))

def pembangunAplikasi(lokasi):
    daftarGambar = pengelolaFile().jalankanClass(lokasi)

    if daftarGambar :
        window =  SlideShow(daftarGambar)
        window.show()
        window.raise_()
        app.exec_()
    else:
        msgBox = QtGui.QMessageBox()
        msgBox.setText("Maaf !! tidak ada file gambar yang tersedia di folder\n%s \n\nsilahkan pilih folder yang berisi file gambar untuk ditampilkan." % lokasi)
        msgBox.setStandardButtons(msgBox.Cancel | msgBox.Open)
        msgBox.setWindowTitle("Tidak ada file gambar.")
        if msgBox.exec_() == msgBox.Open:
            pemilihFolder = QtGui.QFileDialog.getExistingDirectory(None, "Silahkan pilih folder yang berisi File Foto", os.getcwd())
            if pemilihFolder :
                pembangunAplikasi(str(pemilihFolder))

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    lokasi = os.getcwd()
    if len(sys.argv) > 1:
        lokasi = sys.argv[1:]
    pembangunAplikasi(lokasi)


Lalu seperti apa hasil dari code di atas ? Silahkan simak di bawah ini yaa...


Penjelasan code program Aplikasi SlideShow PySide versi 4.0

Sekarang saya akan mencoba untuk menjelaskan code program yang sudah saya bagikan di atas tadi.. Agar kalian lebih mudah untuk memahaminya.. Oke, Langsung saja..
[NOTE : Teks berwarna MERAH pada penjelasan adalah Code tambahan yang tidak ada di versi sebelumnyaDan yang Berwarna BIRU akan di hapus di versi berikutnya. Jika Code berwarna MERAH dan komentar berwarna BIRU maka merupakan code baru dan akan di hapus di versi berikutnya]

import sys  //mengimport sys
import os  //mengimport os
from PySide import QtGui,QtCore  //mengimport class ‘QtGui’ dan ‘QtCore’ dari librari pyside

class SlideShow(QtGui.QMainWindow):  //class ‘slideShow’ dengan meng inheritence class ‘QMainWindow’
    def __init__(self, imgLst, parent=None):  //construktor class ‘SlideShow’
        super(SlideShow, self).__init__(parent)  //menjalanka construktor class parent

        self.daftarGambar = imgLst  //menampung nilai parameter ‘imgLst’ (kumpulan lokasi foto)
        self.jedaPutar = False  //inisialisasi variabel ‘jedaPutar’ (False = di jeda. True=sedang diputar)
        self.posisi = 0  //inisialisasi variabel ‘posisi’ untuk menentukan urutan foto yang ditampilkan
        self.animFlag = True  //inisialisasi variabel ‘animFLag’ (menentukan arah slide show)
        self.waktuGanti = QtCore.QTimer()  //inisialisasi penghitung mundur
        self.connect(self.waktuGanti, QtCore.SIGNAL("timeout()"), self.gambarSelanjutnya)  //menjalankan metode ‘gambarSelanjutnya’ jika penghitung mundur selesai
        self.siapkanLayar()  //menjalankan metode ‘siapkanLayar’
        self.gambarSelanjutnya()  //menjalankan metode ‘gambarSelanjutnya’

    def siapkanLayar(self):  //metode siapkan layar
        screen = QtGui.QDesktopWidget().screenGeometry(self)  //mendapatkan ukuran layar monitor
        size = self.geometry()  //mendapatkan ukuran window aplikasi ini
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)  //memindahkan window ke tengah layar
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)  //membuat window aplikasi ini selalu ada di atas semua window yang terbuka
        self.setStyleSheet("QWidget{background-color: #fff;}")  //membuat warna layar amenjadi putih
        self.buildUi()  //menjalankan metode ‘buildUi’
        self.showFullScreen()  //memanggil metode ‘showFullScreen’
        self.putar()  //memanggil metode ‘putar’
        self.instruksi()  //menjalankan metode instruksi

    def instruksi(self):  //metode instruksi
        QtGui.QMessageBox.information(self, "Tentang aplikasi",
                self.tr("Aplikasi ini merupakan sebuah apliakasi sederhana. "
                        "Namun, saya rasa aplikasi ini sudah cukup bagus "
                        "karena, didukung oleh modul yang "
                        "cukup lengkap dari PySide. sehingga saya hanya "
                        "menggunakannya saja\n"
                        "\nShortcut Tombol :"
                        "\n- esc \t : Mengakhiri slide show.\n"
                        "- > \t : Gambar selanjutnya.\n"
                        "- < \t : Gambar sebelumnya.\n"
                        "- spasi \t : untuk jeda slide show.\n"
                        "\nnah gimana ? menarikkan ? yuk kunjungi :  "
                        "mn-belajarpython.blogspot.co.id untuk tutorial "
                        "menarik lainnya...\n\n"
                        "silahkan tekan 'Ok' untuk memulai slide show nya.."
                        "\ndan selamat menikmati..."))

  //code diatas di gunakan untuk menampilkan kotak dialog pesan instruksi ke user

        self.jedaPutar = self.putar()  //menjalankan metode ‘putar’ dan menampung nilai kembalian di ‘jedaPutar’
        self.setStyleSheet("QWidget{background-color: #fff;}")  //membuat background window menjadi putih

    def buildUi(self):  //metode ‘buildUi’
        self.label = QtGui.QLabel()  //membuat label (tempat foto)
        self.label.setAlignment(QtCore.Qt.AlignCenter)  //agar foto ada di tengah
        self.setCentralWidget(self.label)  //memasukkan label ke dalam window

    def gambarSelanjutnya(self):  //metode ‘gambarSelanjutnya’
        if self.daftarGambar:   //memastikan ada gambar di folder tempat code python
            if self.posisi >= len(self.daftarGambar):  //mengecek apakah nilai ‘posisi’ sama atau lebih besar dari total foto
                self.posisi = 0  //mereset nilai ‘posisi’ menjadi 0 jika memenuhi kriteria di atas
            elif self.posisi < 0 :  //mengecek apakah nilai variabel ‘posisi’ kurang dari 0
                self.posisi = len(self.daftarGambar)-1  //mengubah nilai ‘posisi’ menjadi jumlah foto di kurangi 1 jika nilai sebelumnya kurang dari 0

            self.showImageByPath(
                    self.daftarGambar[self.posisi])  //menjalankan metode ‘showImageByPath’ dengan memasukkan lokasi gambar di urutan nilai posisi sebagai parameter

            if self.animFlag:  //mengecek apakah  bernilai True (akan berjalan ke kanan)
                self.posisi+=1  //menambah nilai ‘posisi’ agar foto terus berubah
            else:  //jika nilai ‘animFlag’ adalah false (akan berjalan ke kiri)
                self.posisi -= 1  //mengurangi nilai posisi sebanyak satu

    def showImageByPath(self, path):  //metode ‘showImageByPath’
        if path:  //memastikan path (pameter) tidak kosong
            image = QtGui.QImage(path)  //inisialisasi foto
            pp = QtGui.QPixmap.fromImage(image)  //mengubah foto
            self.label.setPixmap(pp.scaled(self.label.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation))  //menyesuaikan ukuran foto/gambar

    def putar(self):  //metode ‘putar’
        if not self.jedaPutar:  //memastikan nilai ‘jedaPutar) adalah false (sedang di jeda)
            self.jedaPutar = True  //mengubah menjadi ‘Tre’ (menandakan sedang diputar)
            self.waktuGanti.start(4000)  //memulai hitung mundur selama 4000 mili detik atau 4 detik
            return self.jedaPutar  //mengembalikan nilai ‘jedaPutar’ (true)
        else:  //jika nilai ‘jedaPutar’ adalah True (sedang di putar)
            self.jedaPutar = False  //mengubah nilai menjadi ‘false’ menandakan di pause
            self.waktuGanti.stop()  //menghentikan penghitung mundur (menghentikan slide show)

    def keyPressEvent(self, keyevent):  //metode yang akan di jalankan secara otomatis ketika ada penekanan tombol
        event = keyevent.key()  //mendapatkan tombol apa yang di tekan
        if event == QtCore.Qt.Key_Escape:  //mengecek apakah user menekan ‘ESC’ pada keyboard
            self.close()  //menutup window
        if event == QtCore.Qt.Key_Left:  //mengecek apakah user menekan arah ‘kiri’ pada keyboard
            self.animFlag = False  //mengubah nilai menjadi ‘False’ agar slide show berjalan ke kiri
            self.gambarSelanjutnya()  //menjalankan metode ‘gambarSelanjutnya’ jika di tekan arah ‘kiri’  di keyboard
        if event == QtCore.Qt.Key_Right:  //mengecek apakah user menekan arah ‘kanan’ pada keyboard
            self.animFlag = True  //mengubah nilai menjadi ‘True’ agar slide show berjalan ke kanan
            self.gambarSelanjutnya()  //menjalankan metode ‘gambarSelanjutnya’ jika di tekan arah ‘kanan’  di keyboard
        if event == 32:  //mengecek apakah user menekan ‘spasii’ pada keyboard
            self.jedaPutar = self.putar()  //menjalankan metode ‘putar’ jika di tekan spasi di keyboard

class pengelolaFile():  //class ‘pengelolaFile’
    def jalankanClass(self, lokasiGambar):  //metode ‘jalankanClass’
        if isinstance(lokasiGambar, list):  mengecek apakah parameter ‘lokasiGambar’ adalah sebuah list
            daftarGambar = self.pencariGambar(lokasiGambar)  //menjalankan metode ‘pencariGambar’
            return daftarGambar  //mengembalikan nilai ‘daftarGambar’
        elif isinstance(lokasiGambar, str):  //mengecek apakah nilai parameter ‘lokasiGambar’ adalah string
            daftarGambar = self.pencariGambar([lokasiGambar])  //menjalankan metode ‘pencariFile’
            return daftarGambar  //mengembalikan nilai ‘daftarGambar’
        else:  //jika prameter bukan string dan list
            print(" You can either enter a list of paths or single path")  //mencetak pesan error
            return None  //mengembalikan kosongan

    def cekFile(self, filename):  //metode cek file
        if filename.endswith('PNG') or filename.endswith('png') or filename.endswith('JPG') or filename.endswith('jpg'):  //mengecek apakah file ber ekstens jpg atau png. (apakah file foto)
            return True  //mengambalikan true jika merupakan file foto

    def pencariGambar(self, lokasiGambar):  //metode ‘pencariGambar’
        kembalian = []  //inisialisasi variabel ‘kembalian’ (list)
        for lokasi in lokasiGambar:  //melakukan perulangan sebanyak data (list) di variabel parameter ‘lokasiGambar’
            try:  //mencoba code program
                dirContent = os.listdir(lokasi)  //mengambil semua file di lokasi (folder)
            except OSError:  //jika error di try
                raise OSError("Provided path '%s' doesn't exists." % lokasi)  //mencetak pesan error

            for each in dirContent:  //melakukan perulangan sebanyak file yang di dapat
                selFile = os.path.join(lokasi, each)  //menggabungkan nama dan path file
                if os.path.isfile(selFile) and self.cekFile(selFile):  //melakukan pengecekan apakah file gambar
                    kembalian.append(selFile)  //menampung file jika file adalah foto
        return list(set(kembalian))  //mengembalikan hasil penampung file foto

def pembangunAplikasi(lokasi):  //metode pembangun aplikasi
    daftarGambar = pengelolaFile().jalankanClass(lokasi)  //menjalankan class ‘pengelolaFile’ untuk mendapatkan file foto/gambar

    if daftarGambar :  //memastikan ada file foto di folder
        window =  SlideShow(daftarGambar)  //menjalankan class ‘SlideShow’
        window.show()  //menampikan window slideshow
        window.raise_()  //membuat foto berada di paling atas window aplikasi
        app.exec_()  //meng eksekusi aplikasi
    else:  //jika tidak ada file foto
        msgBox = QtGui.QMessageBox()  //membuat messegebox
        msgBox.setText("Maaf !! tidak ada file gambar yang tersedia di folder\n%s \n\nsilahkan pilih folder yang berisi file gambar untuk ditampilkan." % lokasi)  //menampilkan pesan dialog untuk pesan bahwa tidak ada file foto di folder terpilih/folder tempat file python
        msgBox.setStandardButtons(msgBox.Cancel | msgBox.Open)  //membuat tombol ‘Cancel dan ‘Open’
        msgBox.setWindowTitle("Tidak ada file gambar.")  //mengubah judul kotak pesan dialog
        if msgBox.exec_() == msgBox.Open:  //mengecek apakah user menekan tombol ‘Open’
            pemilihFolder = QtGui.QFileDialog.getExistingDirectory(None, "Silahkan pilih folder yang berisi File Foto", os.getcwd())  /menampilkan pesan dialog pemilih folder
            if pemilihFolder :  //memastikan user memilih folder (tidak klik ‘cancel’)
                pembangunAplikasi(str(pemilihFolder))  //menjalankan metode ‘pembangunAplikasi’ dengan memasukkan lokasi folder sebagai parameter

if __name__ == '__main__':  //code yang akan di jalankan pertama kali
    app = QtGui.QApplication(sys.argv)  //inisialisasi class ‘QApplication’
    lokasi = os.getcwd()  //mendapatkan lokasi file code python ini berada
    if len(sys.argv) > 1:  //jika banyaknya sys.argv lebih dari 1
        lokasi = sys.argv[1:]  //mengubah nilai variabel nilai pertama di ‘sys.argv’

    pembangunAplikasi(lokasi)  //menjalankan metode ‘pembangunAplikasi’ untuk menampilkan window


Nah itu dia temen - temen penjelasan code programnya.. Mohon maaf apabila ada penjelasan yang kurang jelas, atau bahkan ada kekeliruan... Mohon kasi pembenaran atau pendapat kalian di kolom komentar ya... Biar kita bisa belajar bersama..

Oke terimakasih dan sampai di sini dulu ya... Jangan lupa untuk membaca versi yang lain... Biar ilmunya nambah.. Hehe.. Temikasih sekali lagi dan sekian...

Wassalamualaikum wr. wb.




Previous
Next Post »
Thanks for your comment