Pemutar Video PySIde versi 10

BelajarPython - Assalamualaikum wr. wb.

Jumpa lagi sahabat python.. Pada kesempatan kali ini saya akan mengajak kalian untuk membuat mini aplikasi lagi.. Aplikasi apa? Langsung saja di simak ya..

Pengenalan aplikasi yang akan kita buat.

Aplikasi yang kita buat kali ini adalah pemutar video dengan fitur yang standard seperti umum nya saja... Oya, seperti biasa, Aplikasi ini saya posting dengan berbagai versi.. Dengan penambahan fitur di tiap versinya.. Jika kalian ingin melihat semua versi nya, KLIK DISINI ya...

Pada versi ke 10 ini saya akan menambahkan sedikit fitur pada putaka aplikasi ini.. Yaitu klik dua kali pada daftar untuk memutar video nya... .

Rincian Lengkap Aplikasi Pemutar Video PySide Versi 10.0

Aplikasi ini menggunakan library PySide.. Sehingga, kalian perlu menginstall library tersebut untuk menjalankan aplikasi ini.. Klik disini kalau belum install..

Nama: mn-VideoPlayer 10.0
Versi: 10.0 || selanjutnya.
Bahasa: Python 3.x  || Install.
Modul: PySide || Install.
Baris Code: +-347 baris.
Penambahan: +-18  baris.
Terdiri dari: 1 class dan 28 metode.
Fitur: Klik dua kali untuk memutar video pada pustaka.
Kelemahan: tidak bisa hapus video dari pustaka.
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.


Code program aplikasi Pemutar Video PySide versi 10.0

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

#! /usr/bin/python3

from PySide import QtGui, QtCore

from PySide.phonon import Phonon

import os



class PemutarVideo(QtGui.QMainWindow, QtGui.QWidget):

    def __init__(self):

        super(PemutarVideo, self).__init__()



        self.penampungPath = []

        self.initUI()

        self.indeks = 0



        self.volume = self.pemutarVideo.volume()



    def initUI(self):

        self.setWindowTitle('Pemutar Video -> mn-belajarpython.blogspot.co.id')

        self.layout = QtGui.QGridLayout(self)

        self.layoutTombol = QtGui.QHBoxLayout(self)



        self.inisialisasiMedia()

        self.buatMenubar()

        self.buatSliderVolume()

        self.buatToolbar()

        self.agarWaktuDiPerbarui()



        self.layout.setRowStretch(0, 1)

        self.layout.setColumnStretch(2,2)



        centralWidget = QtGui.QWidget()

        centralWidget.setLayout(self.layout)

        self.setCentralWidget(centralWidget)



        self.show()



    def agarWaktuDiPerbarui(self):

        self.objekMedia = self.pemutarVideo.mediaObject()

        self.objekMedia.setTickInterval(1000)

        self.connect(self.objekMedia, QtCore.SIGNAL('tick(qint64)'), self.perbaruiWaktu)



    def inisialisasiMedia(self):

        self.pemutarVideo = Phonon.VideoPlayer(self)

        self.layout.addWidget(self.pemutarVideo, 0, 0, 1, 6)       # set size screenvideo



        self.audio = self.pemutarVideo.audioOutput()



    def buatMenubar(self):

        # QMainWindow

        subExit = QtGui.QAction(QtGui.QIcon('img/python.ico'), '&Exit', self)

        subExit.setShortcut('Ctrl+Q')

        subExit.triggered.connect(self.close)

        subOpen = QtGui.QAction(QtGui.QIcon('img/upload-2.png'), '&Open', self)

        subOpen.setShortcut('Ctrl+O')

        subOpen.triggered.connect(self.perintahBuka)

        subLibrary = QtGui.QAction('&Pustaka', self)

        subLibrary.triggered.connect(self.buatWindow)



        menubar = self.menuBar()

        menuFile = menubar.addMenu('&File')

        menuFile.addAction(subOpen)

        menuFile.addAction(subLibrary)

        menuFile.addAction(subExit)



        subNext = QtGui.QAction('&Next', self)

        subNext.triggered.connect(self.perintahNext)



        subPrevious = QtGui.QAction('&Previous', self)

        subPrevious.triggered.connect(self.perintahPrevious)

        subStop = QtGui.QAction('&Stop', self)

        subStop.setShortcut('Ctrl+S')

        subStop.triggered.connect(self.perintahStop)

        subPlay = QtGui.QAction('&Play/Pause', self)

        subPlay.setShortcut('Ctrl+P')

        subPlay.triggered.connect(self.putarAtauPause)



        menuVideo =  menubar.addMenu('&Video')

        menuVideo.addAction(subPlay)

        menuVideo.addAction(subStop)

        menuVideo.addSeparator()

        menuVideo.addAction(subPrevious)

        menuVideo.addAction(subNext)



        self.subMute = QtGui.QAction('&Mute', self)

        self.subMute.triggered.connect(self.perintahMute)

        subPerbesar = QtGui.QAction('&Perbesar', self)

        subPerbesar.triggered.connect(self.perintahPerbesar)

        subPerkecil = QtGui.QAction('&Perkecil', self)

        subPerkecil.triggered.connect(self.perintahPerkecil)



        menuAudio = menubar.addMenu('&Audio')

        menuAudio.addAction(self.subMute)

        menuAudio.addSeparator()

        menuAudio.addAction(subPerbesar)

        menuAudio.addAction(subPerkecil)



        subWeb = QtGui.QAction('&Pergi Ke Web', self)

        subWeb.triggered.connect(self.perintahWeb)

        menuWeb = menubar.addMenu('&Web')

        menuWeb.addAction(subWeb)



        subAbout = QtGui.QAction('&Tentang aplikasi', self)

        subAbout.triggered.connect(self.tentang)

        subAboutQt = QtGui.QAction('&Tentang modul', self)

        subAboutQt.triggered.connect(self.tentangQt)



        menuAbout = menubar.addMenu('&About')

        menuAbout.addAction(subAbout)

        menuAbout.addAction(subAboutQt)



    def buatSliderVolume(self):

        self.sliderProsesVideo = Phonon.SeekSlider(self)

        self.layout.addWidget(self.sliderProsesVideo,2,2,1,2)

        self.sliderProsesVideo.setMediaObject(self.pemutarVideo.mediaObject())



        self.sliderVolume = Phonon.VolumeSlider(self)        # memanggil objek sliderVolume

        self.layout.addWidget(self.sliderVolume,2,5)

        self.sliderVolume.maximumVolume()                 # createMaximum Sound when objek Created

        self.sliderVolume.setAudioOutput(self.audio)      # memasukkan objek sliderVolume untk mengatur volume



        self.waktuPutar = QtGui.QLabel('00:00:00')

        self.layout.addWidget(self.waktuPutar,2,1)



        self.waktuTotal = QtGui.QLabel('00:00:00')

        self.layout.addWidget(self.waktuTotal,2,4)



    def perintahBuka(self):

        dialog = QtGui.QFileDialog(self)                        # memanggil objekFileDialog

        dialog.setFileMode(QtGui.QFileDialog.ExistingFiles)      # memanggil objek dengan semua tipe file

        if dialog.exec_() == QtGui.QDialog.Accepted:

            path = dialog.selectedFiles()

            adaAtauTidak = False

            for i in path :

                for j in self.penampungPath:

                    if i == j[0] :

                        adaAtauTidak = True



                if not adaAtauTidak :

                    print('a')

                    lokasi=QtCore.QFileInfo(i).absolutePath()

                    self.penampungPath.append([i,lokasi])



            if self.pemutarVideo.isPlaying() != True:

                self.putarVideo()





    def putarAtauPause(self):

        if self.penampungPath :

            if self.pemutarVideo.isPlaying() :

                self.pemutarVideo.pause()

                self.tombolPlay.setIcon(self.style().standardIcon(QtGui.QStyle.SP_MediaPlay))

            else :

                self.tombolPlay.setIcon(self.style().standardIcon(QtGui.QStyle.SP_MediaPause))

                self.pemutarVideo.play()



        else:

            self.perintahBuka()



    def putarVideo(self):

        self.pemutarVideo.play(self.dapatkanData())

        self.pemutarVideo.finished.connect(self.selesai)



    def perintahStop(self):

        self.tombolPlay.setIcon(self.style().standardIcon(QtGui.QStyle.SP_MediaPlay))

        self.pemutarVideo.stop()



    def perintahPrevious(self):

        waktuPutar = self.pemutarVideo.currentTime()

        if waktuPutar > 5000 :

            self.pemutarVideo.seek(waktuPutar-5000)



    def perintahNext(self):

        waktuPutar = self.pemutarVideo.currentTime()

        total = self.pemutarVideo.totalTime()

        if total-5000>waktuPutar :

            self.pemutarVideo.seek(waktuPutar+5000)



    def perintahMute(self):

        if self.pemutarVideo.volume() == 0 :

            self.subMute.setText('Mute')

            self.pemutarVideo.setVolume(self.volume)

        else :

            self.subMute.setText('UnMute')

            self.volume=self.pemutarVideo.volume()

            self.pemutarVideo.setVolume(0)



    def perintahPerbesar(self):

        volume = self.pemutarVideo.volume()

        if volume < 1.0 :

            self.pemutarVideo.setVolume(volume+0.1)

    def perintahPerkecil(self):

        volume = self.pemutarVideo.volume()

        if volume > 0.0 :

            self.pemutarVideo.setVolume(volume-0.1)



    def buatToolbar(self):

        self.tombolPlay = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_MediaPlay), self.tr("Play"), self)

        self.tombolPlay.setShortcut(self.tr("Crl+P"))

        self.tombolPlay.triggered.connect(self.putarAtauPause)

        #self.subPlay.setDisabled(True)



        self.tombolStop = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_MediaStop), self.tr("Stop"), self)

        self.tombolStop.setShortcut(self.tr("Ctrl+S"))

        self.tombolStop.triggered.connect(self.perintahStop)

        #self.subStop.setDisabled(True)



        self.tombolNext = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_MediaSeekForward), self.tr("Next"), self)

        self.tombolNext.setShortcut(self.tr("Ctrl+N"))

        self.tombolNext.triggered.connect(self.perintahNext)



        self.tombolPrevious = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_MediaSeekBackward), self.tr("Previous"), self)

        self.tombolPrevious.setShortcut(self.tr("Ctrl+R"))

        self.tombolPrevious.triggered.connect(self.perintahPrevious)



        self.tombolLibrary = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_DirHomeIcon), self.tr("Previous"), self)

        self.tombolLibrary.triggered.connect(self.buatWindow)



        bar = QtGui.QToolBar()



        bar.addAction(self.tombolPlay)

        bar.addAction(self.tombolPrevious)

        bar.addAction(self.tombolStop)

        bar.addAction(self.tombolNext)

        bar.addAction(self.tombolLibrary)



        self.layoutTollbar = QtGui.QHBoxLayout()

        self.layoutTollbar.addWidget(bar)

        self.layout.addLayout(self.layoutTollbar, 2,0)



    def perbaruiWaktu(self, time):

        if self.pemutarVideo.isPlaying() :

            self.tombolPlay.setIcon(self.style().standardIcon(QtGui.QStyle.SP_MediaPause))



        displayTime = QtCore.QTime((time/(1000*60*60))% 60, (time / 60000) % 60, (time / 1000) % 60)

        self.waktuPutar.setText(displayTime.toString('hh:mm:ss'))



        total = self.pemutarVideo.totalTime()

        if total != -1 :

            displayTime = QtCore.QTime((total / (1000 * 60 * 60)) % 60, (total / 60000) % 60, (total / 1000) % 60)

            self.waktuTotal.setText(displayTime.toString('hh:mm:ss'))



        else :

            self.waktuTotal.setText('00:00:00')

            self.tombolPlay.setIcon(self.style().standardIcon(QtGui.QStyle.SP_MediaPlay))



    def perintahWeb(self):

        QtGui.QDesktopServices.openUrl(QtCore.QUrl('Http://mn-belajarpython.blogspot.co.id'))



    def tentang(self):

        QtGui.QMessageBox.information(self, "Tentang aplikasi",

                self.tr("Aplikasi ini merupakan sebuah apliakasi sederhana. "

                        "Namun, saya rasa aplikasi ini sudah cukup bagus. "

                        "dari segi design. karena, didukung oleh modul yang "

                        "cukup lengkap dari PySide. sehingga saya hanya "

                        "menggunakannya saja\n"

                        "\nnah gimana ? menarikkan ? yuk kunjungi :  "

                        "mn-belajarpython.blogspot.co.id untuk tutorial "

                        "menarik lainnya..."))

    def tentangQt(self):

        QtGui.QMessageBox.aboutQt(self)



    def closeEvent(self, event):

        self.destroy()



    def MasukanData(self, item):

        self.penampungPath.append(item)



    def selesai(self):

        self.indeks += 1

        if self.indeks < len(self.penampungPath) :

            self.pemutarVideo.play(self.dapatkanData())

        else :

            self.pemutarVideo.play(self.dapatkanData())

            self.pemutarVideo.stop()



    def dapatkanData(self):

        if len(self.penampungPath) > 0 and self.indeks < len(self.penampungPath)  :

            return self.penampungPath[self.indeks][0]

        else :

            self.indeks = 0

            return self.penampungPath[self.indeks][0]



    def klikTabel(self, baris, kolom):

        self.tablewidget.selectRow(baris)

        data = self.tablewidget.item(baris, 0).text()

        for i in range(len(self.penampungPath)) :

            if os.path.basename(self.penampungPath[i][0]) == data :

                self.indeks=i

                self.putarVideo()

    def klik(self, baris, kolom):

        self.tablewidget.selectRow(baris)



    def updateTabel(self):

        for i in range(self.tablewidget.rowCount()):

            self.tablewidget.removeRow(0)

        for i in range(len(self.penampungPath)):

            namaFile = os.path.basename(self.penampungPath[i][0])

            lokasi = str(self.penampungPath[i][1])

            self.tablewidget.insertRow(i)

            namaFile = QtGui.QTableWidgetItem(namaFile)

            durasi = QtGui.QTableWidgetItem(str(lokasi))



            namaFile.setFlags(namaFile.flags() ^ QtCore.Qt.ItemIsEditable)

            durasi.setFlags(durasi.flags() ^ QtCore.Qt.ItemIsEditable)



            self.tablewidget.setItem(i,0,namaFile)

            self.tablewidget.setItem(i,1,durasi)



    def buatWindow(self):

        self.wid = QtGui.QWidget()

        self.wid.resize(450, 250)

        self.wid.setWindowTitle('Daftar putar')

        self.wid.show()



        title = ['Judul', 'Lokasi' ]

        data = self.penampungPath



        # besarnya kolom

        colcnt = len(title)

        rowcnt = len(data)



        self.tablewidget = QtGui.QTableWidget(rowcnt, colcnt)



        self.connect(self.tablewidget, QtCore.SIGNAL('cellDoubleClicked(int, int)'),self.klikTabel)

        self.connect(self.tablewidget, QtCore.SIGNAL('cellPressed(int, int)'),self.klik)



        #judul vertikal

        vheader = QtGui.QHeaderView(QtCore.Qt.Orientation.Vertical)

        vheader.setResizeMode(QtGui.QHeaderView.ResizeToContents)

        self.tablewidget.setVerticalHeader(vheader)



        #judul horizontal

        hheader = QtGui.QHeaderView(QtCore.Qt.Orientation.Horizontal)

        hheader.setResizeMode(QtGui.QHeaderView.ResizeToContents)

        self.tablewidget.setHorizontalHeader(hheader)

        self.tablewidget.setHorizontalHeaderLabels(title)



        self.updateTabel()



        layout = QtGui.QHBoxLayout(self.wid)

        layout.addWidget(self.tablewidget)



if __name__ == '__main__':

    import sys

    app = QtGui.QApplication(sys.argv)

    window = PemutarVideo()

    window.show()

    sys.exit(app.exec_())


Dan berikut contoh screenshoot dari mini aplikasi kali ini...



Penjelasan code program Aplikasi Pemutar Video PySide versi 10.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]

from PySide import QtGui, QtCore  //mengimport class QtGui dan QtCore dari pyside
from PySide.phonon import Phonon  ///mengimport Phonon dari PySide

class PemutarVideo(QtGui.QWidget):  //membuat clas ‘PemutarVideo”
    def __init__(self):  //construktor dari clas “PemutarVideo”
        super(PemutarVideo, self).__init__()  //menjalankan superclass (QWidget)

        self.path = []  //lokasi Video (kosong awal)
        self.initUI()  //menjalankan metode ‘initUi’
        self.indeks = 0  //menentukan posisi video yang diputar

    def initUI(self):  //metode ‘initUI’
        self.setWindowTitle('Pemutar Video -> mn-belajarpython.blogspot.co.id')  //mengubah judl window aplikasi
        self.layout = QtGui.QGridLayout(self)i  //membuat Layout (grid Layout)

        self.inisialisasiMedia()  //menjalankan metode ‘inisialisasiMedia’
        self.buatMenubar()  //menjalankan metode ‘buatMenubar’
        self.buatSliderVolume()  //menjalankan metode ‘buatSliderVolume’
        self.buatToolbar()  //menjalankan metode ‘buatToolbar’
        self.agarWaktuDiPerbarui()

        self.layout.setRowStretch(0, 1)  //Menentukan posisi yang akan di ubah ukuran nya saat window di ubah ukurannya
        self.layout.setColumnStretch(2, 2)  //mengatur area yg akan di perbesar dan diperkecil

        centralWidget = QtGui.QWidget()  //membuat central widget (tempat video dan tombol)
        centralWidget.setLayout(self.layout)  //memasukkan layout ytama ke widget
        self.setCentralWidget(centralWidget)  //memasukkan widget kedalam window

        self.show()  //menampilkan window

    def agarWaktuDiPerbarui(self):  //metode ‘agarWaktuDiPerbarui’
        self.objekMedia = self.pemutarVideo.mediaObject()  //mendapat objek pemutar video
        self.objekMedia.setTickInterval(1000)  //membuat interval pengulangan

        self.connect(self.objekMedia, QtCore.SIGNAL('tick(qint64)'), self.perbaruiWaktu)  //menjalankan metode ‘perbaruiWaktu’ setiap detik

    def inisialisasiMedia(self):  //metode ‘inisialisasiMedia’
        self.pemutarVideo = Phonon.VideoPlayer(self)  //memanggil class ‘VideoPlayer’ (layar video)
        self.layout.addWidget(self.pemutarVideo, 0, 0, 1, 6)  # set size screenvideo  //memasukkan pemutar video ke dalam window

        self.audio = self.pemutarVideo.audioOutput()  //membuat audio output Video

    def buatMenubar(self):  //metode ‘buatMenubar’
        subExit = QtGui.QAction(QtGui.QIcon('img/python.ico'), '&Exit', self)  //membuat sub meny ‘exit’
        subExit.setShortcut('Ctrl+Q')  //shortcut submenu exit
        subExit.triggered.connect(self.close)  //menjalankan metode ‘close’ jik klik submenu ‘exit’

        subOpen = QtGui.QAction(QtGui.QIcon('img/upload-2.png'), '&Open', self)  //membuat submenu open
        subOpen.setShortcut('Ctrl+O')  //shortcut submenu open
        subOpen.triggered.connect(self.perintahBuka)  //menjalakan metode ‘perintahBuka’ jika mengklik sub menu ‘open’

        menubar = self.menuBar()  //membuat menubar
        menuFile = menubar.addMenu('&File')  //membuat menu ‘file’
        menuFile.addAction(subOpen)  //memasukkan submenu ‘open’ kedalam menu file
        menuFile.addAction(subExit)  //memasukkan submenu ‘exit’ kedalam menu file

        subNext = QtGui.QAction('&Next', self)  //membuat submenu next
        subNext.triggered.connect(self.perintahNext)  //menjalankan metode ‘perintahNext’ jika klik sub menu next

        subPrevious = QtGui.QAction('&Previous', self)  //membuat sub menu previous
        subPrevious.triggered.connect(self.perintahPrevious)  //menjalankan metode ‘perintahPrevious’ jika klik sub menu previous
        subStop = QtGui.QAction('&Stop', self)  //membuat sub menu stop
        subStop.setShortcut('Ctrl+S')  //shortcut submenu stop
        subStop.triggered.connect(self.perintahStop)  //menjalankan metode ‘perintahStop’ jik klik submenu stop
        subPlay = QtGui.QAction('&Play/Pause', self)  //submenu play
        subPlay.setShortcut('Ctrl+P')  //shortcut submenu play
        subPlay.triggered.connect(self.putarAtauPause)  //menjalankan metode ‘putarAtauPause’ jika sub menu play di klik

        menuVideo = menubar.addMenu('&Video')  //membuat menu video
        menuVideo.addAction(subPlay)  //memasukkan submenu ‘play’ kedalam menu video
        menuVideo.addAction(subStop)  //memasukkan submenu ‘stop’ kedalam menu video
        menuVideo.addSeparator()  //membuat garis pembatas
        menuVideo.addAction(subPrevious)  //memasukkan submenu ‘previous’ kedalam menu video
        menuVideo.addAction(subNext)  //memasukkan submenu ‘next’ kedalam menu video

        self.subMute = QtGui.QAction('&Mute', self)  //submenu mute
        self.subMute.triggered.connect(self.perintahMute)  //menjalankan metode ‘perintahMute’ jika klik submenu ‘mute’
        subPerbesar = QtGui.QAction('&Perbesar', self)  //sub menu perbesar
        subPerbesar.triggered.connect(self.perintahPerbesar)  //menjalankan metode ‘perintahPerbesar’ jika klik submenu ‘perbesar’
        subPerkecil = QtGui.QAction('&Perkecil', self)  //submenu perkecil
        subPerkecil.triggered.connect(self.perintahPerkecil)  //menjalankan metode ‘perintahPerkecil’ jika klik submenu ‘perkecil’

        menuAudio = menubar.addMenu('&Audio')  //membuat menu ‘Audio’
        menuAudio.addAction(self.subMute)  //memasukkan submenu ‘mute’ kedalam menu Audio
        menuAudio.addSeparator()  //membuat garis separator
        menuAudio.addAction(subPerbesar)  //memasukkan submenu ‘perbesar’ kedalam menu Audio
        menuAudio.addAction(subPerkecil)  //memasukkan submenu ‘perkecil’ kedalam menu Audio

        subWeb = QtGui.QAction('&Pergi Ke Web', self)  //submenu ‘pergi ke web’
        subWeb.triggered.connect(self.perintahWeb)  //menjalankan metode ‘perintahWeb’ jika submenu ‘web’ di klik
        menuWeb = menubar.addMenu('&Web')  //membuat menu web
        menuWeb.addAction(subWeb)  //memasukkan sub menu ‘pergi ke web’ ke dalam menu web

        subAbout = QtGui.QAction('&Tentang aplikasi', self)  //sub menu ‘tentang aplikasi’
        subAbout.triggered.connect(self.tentang)  //menjalankan metode ‘tentang’ jik klik sub menu ‘tentang aplikasi’
        subAboutQt = QtGui.QAction('&Tentang modul', self)  //submenu ‘tentang module’
        subAboutQt.triggered.connect(self.tentangQt)  //menjalankan metode ‘tentangQt’ jika klik submenu ‘Tentang Modul’

        menuAbout = menubar.addMenu('&About')  //membuat menu ‘about’
        menuAbout.addAction(subAbout)  //memasukkan submenu ‘tentang aplikasi’ ke menu about
        menuAbout.addAction(subAboutQt)  //memasukkan submenu ‘tentang modul’ ke menu about

    def buatSliderVolume(self):  //metode buatSliderVolume
        self.sliderProsesVideo =Phonon.SeekSlider(self)  //membuat slider progress putar video
        self.layout.addWidget(self.sliderProsesVideo,2,0,1,3)  //memasukkan slider ke window
        self.sliderProsesVideo.setMediaObject(self.pemutarVideo.mediaObject())  //menghubungkan pemutar video dengan slider.

        self.sliderVolume = Phonon.VolumeSlider(self)  //membuat slider volume
        self.layout.addWidget(self.sliderVolume,2,4)  //memasukkan slider volume kewindow
        self.sliderVolume.maximumVolume()  //membuat volume berada di level maksimal
        self.sliderVolume.setAudioOutput(self.audio)   //menghubungkan slider dengan pemutar viideo

        self.waktuPutar = QtGui.QLabel('00:00:00')  //membuat teks waktu putar
        self.layout.addWidget(self.waktuPutar, 2, 1)  //memasukkan teks waktu putar

        self.waktuTotal = QtGui.QLabel('00:00:00')  //membuat teks total waktu video
        self.layout.addWidget(self.waktuTotal, 2, 4)  //memasukkan tesk total video

    def perintahBuka(self):  //metode ‘perintahBuka’
        dialog = QtGui.QFileDialog(self)  //membuka pemilih file
        dialog.setFileMode(QtGui.QFileDialog.ExistingFile)  //menentukan prilaku pembuka file
        if dialog.exec_() == QtGui.QDialog.Accepted:  //memastikan user memilih file
            path = dialog.selectedFiles()  //mendapatkan file yang dipilih user
            adaAtauTidak = False  //sebagai penentu ada atau tidak nya file video
            for i in path :  //melakukan perulangan sebanyak file video yang dipilih
                for j in self.penampungPath:  //melakukan perulangan sebanyak video di pustaka
                    if i == j[0] :  //memastikan file video yang dipilih tidak ada di daftar pustaka
                        adaAtauTidak = True  //mengubah menjadi true jika file video sudah ada

                if not adaAtauTidak :  //memastikan video di pilih tidak ada di daftar pustaka (memastikan bernilai false)
                    lokasi=QtCore.QFileInfo(i).absolutePath()  /mendapatkan lokasi file video yang akan dibuka
                    self.penampungPath.append([i,lokasi])  //memasukkan fil video ke pustaka

            if self.pemutarVideo.isPlaying() != True:  //mengecek apakah pemutar video tidak sedang memutar
                self.putarVideo()  //memutar video

    def putarAtauPause(self):  //metode ‘putarAtauPause’
        if self.path :  //memastikan variabel ‘path’ tidak kosong
            if self.tombolPlay.text() == 'Play' :  //mengcek apakah teks tombol adalah ‘Play’
                self.tombolPlay.setText('Pause')  //mengubah teks tombol menjadi ‘Pause’
                self.pemutarVideo.play()  //memutar vieo
            else :  //jika teks tombol tidak sama dengan ‘play’
                self.pemutarVideo.pause()  //menjeda pemutar
                self.tombolPlay.setText('Play')  //mengubah teks tombol menjadi play
        else:  //jika variabel path kosong
            self.perintahBuka()  //menjalankan metode ‘perintahBuka’

    def putarVideo(self):  //metode ‘putarVideo’
        self.pemutarVideo.play(self.dapatkanData())  //memutar video
        self.pemutarVideo.finished.connect(self.selesai)  //menjalankan metode ‘selesai’ jika pemutaran video telah usai

    def perintahStop(self):  //metode ‘perintahStop’
        self.tombolPlay.setText('Play')  //mengubah teks tombol menajadi ‘play’
        self.pemutarVideo.stop()  //menghentikan pemutaran video

    def perintahPrevious(self):  //metode ‘perintahPrevious’
        try :  //mencoba beberapa code
            waktuPutar = self.pemutarVideo.currentTime()  //mendapatkan waktu putar video
            if waktuPutar > 5000 :  //memastikan waktu putar lwbih dari 5 detik (5000 mili detik)
                self.pemutarVideo.seek(waktuPutar-5000)  //memundurkan pemutaran sebanyak 5 detik (500milidetik)
        except :  //jika code try error
            pass //tidak melakukan apa apa

    def perintahNext(self):  //metode perintahNext
        waktuPutar = self.pemutarVideo.currentTime())  //mendapatkan waktu putar video
        waktuTotal = self.pemutarVideo.totalTime()  //mendapatkan durasi total video
        if waktuTotal-5000 > waktuPutar:  //memastiakan waktu total kurang dari 5 detik atau lebih dari durasi total
            self.pemutarVideo.seek(waktuPutar+5000)  //memajukan waktu putar video

    def perintahMute(self):  //metode ‘perintahMute’
        if self.pemutarVideo.volume() == 0:  //mengecek apakah volume dalam ke adaan 0
            self.subMute.setText('Mute')  //mengubah teks submenu mute
            self.pemutarVideo.setVolume(self.volume)  //mengubah nilai volume
        else:  //jika volume tidak 0
            self.subMute.setText('UnMute')  //mengubah teks submenu mute
            self.volume = self.pemutarVideo.volume()   //mendpatkan nilai volume
            self.pemutarVideo.setVolume(0)  //mengubah nilai volume menjadi 0

    def perintahPerbesar(self):  //metode ‘perintahPerbesar’
        volume = self.pemutarVideo.volume()  //mendapatkan volume
        if volume < 1.0:  //memastikan nilai volume lebih kecil dari 1
            self.pemutarVideo.setVolume(volume + 0.1)  //menambah volume sebanyak 0.1

    def perintahPerkecil(self):  //metode ‘perintahPerkecil’
        volume = self.pemutarVideo.volume()  //mendapatkan volume
        if volume > 0.0:  //memastikan volume lebih besar dari 0.0
            self.pemutarVideo.setVolume(volume - 0.1)  //mengurangi volume sebesar 0.1

    def buatToolbar(self):  //metode ‘buatToolbar’
        self.tombolPlay = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_MediaPlay), self.tr("Play"), self)  //membuat tombol play
        self.tombolPlay.setShortcut(self.tr("Crl+P"))  //membuat shortcut tombol play
        self.tombolPlay.triggered.connect(self.putarAtauPause)  //menjalankan metode ‘putarAtauPause’ jika klik tombol play

        self.tombolStop = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_MediaStop), self.tr("Stop"), self)  //tombol stop
        self.tombolStop.setShortcut(self.tr("Ctrl+S"))  //shortcut tombol stop
        self.tombolStop.triggered.connect(self.perintahStop)  //menjalankan metode ‘perintahStop’ jika tombol stop di klik

        self.tombolNext = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_MediaSeekForward), self.tr("Next"),self)  //tombol next
        self.tombolNext.setShortcut(self.tr("Ctrl+N"))  //shortcut tombol next
        self.tombolNext.triggered.connect(self.perintahNext)  //menjalakan metode ‘perintahNext’ jika di klik

        self.tombolPrevious = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_MediaSeekBackward),self.tr("Previous"), self)  //tombol previous
        self.tombolPrevious.setShortcut(self.tr("Ctrl+R"))  //shortcut tombol previous
        self.tombolPrevious.triggered.connect(self.perintahPrevious)  //menjalankan metode ‘peritnahPrevious’ jika tombol previous di klik

        self.tombolLibrary = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_DirHomeIcon), self.tr('Pustaka'), self)  //membuat tombol pustaka
        self.tombolLibrary.triggered.connect(self.buatWindow)  //menjalankan  metode ‘buatWindow’ jika klik tombol pustaka

        bar = QtGui.QToolBar()  //membuat toolbar

        bar.addAction(self.tombolPlay)  //memasukkan tombol play ke toolbar
        bar.addAction(self.tombolPrevious)  //memasukkan tombol previous ke toolbar
        bar.addAction(self.tombolStop)  //memasukkan tombol stop ke toolbar
        bar.addAction(self.tombolNext)  //memasukkan tombol next ke toolbar
        bar.addAction(self.tombolBuka)  //memasukkan tombol buka ke toolbar

        self.layoutTollbar = QtGui.QHBoxLayout()  //membuat layout toolbar
        self.layoutTollbar.addWidget(bar)  //memasukkan layout toolbar ke window
        self.layout.addLayout(self.layoutTollbar, 2, 0)  //memasukkan toolbar ke layout toolbar

    def perbaruiWaktu(self, time):  //metode perbarui waktu
        displayTime = QtCore.QTime((time / (1000 * 60 * 60)) % 60, (time / 60000) % 60, (time / 1000) % 60) //inisialisasi perbarui waktu pemutaran video
        self.waktuPutar.setText(displayTime.toString('hh:mm:ss'))  //mengupdate waktu di window

        total = self.pemutarVideo.totalTime()  //mendapatkan waktu total video
        if total != -1:  //memastikan total putar video tidak kosong
            displayTime = QtCore.QTime((total / (1000 * 60 * 60)) % 60, (total / 60000) % 60, (total / 1000) % 60)  //inisialisasi waktu total putar video
            self.waktuTotal.setText(displayTime.toString('hh:mm:ss'))  //memperbarui nilai teks waktu di window
        else:  //jika waktu total putar kosong
            self.waktuTotal.setText('00:00:00')   //mengubah waktu total putar video menjadi 0 jika total waktu jadi kosong
            self.tombolPlay.setIcon(self.style().standardIcon(QtGui.QStyle.SP_MediaPlay))  //mengubah ikon tombol play

    def perintahWeb(self):  //metode perintahWeb
        QtGui.QDesktopServices.openUrl(QtCore.QUrl('Http://mn-belajarpython.blogspot.co.id'))  //pergi ke blog mn-belajarpython.blogspot.co.id :)

    def tentang(self):  //metode ‘tentang’
        QtGui.QMessageBox.information(self, "Tentang aplikasi",
                                      self.tr("Aplikasi ini merupakan sebuah apliakasi sederhana. "
                                              "Namun, saya rasa aplikasi ini sudah cukup bagus. "
                                              "dari segi design. karena, didukung oleh modul yang "
                                              "cukup lengkap dari PySide. sehingga saya hanya "
                                              "menggunakannya saja\n"
                                              "\nnah gimana ? menarikkan ? yuk kunjungi :  "
                                              "mn-belajarpython.blogspot.co.id untuk tutorial "
                                              "menarik lainnya...")) //menampilkan pesan aplikasi
    def tentangQt(self):  //metode ‘tentangQt’
        QtGui.QMessageBox.aboutQt(self)  //menampilkan tentang pyside

    def closeEvent(self, event):  //metode yang akan di jalankan secara otomatis jika window di tutup
        self.destroy()  //menghancurkan pemutaran video (class pemutarVideo)


    def MasukanData(self, item):  //metode ‘masukkanData’
        self.penampungPath.append(item)  //memasukkan data (video)

    def selesai(self):  //metode selesai
        self.indeks += 1  //menambah nilai indeks
        if self.indeks < len(self.penampungPath) :  //memastikan indeks tidak lebih dari jumlah video
            self.pemutarVideo.play(self.dapatkanData())  /memutar video
        else :  //jika indeks sudah lebih dari total video
            self.pemutarVideo.play(self.dapatkanData())  //memutar video
            self.pemutarVideo.stop()  //menghentikan pemutaran

    def dapatkanData(self):  //metode ‘dapatkanData’
        if len(self.penampungPath) > 0 and self.indeks < len(self.penampungPath)  :  //mematikan nilai variabel ‘indeks’ di dalam area jumlah file
            return self.penampungPath[self.indeks][0]  //mengembalikan lokasi file sesuai indeks
        else :  //jika nilai variabel indeks sudah diluar area jumlah video
            self.indeks = 0  //membuat indeks kembali 0.
            return self.penampungPath[self.indeks][0]  //memberikan lokasi video posisi pertama

    def klikTabel(self, baris, kolom):  //metode ‘klik tabel’
        self.tablewidget.selectRow(baris)  //mendpatkan baris yang di klik
        data = self.tablewidget.item(baris, 0).text()  //mendapatkan judul yang di klik
        for i in range(len(self.penampungPath)) :  //melakukan perulangan sebanyak video pustaka
            if os.path.basename(self.penampungPath[i][0]) == data :  //mencari judul yang di klik
                self.indeks=i   //mendapatkanindeks file video yang di klik
                self.putarVideo()  //menjalankan metode ‘putarVideo’
    def klik(self, baris, kolom):  //metode ‘klik\
        self.tablewidget.selectRow(baris)  //memilih semua kolom pada baris yang di klik

    def updateTabel(self):  //metode ‘updateTabe’
        for i in range(self.tablewidget.rowCount()):  //melakukan perulangan sebanyak jumlah baris tabel
            self.tablewidget.removeRow(0)  //menghapus semua baris tabel
        for i in range(len(self.penampungPath)):  //melakuan perulangan sebanyak file video di penampungPath
            namaFile = os.path.basename(self.penampungPath[i][0])  //mendapatkan nama tiap file video
            lokasi = str(self.penampungPath[i][1])  //mendapatkan lokasi tiap video
            self.tablewidget.insertRow(i)  //menambah baris baru di tabel
            namaFile = QtGui.QTableWidgetItem(namaFile)  //menjadikan nama file menjadi item tabel
            durasi = QtGui.QTableWidgetItem(str(lokasi))  //membuat lokasi file menjadi item tabel

            namaFile.setFlags(namaFile.flags() ^ QtCore.Qt.ItemIsEditable)  //membuat kolom nama file agar tidak bisa di edit user
            durasi.setFlags(durasi.flags() ^ QtCore.Qt.ItemIsEditable)  //agar kolom lokasi tidakbisa di edit user

            self.tablewidget.setItem(i,0,namaFile)  //memasukkan nama file ke tabel
            self.tablewidget.setItem(i,1,durasi)  //memasukkan lokasi file ke tabel

    def buatWindow(self):  //metode ‘buatWindow’
        self.wid = QtGui.QWidget()  //membuat window baru
        self.wid.resize(450, 250)  //mengubah ukuran window
        self.wid.setWindowTitle('Daftar putar')  //mengubah judul
        self.wid.show()  //menampilkan window

        title = ['Judul', 'Lokasi' ]  //judul tabel
        data = self.penampungPath  //mendapatkan penampung path untuk mengetahui total video

        # besarnya kolom
        colcnt = len(title)  //menghitung jumlah judul tabel
        rowcnt = len(data)  //mendapatkan jumlah  video di pustaka

        self.tablewidget = QtGui.QTableWidget(rowcnt, colcnt)  //membuat tabel sebanyak jumlah video

        self.connect(self.tablewidget, QtCore.SIGNAL('cellDoubleClicked(int, int)'),self.klikTabel)  //menjalankan metode ‘klikTabel’ jika double klik pada judul video
        self.connect(self.tablewidget, QtCore.SIGNAL('cellPressed(int, int)'),self.klik)  //menjalankan metode ‘klik’ jika klik satu kali pada judlu video

        #judul vertikal
        vheader = QtGui.QHeaderView(QtCore.Qt.Orientation.Vertical)  //mengaktifkan judul samping
        vheader.setResizeMode(QtGui.QHeaderView.ResizeToContents)  //mengubah ukuran agar sesuai kontern
        self.tablewidget.setVerticalHeader(vheader)  //memasukkkan judul samping video

        #judul horizontal
        hheader = QtGui.QHeaderView(QtCore.Qt.Orientation.Horizontal)  //judul atas
        hheader.setResizeMode(QtGui.QHeaderView.ResizeToContents)  //membuat lebar kolom sesuai konten
        self.tablewidget.setHorizontalHeader(hheader)  //memasukkan judul atas
        self.tablewidget.setHorizontalHeaderLabels(title)  //memasukkan nama nama judul atas tabel

        self.updateTabel()  //menjalankan metode ‘updateTabel’

        layout = QtGui.QHBoxLayout(self.wid)  //membuat layout
        layout.addWidget(self.tablewidget)  //memasukkan tabel ke dalam window (layout)

if __name__ == '__main__':  //agar di jalankan pertama kali saat file python dieksekusi
    import sys  //menngimport class sys dari python

    app = QtGui.QApplication(sys.argv)  //mendefinisikan window aplikasi
    window = PemutarVideo()  //menjalankan class ‘PemutarVideo’
    window.show()  //menampilkan window pemutar video

    sys.exit(app.exec_())  //agar window tidak langsung tertutup saat dijalankan


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