Aplikasi Pembuka Foto PySide versi 3

BelajarPython - Assalamualaikum wr. wb.

Jumpa lagi temen - temen... Kali ini, saya akan mengajak kalian untuk membuat sebuah pembuka foto nih.. Dengan tampilan yang cukup bagus.. Karena menggunakan library PySide. Penasaran ? Langsung saja yuk kita simak sama - sama...

Pengenalan aplikasi yang akan kita buat.

Sebenarnya, saya sudah membuat aplkasi pembuka foto juga.. Namun menggunakan library Tkinter.. jadi, tampilannya tidak terlalu menarik dan terlihat jadul (KLIK DISINI untuk melihatnya).. Namun pada projek ini, saya menggunakan PySide untuk mendapatkan fungsi dan tampilan yang lebih baik..

Namun, Aplikasi ini saya posting dengan berbagai versi.. Dengan penambahan fitur di tiap versinya.. Jika kalian ingin melihat versi - versi aplikasi ini, KALIAN BISA KLIK DISINI ya temen - temen...

Dan Sekarang, saya akan memberikan versi 3 nya. Dimana pada versi ini saya akan menambahkan fitur untuk memperbesar dan memperkecil tampilan foto..

Rincian Lengkap Aplikasi Pembuka Foto PySide Versi 3.0

Aplikasi kali ini menggunakan library PySide. Jadi, untuk menjalankannya, harus install dulu... KLIK DISINI untuk menginstallnya.... Dan berikut rincian lengkap aplikasinya...

Nama: mn-FotoView 3.0
Versi: 3.0 | klik disini untuk membaca versi selanjutnya.
Platform: Python 3.x
Modul: PySide. Klik disini untuk menginstallnya.
Baris Code: kurang lebih 113 baris code program.
Terdiri dari: 1 class dan 10 metode.
Fitur: Memperbesar dan memperkecil ukuran foto.
Kelemahan: Tidak efisien dalam membuka foto.
syarat menjalankan: install python 3.x dan PySide, punya editor teks atau IDE.
Cara menjalankan: install python 3 dan PySide, 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 .. 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 Pembuka Foto PySide versi 3.0

Nah lalu seperti apa code program dari aplikasi Pemutar Musik PySide pada versi kali ini ? Oke, Berikut saya berikan code program nya ya...


from PySide.QtGui import *
from PySide.QtCore import *
import sys,os

class PembukaFoto(QMainWindow):
    def __init__(self):
        super(PembukaFoto, self).__init__()

        self.ukuranGambar = 1.0

        self.layout()
        self.layar()
        self.setScroll()
        self.buatToolBar()

    def layout(self):
        widgetLayout=QWidget(self)
        self.mainLayout =QVBoxLayout(widgetLayout)
        self.mainLayout.setContentsMargins(0,0,0,0)
        self.mainLayout.setSpacing(0)
        self.setCentralWidget(widgetLayout)

    def layar(self):
        self.tempatFoto = QLabel(self)
        self.tempatFoto.setScaledContents(True)
        self.mainLayout.addWidget(self.tempatFoto)

    def setScroll(self):
        # mengatur scroll
        self.scrollArea = QScrollArea()
        self.scrollArea.setWidget(self.tempatFoto)
        self.scrollArea.setBackgroundRole(QPalette.Light)
        self.scrollArea.setAlignment(Qt.AlignCenter)

        self.mainLayout.addWidget(self.scrollArea)

    def bukaGambar(self, gambar):
        image = QImage(gambar)
        pp = QPixmap.fromImage(image)
        self.tempatFoto.setPixmap(pp.scaled(pp.size(), Qt.KeepAspectRatio))
        self.tempatFoto.adjustSize()
        self.ukuranGambar = 1.0
        self.setWindowTitle(os.path.basename(gambar)+' - mn-belajarpython.blogspot.co.id')

    def buatToolBar(self):
        self.toolBar = QToolBar()

        self.tombolBuka = QAction(self.tr("Buka"), self)
        self.tombolIn = QAction(self.tr("In"), self)
        self.tombolOut = QAction(self.tr("Out"), self)

        self.tombolBuka.triggered.connect(self.buka)
        self.tombolIn.triggered.connect(self.perbesar)
        self.tombolOut.triggered.connect(self.perkecil)

        self.tombolIn.setEnabled(False)
        self.tombolOut.setEnabled(False)

        self.toolBar.addSeparator()
        self.toolBar.addAction(self.tombolBuka)
        self.toolBar.addSeparator()
        self.toolBar.addAction(self.tombolIn)
        self.toolBar.addAction(self.tombolOut)
        self.toolBar.addSeparator()

        self.layoutToolbar = QHBoxLayout()
        self.layoutToolbar.addStretch()
        self.layoutToolbar.addWidget(self.toolBar)
        self.layoutToolbar.addStretch()
        self.layoutToolbar.setContentsMargins(0,0,0,0)

        self.mainLayout.addLayout(self.layoutToolbar)

    def perbesar(self):
        self.ubahUkuran(1.25)

    def perkecil(self):
        self.ubahUkuran(0.8)

    def ubahUkuran(self, factor):
        self.ukuranGambar *= factor
        self.tempatFoto.resize(self.ukuranGambar * self.tempatFoto.pixmap().size())
        self.tempatFoto.setAlignment(Qt.AlignRight)


    def buka(self):
        fileName,_ = QFileDialog.getOpenFileName(self, "Pilih File Gambar", QDir.currentPath(), filter="JPG (*.jpg);;PNG (*.png);;All (*.*) ")

        if fileName:
            image = QImage(fileName)
            if image.isNull():
                QMessageBox.information(self, "Image Viewer",
                        "Maaf! tidak bisa membuka file --> %s." % os.path.basename(fileName))
                return

            self.bukaGambar(fileName)
            self.tombolIn.setEnabled(True)
            self.tombolOut.setEnabled(True)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setQuitOnLastWindowClosed(True)
    window = PembukaFoto()
    window.show()
    window.setGeometry(0,0,700,500)
    window.setWindowTitle('Photo Viewer - mn-belajarpython.blogspot.co.id')

    screen = QDesktopWidget().screenGeometry()
    size = window.geometry()
    window.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)

    sys.exit(app.exec_())


Nah lalu, seperti apakah tampilan yang akan di hasilkan dari code program di atas? Langsung saja yuk kita simak sama - sama tampilannya di bawah ini...



Penjelasan code program Aplikasi Pembuka Foto PySide versi 3.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 yuk kita simak sama penjelasannya di bawah ini....
[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]

from PySide.QtGui import *  //mengimport class ‘QtGui’ dan turunannya
from PySide.QtCore import *  //mengimport class ‘QtCore’ dan turunannya
import sys,os  //import class sys dan os

class PembukaFoto(QMainWindow):  //membuat class ‘PembukaFoto’. Dengan menurunkan class ‘QmainWindow’
    def __init__(self):  //membuat construktor class ‘PembukaFoto’
        super(PembukaFoto, self).__init__()  //memanggil construktor dari parent class ‘PembukaFoto’

        self.ukuranGambar = 1.0  //digunakan untuk nilai ukuran gambar pertama kali

        self.layout()  //menjalankan metode ‘layout’
        self.layar()  //menjalankan metode ‘layar’
        self.setScroll()  //menjalankan metode ‘setScroll’
        self.buatToolBar()  //menjalankan metode ‘buatToolBar’

    def layout(self):  //membuat metode ‘layout’
        widgetLayout=QWidget(self)  //Memanggil dan menampung class ‘Qwidget’
        self.mainLayout =QVBoxLayout(widgetLayout)  //membuat layout utama
        self.mainLayout.setContentsMargins(0,0,0,0)  //mengatur window agar tidak ada margin
        self.mainLayout.setSpacing(0)  //mengatur agar tidak ada jarak tiap elemen agar
        self.setCentralWidget(widgetLayout)  //memasukkan widget pada variabel ‘WidgetLayout’ untuk menjadi layout utama di window

    def layar(self):  //membuat metode ‘layar’
        self.tempatFoto = QLabel(self)  //membuat QLabel sebagai tempat menampilkan foto
        self.tempatFoto.setScaledContents(True)  //membuat ukuran label ‘tempatFoto’ agar mengikuti ukuran foto
        self.mainLayout.addWidget(self.tempatFoto)  //memasukkan Tempat foto ke dalam layout utama / window

    def setScroll(self):  //membuat metode ‘setScroll’
        # mengatur scroll
        self.scrollArea = QScrollArea()  //membuat area scroll
        self.scrollArea.setWidget(self.tempatFoto)  //memasukkan ‘tempatFoto’ sebagai area yang akan di beri scroll bar
        self.scrollArea.setBackgroundRole(QPalette.Light)  //memberikan warna background area scroll
        self.scrollArea.setAlignment(Qt.AlignCenter)  //membuat ‘tempatFoto’ berada di tengah area scrollbar

        self.mainLayout.addWidget(self.scrollArea)  //memasukkar area scrollbar ke main layout/window

    def bukaGambar(self, gambar):  //membuat metode ‘bukaGambar’ dengan 1 buah parameter
        image = QImage(gambar)  //memuat foto dengan memasukkan path yang ada di variabel ‘gambar’
        pp = QPixmap.fromImage(image)  //membuat pixmap
        self.tempatFoto.setPixmap(pp.scaled(pp.size(), Qt.KeepAspectRatio))  //memasukkan foto (pixmap) ke dalam label (tempatFoto)
        self.tempatFoto.adjustSize()  //mengatur ukuran tempat foto agar sesuai
        self.setWindowTitle(os.path.basename(gambar)+' - mn-belajarpython.blogspot.co.id')  //mengubah judul menjadi nama foto

    def buatToolBar(self):  //membuat metode ‘buatToolBar’
        self.toolBar = QToolBar()  //inisialisasi toolbar

        self.tombolBuka = QAction(self.tr("Buka"), self)  //Membuat perintah ‘Buka’
        self.tombolIn = QAction(self.tr("In"), self)   //membuat perintah ‘In’ (Perbesar)
        self.tombolOut = QAction(self.tr("Out"), self)   //membuat perintah ‘Out’ (Perkecil)

        self.tombolBuka.triggered.connect(self.buka)  //menjalanakan metode ‘buka’ ketika perintah ‘Buka’ (Tombol Buka) di klik
        self.tombolIn.triggered.connect(self.perbesar)  //menjalanakan metode ‘perbesar’ ketika perintah ‘In’ (Tombol perbesar) di klik
        self.tombolOut.triggered.connect(self.perkecil)  //menjalanakan metode ‘perkecil’ ketika perintah ‘Out’ (Tombol Perkecil) di klik

        self.tombolIn.setEnabled(False)  //mematikan ‘tombolIn’ (tombol perbesar)
        self.tombolOut.setEnabled(False)  //mematikan ‘tombolOut’ (tombol perkecil)

        self.toolBar.addSeparator()  //menambah garis pembatas
        self.toolBar.addAction(self.tombolBuka)  //memasukkan perintah ‘Buka’ (tombolBuka)
        self.toolBar.addSeparator()  //menambah garis pembatas
        self.toolBar.addAction(self.tombolIn)  //memasukkan perintah ‘In’ (perintah Perbesar) ke dalam toolbar
        self.toolBar.addAction(self.tombolOut)  //memasukkan perintah ‘Out’ (perintah Perkecil) ke dalam toolbar
        self.toolBar.addSeparator()  //menambah garis pembatas

        self.layoutToolbar = QHBoxLayout()  //membuat layout toolbar
        self.layoutToolbar.addStretch()  //mebuat ‘stretch’ / karet yang akan memanjang ketika window di perbesar
        self.layoutToolbar.addWidget(self.toolBar)  //memasukkan layout toolbar ke window
        self.layoutToolbar.addStretch()  //mebuat ‘stretch’ / karet yang akan memanjang ketika window di perbesar
        self.layoutToolbar.setContentsMargins(0,0,0,0)  //membuat Layout Toolber tidak memiliki margin

        self.mainLayout.addLayout(self.layoutToolbar)  //memasukkan layout toolbar ke dalam window

    def perbesar(self):  //membuat metode perbesar
        self.ubahUkuran(1.25)  //memanggil metode ‘ubahUkuran’ dan memberikan nilai perbesaran (lebih dari 1)

    def perkecil(self):  //membuat metode ‘perkecil’
        self.ubahUkuran(0.8)  //memanggil metode ‘ubahUkuran’ dan memberikan nilai perkecilan (kurang dari 1)

    def ubahUkuran(self, factor):  //membuat metode ‘ubahUkuran’ dengan 1 buah parameter
        self.ukuranGambar *= factor  //mengalikan ukuran foto nilai parameter variabel ‘factor’
        self.tempatFoto.resize(self.ukuranGambar * self.tempatFoto.pixmap().size())  //mengubah ukuran foto
        self.tempatFoto.setAlignment(Qt.AlignRight)  //untuk mengubah align tempat foto

    def buka(self):  //membuat metode ‘buka’
        fileName,_ = QFileDialog.getOpenFileName(self, "Pilih File Gambar", QDir.currentPath(), filter="JPG (*.jpg);;PNG (*.png);;All (*.*) ")  //menampilkan file dialog untuk memilih file foto. Dan menyimpan lokasi foto yang di pilih user ke dalam variabel ‘fileName’

        if fileName:  //memastikan variabel ‘fileName’ tidak kosong (memastikan user memilih file)
            image = QImage(fileName)  //memuat foto
            if image.isNull():  //mengecek file apakah bukan file gambar
                QMessageBox.information(self, "Image Viewer",
                        "Maaf! tidak bisa membuka file --> %s." % os.path.basename(fileName))  //menampilkan kotak dialog peringatan jika user memilih file bukan gambar
                return  //menghentikan proses di metode ini

            self.bukaGambar(fileName)  //membuka file gambar yang di pilih user dengan memanggil metode ‘bukaGambar’ dan memasukkan lokasi gambar yang tersimpan di ‘fileName’
            self.tombolIn.setEnabled(True)  //menghidupkan tombil ‘in’ (perbesar)
            self.tombolOut.setEnabled(True)  //menghidupkan tombil ‘out’ (perkecil)

if __name__ == '__main__':  //code yang akan di jalankan pertama kali
    app = QApplication(sys.argv)  //insialisasi window
    app.setQuitOnLastWindowClosed(True)  //menutup window lain (aplikasi ini)
    window = PembukaFoto()  //menjalankan class ‘PembukaFoto’
    window.show()  //menampilkan window class ‘PembukaFoto’
    window.setGeometry(0,0,700,500)  //mengatur ukuran window
    window.setWindowTitle('Photo Viewer - mn-belajarpython.blogspot.co.id')  //mengubah judul window

    screen = QDesktopWidget().screenGeometry()  //mendapatkan ukuran layar monitor
    size = window.geometry()  //mendapat ukuran window aplikasi pembuka foto ini
    window.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)  //membuat window pembuka foto berada di tengah layar monitor


    sys.exit(app.exec_())  //agar window tidak langsung close saat di jalankan




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

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

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