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...
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 5. Dimana pada versi ini saya menambahkan opsi untuk memutar file gambar di lokasi file python atau memilih folder lain. Fungsi ini saya hadir kan saat pertama kali menjalankan aplikasi ini.
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...
Lalu seperti apa hasil dari code di atas ? Silahkan simak di bawah ini yaa...
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.
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 5. Dimana pada versi ini saya menambahkan opsi untuk memutar file gambar di lokasi file python atau memilih folder lain. Fungsi ini saya hadir kan saat pertama kali menjalankan aplikasi ini.
Rincian Lengkap Aplikasi SlideShow foto PySide Versi 5.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 5.0 |
Versi | : 5.0 || Versi awal. |
Platform | : Python 3.x || Install. |
Modul | : PySide || Install. |
Baris Code | : +-167 baris. |
Penambahan | : +-17 baris. |
Terdiri dari | : 2 class dan 13 metode. |
Fitur | : Memilih folder tempat slideshow. |
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 5.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.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, sudah): daftarGambar = pengelolaFile().jalankanClass(lokasi) respon = False if sudah==False: tombol1 = QtGui.QMessageBox.StandardButton.Yes tombol2 = QtGui.QMessageBox.StandardButton.No pertanyaan = "apakah anda ingin langsung menampilkan gambar di folder tempat anda menyimpan program ?" response = QtGui.QMessageBox.question(None, "Konfimasi", pertanyaan, tombol1, tombol2) if response == QtGui.QMessageBox.Yes: respon = True else: respon = True if respon : 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), True) else : pemilihFolder = QtGui.QFileDialog.getExistingDirectory(None, "Silahkan pilih folder yang berisi File Foto", os.getcwd()) if pemilihFolder: pembangunAplikasi(str(pemilihFolder), True) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) lokasi = os.getcwd() if len(sys.argv) > 1: lokasi = sys.argv[1:] pembangunAplikasi(lokasi, False)
Lalu seperti apa hasil dari code di atas ? Silahkan simak di bawah ini yaa...
Penjelasan code program Aplikasi SlideShow PySide versi 5.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 sebelumnya. Dan 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, sudah): //metode pembangun aplikasi
daftarGambar = pengelolaFile().jalankanClass(lokasi) //menjalankan class ‘pengelolaFile’ untuk mendapatkan file foto/gambar
respon = False //inisialisasialisasi variabel ‘respon’ menentukan pembukaan lokasi file foto
if sudah==False: //mengecek apakah nilai variabel parameter ‘sudah’ berniai false
tombol1 = QtGui.QMessageBox.StandardButton.Yes //membuat tombol ‘yes’
tombol2 = QtGui.QMessageBox.StandardButton.No //membuat tombol ‘no’
pertanyaan = "apakah anda ingin langsung menampilkan gambar di folder tempat anda menyimpan program ?" //membuat pertanyaan
response = QtGui.QMessageBox.question(None, "Konfimasi", pertanyaan, tombol1, tombol2) //menampilkan pesan dialog dengan memasukkan pertanyaan dan 2 tombol di atas
if response == QtGui.QMessageBox.Yes: //mengecek apakah user meng klik tombol ‘yes’
respon = True //mengubah nilai ‘respon menjadi ‘true’ jika user klik tombol ‘yes’
else: //jika sudah bernilai true
respon = True //mengubah ‘respon’ menjadi ‘true’
if respon : //mengecek apakah responn bernilai ‘True’
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
else : //jika respon bernilai False
pemilihFolder = QtGui.QFileDialog.getExistingDirectory(None, "Silahkan pilih folder yang berisi File Foto", os.getcwd()) //menampilkan file dialog pemilih folder
if pemilihFolder: //mematikan user memilih folder (tidak klik cancel)
pembangunAplikasi(str(pemilihFolder), True) //menjalankan metode ‘pembangunAplikasi’ dengan memasukkan lokasi folder yang di pilih user
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.
ConversionConversion EmoticonEmoticon