Aplikasi Browser Python versi 11

BelajarPython - Assalamualaikum wr. wb.

Jumpa lagi temen.. Kali ini, saya akan mengajak kalian untuk membuat mini aplikasi lagi.. Aplikasi apa? Penasaran ?  Langsung saja di simak ya..

Pengenalan aplikasi yang akan kita buat.

Aplikasi yang kita buat kali ini adalah Browser. Udah tau kan ? Ya seperti chrome atau mozila gitu..  Tapi dengan fitur yang seadanya saja ya... 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...

Kali ini saya akan menghadirkan versi yang ke 11.. Dimana pada versi kali ini, memungkinkan kita melihat daftar web/halaman yang sudah kita liat...

Rincian Lengkap Aplikasi Browser PySide Versi 11.0

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

Nama : mn-Browser 11.0
Versi : 11.0 || versi awal.
Bahasa : Python 3.x  || Install.
Modul : PySide || Install.
Baris Code : +-478 baris.
Penambahan : +-122  baris.
Terdiri dari : 3 class dan 40 metode.
Fitur : Membuat daftar history penelusuran.
Kelemahan : hanya menampilkan history penelusuran saat di run. Dan hilang saat di close.
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 Browser PySide versi 11.0

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

from PySide import QtCore, QtGui, QtWebKit

import sys, time



class TabDialog(QtGui.QMainWindow):

    def __init__(self):

        QtGui.QMainWindow.__init__(self)



        self.penampungTab = []

        self.tambah = False



        self.inisialisasiTab()

        self.tambahTab()

        self.tabKeWindow()



    def inisialisasiTab(self):

        self.elemenTab = QtGui.QTabWidget(self)

        # self.elemenTab.addTab(GeneralTab(), "General")

        self.elemenTab.setMovable(True)

        self.elemenTab.tabCloseRequested.connect(self.tutup)



        self.tabButton = QtGui.QToolButton(self)

        self.tabButton.setText('+')

        font = self.tabButton.font()

        font.setBold(True)

        self.tabButton.setFont(font)

        self.elemenTab.setCornerWidget(self.tabButton, QtCore.Qt.TopLeftCorner)

        self.tabButton.clicked.connect(self.tambahTab)



    def tambahTab(self):

        self.penampungTab.append(Browser(parent=self))

        a = self.elemenTab.addTab(self.penampungTab[len(self.penampungTab) - 1], "No Internet Connection")

        self.elemenTab.setTabShape(QtGui.QTabWidget.Triangular)

        self.tambah = True



        if self.elemenTab.count() < 2:

            self.elemenTab.setTabsClosable(False)

        else:

            self.elemenTab.setTabsClosable(True)



        self.elemenTab.setCurrentIndex(self.elemenTab.count() - 1)



    def tabKeWindow(self):

        self.centralWidget = QtGui.QWidget(self)



        mainLayout = QtGui.QVBoxLayout(self.centralWidget)

        mainLayout.addWidget(self.elemenTab)

        mainLayout.setContentsMargins(0, 0, 0, 0)



        self.setCentralWidget(self.centralWidget)

        self.setWindowTitle("Mini WebBrowser -> mn-belajarpython.blogspot.co.id")



    def perintahTutup(self):

        if self.elemenTab.count() > 1:

            posisi = self.elemenTab.currentIndex()

            self.elemenTab.removeTab(posisi)

            if self.elemenTab.count() == 1:

                self.elemenTab.setTabsClosable(False)



    def tutup(self, i):

        self.elemenTab.removeTab(i)

        if self.elemenTab.count() < 2:

            self.elemenTab.setTabsClosable(False)



    def tabBukaLinkDariHistory(self, url):

        browser = Browser(parent=self, url=url)

        self.penampungTab.append(browser)

        a = self.elemenTab.addTab(self.penampungTab[len(self.penampungTab) - 1], "No Internet Connection")

        self.tambah = True



        if self.elemenTab.count() < 2:

            self.elemenTab.setTabsClosable(False)

        else:

            self.elemenTab.setTabsClosable(True)



        self.elemenTab.setCurrentIndex(self.elemenTab.count() - 1)



    def tabHistory(self):

        a = self.elemenTab.addTab(History(parent=self), "History")

        self.tambah = True



        self.elemenTab.setCurrentIndex(self.elemenTab.count() - 1)



        if self.elemenTab.count() < 2:

            self.elemenTab.setTabsClosable(False)

        else:

            self.elemenTab.setTabsClosable(True)



    def setJudul(self, teks, memori, tooltip):

        for i in range(self.elemenTab.count()):

            if self.elemenTab.widget(i).getPosisiMemory() == memori:

                self.elemenTab.setTabText(i, teks)

                self.elemenTab.setTabToolTip(i, tooltip)



    def closeEvent(self, event):

        self.destroy()





class Browser(QtGui.QMainWindow):

    def __init__(self, parent=None, url=''):

        QtGui.QMainWindow.__init__(self)

        self.parent = parent

        self.resize(800, 600)

        self.centralwidget = QtGui.QWidget(self)



        self.default_url = "https://google.co.id"

        self.urlTab = url

        self.penampungHistory = []



        self.layout()

        self.buatToolbar()

        self.buatKolomCari()

        self.windowBrowser()

        self.browse()



    def layout(self):

        self.layoutUtama = QtGui.QHBoxLayout(self.centralwidget)

        self.layoutUtama.setContentsMargins(0, 0, 0, 0)



        self.frame = QtGui.QFrame(self.centralwidget)

        self.layoutBrowser = QtGui.QVBoxLayout(self.frame)

        self.layoutBrowser.setSpacing(0)



    def setValueProgressbar(self, pos):

        self.progressBar.setValue(pos)

        self.tombolReload.setIcon(self.style().standardIcon(QtGui.QStyle.SP_BrowserStop))

        self.progressBar.setVisible(True)



        self.tombolMaju.setEnabled(self.webBrowser.history().canGoForward())

        self.tombolKembali.setEnabled(self.webBrowser.history().canGoBack())



    def buatToolbar(self):

        self.layoutToolbar = QtGui.QHBoxLayout()



        self.kolomUrl = QtGui.QLineEdit(self.frame)

        self.kolomUrl.returnPressed.connect(self.browse)



        self.tombolKembali = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_ArrowBack), 'kembali', self.frame)

        self.tombolKembali.triggered.connect(self.perintahKembali)

        self.tombolKembali.setEnabled(False)

        self.tombolMaju = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_ArrowForward), 'maju', self.frame)

        self.tombolMaju.triggered.connect(self.perintahMaju)

        self.tombolMaju.setEnabled(False)

        self.tombolReload = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_BrowserReload), 'muat ulang',

                                          self.frame)

        self.tombolReload.triggered.connect(self.perintahReload)



        bar = QtGui.QToolBar()



        bar.addAction(self.tombolKembali)

        bar.addAction(self.tombolMaju)

        bar.addAction(self.tombolReload)



        self.tombolGo = QtGui.QPushButton(text='Go')

        self.tombolGo.clicked.connect(self.browse)



        self.layoutToolbar.addWidget(bar)

        self.layoutToolbar.addWidget(self.kolomUrl)

        self.layoutToolbar.addWidget(self.tombolGo)

        self.layoutToolbar.setContentsMargins(0, 0, 0, 0)

        self.layoutBrowser.setContentsMargins(0, 0, 0, 0)

        self.layoutBrowser.addLayout(self.layoutToolbar)



        self.menuTabBaru = QtGui.QAction(self, text='Tab Baru')

        self.menuTabBaru.triggered.connect(self.parent.tambahTab)

        self.menuTutupTab = QtGui.QAction(self, text='Tutup Tab')

        self.menuTutupTab.triggered.connect(self.parent.perintahTutup)

        self.menuHistory = QtGui.QAction(self, text='History')

        self.menuHistory.triggered.connect(self.parent.tabHistory)

        self.menuCetak = QtGui.QAction(self, text='Cetak')

        self.menuCetak.triggered.connect(self.perintahCetak)

        self.menuCari = QtGui.QAction(self, text='Cari')

        self.menuCari.triggered.connect(self.perintahBukaPencarian)

        self.menuWeb = QtGui.QAction(self, text='Web')

        self.menuWeb.triggered.connect(self.perintahWeb)

        self.menuAbout = QtGui.QAction(self, text='About')

        self.menuAbout.triggered.connect(self.tentang)

        self.menuAboutQt = QtGui.QAction(self, text='About Qt')

        self.menuAboutQt.triggered.connect(self.tentangQt)

        self.menuExit = QtGui.QAction(self, text='Exit')

        self.menuExit.triggered.connect(self.parent.close)



        self.menu = QtGui.QMenu(self)

        self.menu.addAction(self.menuTabBaru)

        self.menu.addAction(self.menuTutupTab)

        self.menu.addSeparator()

        self.menu.addAction(self.menuHistory)

        self.menu.addAction(self.menuCetak)

        self.menu.addAction(self.menuCari)

        self.menu.addSeparator()

        self.menu.addAction(self.menuAbout)

        self.menu.addAction(self.menuAboutQt)

        self.menu.addAction(self.menuWeb)

        self.menu.addAction(self.menuExit)



        self.buttonShow = QtGui.QPushButton(self)

        self.buttonShow.setText("")

        self.buttonShow.setMenu(self.menu)

        self.buttonShow.setFlat(True)



        self.layoutToolbar.addWidget(self.buttonShow)

        self.layoutToolbar.addWidget(self.buttonShow)



        self.progressBar = QtGui.QProgressBar()

        self.layoutBrowser.addWidget(self.progressBar)

        self.progressBar.setVisible(False)



    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 perintahCetak(self):

        infoPrinter = QtGui.QPrinterInfo()

        printer = QtGui.QPrinter(infoPrinter)

        self.webBrowser.print(printer)



    def windowBrowser(self):

        self.webBrowser = QtWebKit.QWebView()



        self.layoutBrowser.addWidget(self.webBrowser)

        self.layoutUtama.addWidget(self.frame)

        self.setCentralWidget(self.centralwidget)



    def buatKolomCari(self):

        layoutKolomCari = QtGui.QHBoxLayout(self)



        self.teks = QtGui.QLabel(self, text='Kata kunci : ')

        layoutKolomCari.addWidget(self.teks)



        self.tombolNext = QtGui.QPushButton(self, text='Next')

        self.tombolPrevious = QtGui.QPushButton(self, text='Previous')

        self.tombolTutup = QtGui.QPushButton(self, text='X')



        self.tombolTutup.clicked.connect(self.perintahTutupPencarian)

        self.tombolNext.clicked.connect(self.cariNext)

        self.tombolPrevious.clicked.connect(self.cariPrevious)



        self.tombolPrevious.setFlat(True)

        self.tombolNext.setFlat(True)



        self.tombolPrevious.setFixedSize(60, 20)

        self.tombolNext.setFixedSize(45, 20)

        self.tombolTutup.setFixedSize(20, 25)



        self.kolomCari = QtGui.QLineEdit(self)

        self.kolomCari.editingFinished.connect(self.cariNext)

        layoutKolomCari.addWidget(self.kolomCari)

        self.kolomCari.setFixedSize(200, 20)



        layoutKolomCari.addWidget(self.tombolNext)

        layoutKolomCari.addWidget(self.tombolPrevious)

        layoutKolomCari.addWidget(self.tombolTutup)



        layoutKolomCari.setAlignment(self.teks, QtCore.Qt.AlignRight)



        self.layoutBrowser.addLayout(layoutKolomCari)

        self.setVisiblePencari(False)



    def perintahTutupPencarian(self):

        self.setVisiblePencari(False)



    def perintahBukaPencarian(self):

        self.setVisiblePencari(True)

        self.kolomCari.setFocus()



    def cariPrevious(self):

        teks = self.kolomCari.text()

        gtw = QtWebKit.QWebPage.FindBackward

        self.webBrowser.findText(teks, gtw)



    def cariNext(self):

        teks = self.kolomCari.text()

        self.webBrowser.findText(teks)



    def setVisiblePencari(self, argumen):

        self.tombolPrevious.setVisible(argumen)

        self.tombolNext.setVisible(argumen)

        self.kolomCari.setVisible(argumen)

        self.teks.setVisible(argumen)

        self.tombolTutup.setVisible(argumen)



    def perintahWeb(self):

        self.webBrowser.load(QtCore.QUrl('http://mn-belajarpython.blogspot.co.id'))



    def browse(self):

        url = 'https://google.co.id'

        if self.urlTab:

            url = self.urlTab

            self.urlTab = ''

        elif self.kolomUrl.text():

            try:

                url = self.kolomUrl.text()

                url = url.lower()

                penampungUrl = []



                for i in url:

                    penampungUrl.append(i)



                if penampungUrl[0] != 'h' and penampungUrl[1] != 't' and penampungUrl[2] != 't' and penampungUrl[

                    3] != 'p' and penampungUrl[3] != 's' and penampungUrl[3] != '/' and penampungUrl[3] != '/':

                    if penampungUrl[0] == 'w' and penampungUrl[1] == 'w' and penampungUrl[2] == 'w' and penampungUrl[

                        3] == '.':

                        url = 'https://' + url

                    else:

                        urlPengganti = ''

                        for i in url:

                            if i != ' ':

                                urlPengganti += i

                            else:

                                urlPengganti += '+'

                            url = "https://www.google.co.id/search?espv=2&q=" + urlPengganti

            except:

                urlPengganti = ''

                for i in url:

                    if i != ' ':

                        urlPengganti += i

                    else:

                        urlPengganti += '+'

                    url = "https://www.google.co.id/search?espv=2&q=" + urlPengganti



        self.webBrowser.load(QtCore.QUrl(url))



        self.tombolMaju.setEnabled(self.webBrowser.history().canGoForward())

        self.tombolKembali.setEnabled(self.webBrowser.history().canGoBack())



        self.webBrowser.iconChanged.connect(self.kirimIcon)

        self.webBrowser.urlChanged.connect(self.setKolomUrl)

        self.webBrowser.loadProgress.connect(self.setValueProgressbar)

        self.webBrowser.loadFinished.connect(self.selesaiMemuat)

        self.webBrowser.titleChanged.connect(self.kirimJudul)



        self.webBrowser.show()



    def selesaiMemuat(self):

        self.tombolReload.setIcon(self.style().standardIcon(QtGui.QStyle.SP_BrowserReload))

        self.progressBar.setVisible(False)



    def perintahKembali(self):

        self.webBrowser.back()



    def perintahMaju(self):

        self.webBrowser.forward()



    def perintahReload(self):

        self.webBrowser.reload()



    def setKolomUrl(self):

        self.kolomUrl.setText(self.webBrowser.url().toString())



        jam = time.strftime("%H:%M", time.localtime())

        url = self.webBrowser.url().toString()



        self.penampungHistory.append([jam, url])



    def getPosisiMemory(self):

        return (str(self))



    def kirimJudul(self):

        judul = self.webBrowser.title()

        tab = self.parent

        memori = self.getPosisiMemory()

        toolTip = judul



        self.penampungHistory[len(self.penampungHistory) - 1].insert(1, judul)



        judulBaru = ''



        if len(judul) > 10:

            for i in range(len(judul)):

                judulBaru += judul[i]

                if i > 9:

                    judul = judulBaru + '...'

                    break



        tab.setJudul(judul, memori, toolTip)



    def closeEvent(self, event):

        self.destroy()





class History(QtGui.QMainWindow):

    def __init__(self, parent=None):

        QtGui.QMainWindow.__init__(self)

        self.parent = parent

        self.centralWidget = QtGui.QWidget(self)

        self.layout = QtGui.QHBoxLayout(self.centralWidget)

        self.buatWindow()

        self.setCentralWidget(self.centralWidget)



    def klikTabel(self, baris, kolom):

        self.tablewidget.selectRow(baris)

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

        self.parent.tabBukaLinkDariHistory(data)



    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.data)):



            try:

                jam = self.data[i][0]

                nama = self.data[i][1]

                url = self.data[i][3]

            except:

                try:

                    jam = self.data[i][0]

                    nama = self.data[i][1]

                    url = self.data[i][2]

                except:

                    pass



            self.tablewidget.insertRow(i)

            jam = QtGui.QTableWidgetItem(jam)

            nama = QtGui.QTableWidgetItem(nama)

            url = QtGui.QTableWidgetItem(str(url))



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

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

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



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

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

            self.tablewidget.setItem(i, 2, url)



    def buatWindow(self):

        title = ['Waktu', 'Nama', 'Alamat']

        self.data = []



        for i in range(len(self.parent.penampungTab)):

            self.data += self.parent.penampungTab[i].penampungHistory



        # besarnya kolom

        colcnt = len(title)

        rowcnt = len(self.data)



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



        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()



        self.layout.addWidget(self.tablewidget)



    def getPosisiMemory(self):

        return (str(self))



    def closeEvent(self, event):

        self.destroy()



if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)

    main = TabDialog()

    main.show()

    sys.exit(app.exec_())


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


Agar berhasil, Pastikan PC kalian terhubung dengan internet ya temen - temen...

Penjelasan code program Aplikasi Browser PySide versi 11.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 QtCore, QtGui, QtWebKit  //mengimport class yang di butuh kan dari library pyside
import sys  //mengimport sys

class TabDialog(QtGui.QMainWindow):  //class ‘TabDialog’ (inheritncce class QMainWindow)
    def __init__(self):  //construktor class ‘TabDialog’
        QtGui.QMainWindow.__init__(self) //menjalankan class parent (QMainWindow)

        self.penampungTab = []  //membuat penampung tab
        self.tambah = False  //inisialisasi variabel tambah.

        self.inisialisasiTab()  //menjalankan metode ‘inisialisasiTab’
        self.tambahTab()  //menjalankan metode ‘tambahTab’
        self.tabKeWindow()  //menjalankana metode ‘tabKeWindow’

    def inisialisasiTab(self):  //metode ‘inisialisasiTab’
        self.elemenTab = QtGui.QTabWidget(self)  //inisialisasi tab
        self.elemenTab.setMovable(True)  //agar tab bisa di pindahkan
        self.elemenTab.tabCloseRequested.connect(self.tutup)  //menjalankan metode ‘tutup’ jika klik tutup (x) tab 

        self.tabButton = QtGui.QToolButton(self)  //tombol tambah tab
        self.tabButton.setText('+')  //mengubah teks tombol tambah tab
        font = self.tabButton.font()  //mendapatkan font tombol
        font.setBold(True)  //membuat teks tombol menjadi tebal
        self.tabButton.setFont(font)  //memasukkan teks ke tombol kembali
        self.elemenTab.setCornerWidget(self.tabButton, QtCore.Qt.TopLeftCorner)  //memasukkan tombol tambah ke bagian kiri tab
        self.tabButton.clicked.connect(self.tambahTab)  //menjalankan metode ‘tambahTab’ jika klik tombol tambah

    def tambahTab(self):  //metode ‘tambahTab’
        self.penampungTab.append(Browser(parent=self))  //memasukkan class browser ke penampung tab
        a = self.elemenTab.addTab(self.penampungTab[len(self.penampungTab) - 1], "Google")  //membuat tab baru
        self.elemenTab.setTabShape(QtGui.QTabWidget.Triangular)  //mengatur gaya tab
        self.tambah = True  //mengubah nilai variabel ‘tambah’ (menandakan tab sudah di tambah)

        if self.elemenTab.count() < 2:  //mengecek apakah tab kurang dari 2
            self.elemenTab.setTabsClosable(False)  //membuat tab tidak bisa di tutupp (menyembunyikan tombol x)
        else:  //jika tab lebih dari satu
            self.elemenTab.setTabsClosable(True)  //membuat tab bisa di tutup (menampilkan tombol x)

        self.elemenTab.setCurrentIndex(self.elemenTab.count() - 1)  //mengubah posisi tab aktif ke tab baru

    def tabKeWindow(self):  //metode ‘tabKeWindow’
        self.centralWidget = QtGui.QWidget(self)  //inisialisasi widget utama tab

        mainLayout = QtGui.QVBoxLayout(self.centralWidget)  //membuat ‘layoutUtama’
        mainLayout.addWidget(self.elemenTab)  //memasukkan ‘tab’ ke layout utama
        mainLayout.setContentsMargins(0, 0, 0, 0)  //menghapus margin layout utama

        self.setCentralWidget(self.centralWidget)  //memasukkan layout utama ke window
        self.setWindowTitle("Mini WebBrowser -> mn-belajarpython.blogspot.co.id")  //mengubah judul window

    def perintahTutup(self):  //metode perintahTutup
        if self.elemenTab.count() > 1:  //memastikan tab lebih dari satu
            posisi = self.elemenTab.currentIndex()  //mendapatkan index yang tab yang akan di tutup
            self.elemenTab.removeTab(posisi)  //menghapus tab
            if self.elemenTab.count() == 1:  //mengecek apakah jumlah tab sudah sama dengan 1
                self.elemenTab.setTabsClosable(False)  //membuat tab tidak bisa di tutup

    def tutup(self, i):  //metode ‘tutup’
        self.elemenTab.removeTab(i)  //menghapus tab
        if self.elemenTab.count() < 2:  //mengecek apakah jumlah tab kurang dari dua
            self.elemenTab.setTabsClosable(False)  //membuat tab tidak bisa di tutup

    def tabBukaLinkDariHistory(self, url):  //metode ‘tabBukaLinkDariHistory’
        browser = Browser(parent=self, url=url)  //menjalankan class ‘Browser’ dengan memasukkan link dari daftar history yang di klik
        self.penampungTab.append(browser)  //memasukkan class browser ke variabel penampung tab
        a = self.elemenTab.addTab(self.penampungTab[len(self.penampungTab) - 1], "No Internet Connection")  //memasukkkan class browser ke tab
        self.tambah = True  //mengubah nilai variabel tambah menjadi true. Menandakan ada tab baru
        if self.elemenTab.count() < 2:  //mengecek apakah tab kurang dari 2
            self.elemenTab.setTabsClosable(False)  //membuat tab tidak bisa di tutupp (menyembunyikan tombol x)
        else:  //jika tab lebih dari satu
            self.elemenTab.setTabsClosable(True)  //membuat tab bisa di tutup (menampilkan tombol x)

        self.elemenTab.setCurrentIndex(self.elemenTab.count() - 1)  //mengubah posisi tab aktif ke tab baru

    def tabHistory(self):  //metode tab history
        a = self.elemenTab.addTab(History(parent=self), "History")  //membuat tab baru yaitu untuk menampilkan history
        self.tambah = True

        self.elemenTab.setCurrentIndex(self.elemenTab.count() - 1)  //mengubah posisi tab aktif ke tab baru

        if self.elemenTab.count() < 2:  //mengecek apakah tab kurang dari 2
            self.elemenTab.setTabsClosable(False)  //membuat tab tidak bisa di tutupp (menyembunyikan tombol x)
        else:  //jika tab lebih dari satu
            self.elemenTab.setTabsClosable(True)  //membuat tab bisa di tutup (menampilkan tombol x)

    def setJudul(self, teks, memori, tooltip):  //metode untuk mengubah judul
        for i in range(self.elemenTab.count()):  //perulangan sebanyak jumlah tab
            if self.elemenTab.widget(i).getPosisiMemory() == memori:  //mengecek tab yang akan di ubah judulnya
                self.elemenTab.setTabText(i, teks)  //mengubah judul tab yang dituju
                self.elemenTab.setTabToolTip(i, tooltip)  //juga mengubah tooltip nya

    def closeEvent(self, event):  //metode yang akan di jalankan secara otomatis jika menutup window aplikasi
        self.destroy()  //menghancurkan aplikasi

class Browser(QtGui.QMainWindow):  //class browser (menurunkan sifat/inheritence class ‘QMainWindow)
    def __init__(self, parent=None, url=''):  /construktor class ‘browser’
        QtGui.QMainWindow.__init__(self)  //menjalankan class parent (QMainWindow)
        self.parent = parent  //menampung nilai variabel parameter ‘parent’
        self.resize(800, 600)  //mengubah ukuran window
        self.centralwidget = QtGui.QWidget(self)  //inisialisasi tempat layout browser

        self.default_url = "https://google.co.id"  //menampung default url
        self.urlTab = url  //menampung default 
        self.penampungHistory = []  //variabel untuk menampung history kunjungan web

        self.layout()  //menjalanka metode ‘layout’
        self.buatToolbar()  //menjalankan metode ‘buatToolbar’
        self.buatKolomCari()  //menjalankan metode ‘buatKolomCari’
        self.windowBrowser()  //menjalankan metode ‘windowBrowser’
        self.browse()  //menjalankan metode ‘browse’

    def layout(self):  //metode ‘layout’
        self.layoutUtama = QtGui.QHBoxLayout(self.centralwidget)  //membuat layout utama
        self.layoutUtama.setContentsMargins(0, 0, 0, 0)  //agar tidak ada margin. Agar lebih bagus

        self.frame = QtGui.QFrame(self.centralwidget)  //membuat frame
        self.layoutBrowser = QtGui.QVBoxLayout(self.frame)  //membuat layout browser
        self.layoutBrowser.setSpacing(0) //agar tidak ada spasi antara komponen

    def setValueProgressbar(self, pos):  //metode
        self.progressBar.setValue(pos)  //mengubah nilai progressbar
        self.tombolReload.setIcon(self.style().standardIcon(QtGui.QStyle.SP_BrowserStop))  //mengubah icon reload menjadi stop
        self.progressBar.setVisible(True)  //membuat progressbar terlihat
        self.tombolMaju.setEnabled(self.webBrowser.history().canGoForward())  //menentukan hidup atau matinya tombol maju
        self.tombolKembali.setEnabled(self.webBrowser.history().canGoBack())  //menentukan hidup atau matinya tombol mundur

    def buatToolbar(self):  //metode buatToolbar
        self.layoutToolbar = QtGui.QHBoxLayout()  //membuat layout toolbar

        self.kolomUrl = QtGui.QLineEdit(self.frame)  //membuat kolom url
        self.kolomUrl.returnPressed.connect(self.browse)  .//menjalankan metode ‘browse’ ketika klik enter di kolom url

        self.tombolKembali = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_ArrowBack), 'kembali', self.frame)  //tombol kembali
        self.tombolKembali.triggered.connect(self.perintahKembali)  //menjalankan metode ‘perintahKembali’ jika klik tombol kembali
        self.tombolKembali.setEnabled(False)  //mematikan tombol kembali
        self.tombolMaju = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_ArrowForward), 'maju', self.frame)  //tombol maju
        self.tombolMaju.triggered.connect(self.perintahMaju)  //menjalankan metode perintahMaju jika klik tombol maju
        self.tombolMaju.setEnabled(False)  //mematikan tombol maju
        self.tombolReload = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_BrowserReload), 'muat ulang',
                                          self.frame)  //tombol reload
        self.tombolReload.triggered.connect(self.perintahReload)  //menjalankan metode ‘perintahReload’ jika klik reload

        bar = QtGui.QToolBar()  //membuat toolbar

        bar.addAction(self.tombolKembali)  //memasukkan tombol kembali ke toolbar
        bar.addAction(self.tombolMaju)  //memasukkan tombol maju ke toolbar
        bar.addAction(self.tombolReload)  //memasukkan tombol reloadi ke toolbar

        self.tombolGo = QtGui.QPushButton(text='Go')  //tombol ‘go’
        self.tombolGo.clicked.connect(self.browse)  //menjalankan metode ‘browse’ ketika di klik

        self.layoutToolbar.addWidget(bar)  //memasukkan toolbar ke layout toolbar
        self.layoutToolbar.addWidget(self.kolomUrl)  //memasukkan kolom url ke layout toolbar
        self.layoutToolbar.addWidget(self.tombolGo)  //memasukkan tombol go ke  layout toolbar

        self.layoutToolbar.setContentsMargins(0, 0, 0, 0)  //mengatur margin toolbar
        self.layoutBrowser.setContentsMargins(0, 0, 0, 0)  //mengatur margin layout browser
        self.layoutBrowser.addLayout(self.layoutToolbar)  //memasukkan layout toolbar ke dalam layout Browser

        self.menuTabBaru = QtGui.QAction(self, text='Tab Baru')  //menu tab baru
        self.menuTabBaru.triggered.connect(self.parent.tambahTab)  //menjalankan metode ‘tambahTab’ di class ‘TabDialog’ jika menu tab baru di klik 
        self.menuTutupTab = QtGui.QAction(self, text='Tutup Tab')  //menu tutup tab
        self.menuTutupTab.triggered.connect(self.parent.perintahTutup)  //menjlankan metode ‘perintahTutup’ di class ‘TabDialog’ jika menu tutup tab di klik
        self.menuHistory = QtGui.QAction(self, text='History')  //membuat menu history
        self.menuHistory.triggered.connect(self.parent.tabHistory)  //menjalankan metode ‘tabHistory’ di class parent (TabDialog) jika klik menu history
        self.menuCetak = QtGui.QAction(self, text='Cetak')  //membuat menu cetak
        self.menuCetak.triggered.connect(self.perintahCetak)  //menjalankan metode ‘perintahCetak’ jika menu cetak di klik
        self.menuCari = QtGui.QAction(self, text='Cari')  //menu cari
        self.menuCari.triggered.connect(self.perintahBukaPencarian)  //menjalankan metode ‘perintahBukaPencarian’ jika klik cari
        self.menuWeb = QtGui.QAction(self, text='Web')  //menu web
        self.menuWeb.triggered.connect(self.perintahWeb)  //menjalankan metode ‘perintahWeb’ jika menu web di klik
        self.menuAbout = QtGui.QAction(self, text='About')  //menu about
        self.menuAbout.triggered.connect(self.tentang)  //menjalankan metode ‘tentang’ jika menu About di klik
        self.menuAboutQt = QtGui.QAction(self, text='About Qt')  //menu about qt
        self.menuAboutQt.triggered.connect(self.tentangQt)  //menjalankan metode ‘tentangQt’ jika menu ‘about Qt’ di klik
        self.menuExit = QtGui.QAction(self, text='Exit')  //menu exit
        self.menuExit.triggered.connect(self.close)  //menjalankan metode ‘close’ jika menu Exit di klik

        self.menu = QtGui.QMenu(self)  //membuat menu bar
        self.menu.addAction(self.menuTabBaru)  //memasukkan menu ‘tab baru’
        self.menu.addAction(self.menuTutupTab)  //memasukkan menu ‘tutup tab’
        self.menu.addSeparator()  //memberikan garis pembatas
        self.menu.addAction(self.menuHistory)  //memasukkan menu history
        self.menu.addAction(self.menuCetak)  //memasukkan menuCetak ke menu bar
        self.menu.addAction(self.menuCari)  //memasukkan menu cari
        self.menu.addSeparator()  //membuat garis
        self.menu.addAction(self.menuAbout)  //memasukkan menu about ke menubar
        self.menu.addAction(self.menuAboutQt)  //memasukkan menu aboutQt ke menubar
        self.menu.addAction(self.menuWeb)  //memasukkan menu web ke menubar
        self.menu.addSeparator()  //membuat garis pembatas
        self.menu.addAction(self.menuExit)  //memasukkan menu exit ke menubar

        self.buttonShow = QtGui.QPushButton(self)  //membuat tombol menu
        self.buttonShow.setText("")  //mengosongkan teks tombol
        self.buttonShow.setMenu(self.menu)  //memasukkan menubar ke tombol
        self.buttonShow.setFlat(True)  //agar tidak ada garis di tombol

        self.layoutToolbar.addWidget(self.buttonShow)  //memasukkan tombol menu ke window

        self.progressBar = QtGui.QProgressBar()  //progressbar
        self.layoutBrowser.addWidget(self.progressBar)  //memasukkan progressbar ke window
        self.progressBar.setVisible(False)  //menyembunyikan progressbar

    def tentang(self):  //metode tentang
  //pesan tentang aplikasi lainnya
        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):  //metode aboutQt
        QtGui.QMessageBox.aboutQt(self)  //menampilkan tentang GUI

    def perintahCetak(self):  //metode perintah cetek
        infoPrinter = QtGui.QPrinterInfo()  //inisialisasi printer
        printer = QtGui.QPrinter(infoPrinter)  //printer
        self.webBrowser.print(printer)  //mencetak halaman

    def windowBrowser(self):  //metode ‘windwoBrowser’
        self.webBrowser = QtWebKit.QWebView()  //membuat webBrowser

        self.layoutBrowser.addWidget(self.webBrowser)  //memasukkan browser ke layout (webBrowser)
        self.layoutUtama.addWidget(self.frame)  //memasukkan frame ke layout utama
        self.setCentralWidget(self.centralwidget)  //memasukkan semua layout ke window

    def buatKolomCari(self):  //metode ‘buatKolomCari’
        layoutKolomCari = QtGui.QHBoxLayout(self)  //layout kolom cari

        self.teks = QtGui.QLabel(self, text='Kata kunci : ')  //teks atau label
        layoutKolomCari.addWidget(self.teks)  //memasukan teks/label ke layout kolom cari

        self.tombolNext = QtGui.QPushButton(self, text='Next')  //tombol next pencarian
        self.tombolPrevious = QtGui.QPushButton(self, text='Previous')  //tombol previous pencarian
        self.tombolTutup = QtGui.QPushButton(self, text='X')  //tombol ‘X’ atau tutup kolom pencarian

        self.tombolTutup.clicked.connect(self.perintahTutupPencarian)  //menjalankan metode ‘perintahTutupPencarian’ jika klik tombol ‘X’/tutup kolom
        self.tombolNext.clicked.connect(self.cariNext)  //menjalankan perintah ‘cariNext’ jika klik tombol ‘next’ pencarian
        self.tombolPrevious.clicked.connect(self.cariPrevious)  //menjalankan perintah ‘cariNext’ jika klik tombol ‘next’ pencarian

        self.tombolPrevious.setFlat(True)  //membuat tombol previous pencarian agar tidak memiliki border
        self.tombolNext.setFlat(True)  //membuat tombol next pencarian tak berborder

        self.tombolPrevious.setFixedSize(60, 20)  //mengatur ukuran tombol previous pencarian
        self.tombolNext.setFixedSize(45, 20)  //mengatur ukuran tombol next pencarian
        self.tombolTutup.setFixedSize(20, 25)  //mengatur ukuran tombol tutup pencarian

        self.kolomCari = QtGui.QLineEdit(self)  //membuat kolom teks pencarian
        self.kolomCari.editingFinished.connect(self.cariNext)  //menjalankan metode ‘cariNext’ jik tekan enter di kolom pencarian
        layoutKolomCari.addWidget(self.kolomCari)  //memaukkan kolom pencarian ke layout klom cari
        self.kolomCari.setFixedSize(200, 20)  //mengatur ukuran kolom pencarian

        layoutKolomCari.addWidget(self.tombolNext)  //memasukkan tombol next ke layout kolom cari
        layoutKolomCari.addWidget(self.tombolPrevious)  //memasukkan tombol previous ke layout kolom cari
        layoutKolomCari.addWidget(self.tombolTutup)  //memasukkan tombol tutup ke layout kolom cari

        layoutKolomCari.setAlignment(self.teks, QtCore.Qt.AlignRight)  //agar semua komonen (pencarian) berada di kanan window

        self.layoutBrowser.addLayout(layoutKolomCari)  //memasukkan layoutKolomCari kedalam layout Browser
        self.setVisiblePencari(False)  //menyembunyikan komponen pencarian (default)

    def perintahTutupPencarian(self):  //metode ‘perintahTutupPencarian’
        self.setVisiblePencari(False)  //menyembunyikan semua komponen pencarian

    def perintahBukaPencarian(self):  //metode ‘perintahBukaPencarian’
        self.setVisiblePencari(True) //menampilkan semua komponen pencarian
        self.kolomCari.setFocus()  //agar kursor ada di kolom cari

    def cariPrevious(self): //metode ‘cariPrevious’
        teks = self.kolomCari.text()  //mendapatkan teks di kolom cari
        gtw = QtWebKit.QWebPage.FindBackward  //mendapatkan pencarian sebelumnya
        self.webBrowser.findText(teks, gtw)  //mencari text

    def cariNext(self):  //metode ‘cariNext’
        teks = self.kolomCari.text()  //mendpatkan teks di kolom cari
        self.webBrowser.findText(teks)  //mencari teks

    def setVisiblePencari(self, argumen):  //metode setVisiblePencarian
        self.tombolPrevious.setVisible(argumen)  //menyembunyikan/menampilkan tombol previous (tergantung argumen. Di tampilkan jika true. Disembunykan jika false)
        self.tombolNext.setVisible(argumen)  //menampilkan/menyembunyikan tombol next.
        self.kolomCari.setVisible(argumen)  //menampilkan/menyembunyikan kolom cari.
        self.teks.setVisible(argumen)  //menampilkan/menyembunyikan teks label.
        self.tombolTutup.setVisible(argumen)  //menampilkan/menyembunyikan tombol tutup.

    def perintahWeb(self):  //metode ‘perintahWeb’
        self.webBrowser.load(QtCore.QUrl('http://mn-belajarpython.blogspot.co.id'))  //pergi ke blog ini.. Hehe :)

    def browse(self):  //metode ‘browse’
        url = 'https://google.co.id'  //url default (google)
        if self.urlTab:  //mengecek apakah variabel ‘urlTab’
            url = self.urlTab  //mendapatkan url tab jika tidak kosong
            self.urlTab = ''  //mengosongkan ‘urlTab’
        elif self.kolomUrl.text():  //mengecek apakah kolom url tidak kosong

  //kode di bawah merupakan logika untuk menentukan url yang di masukkan adalah sebuah url atau bukan. Jika bukan, maka di alifkan ke pencarian google
            try:
                url = self.kolomUrl.text()
                url = url.lower()
                penampungUrl = []

                for i in url:
                    penampungUrl.append(i)

                if penampungUrl[0] != 'h' and penampungUrl[1] != 't' and penampungUrl[2] != 't' and penampungUrl[
                    3] != 'p' and penampungUrl[3] != 's' and penampungUrl[3] != '/' and penampungUrl[3] != '/':
                    if penampungUrl[0] == 'w' and penampungUrl[1] == 'w' and penampungUrl[2] == 'w' and penampungUrl[
                        3] == '.':
                        url = 'https://' + url
                    else:
                        urlPengganti = ''
                        for i in url:
                            if i != ' ':
                                urlPengganti += i
                            else:
                                urlPengganti += '+'
                            url = "https://www.google.co.id/search?espv=2&q=" + urlPengganti
            except:
                urlPengganti = ''
                for i in url:
                    if i != ' ':
                        urlPengganti += i
                    else:
                        urlPengganti += '+'
                    url = "https://www.google.co.id/search?espv=2&q=" + urlPengganti


        self.webBrowser.load(QtCore.QUrl(url))  //memuat url

        self.tombolMaju.setEnabled(self.webBrowser.history().canGoForward())  //menentukan hidup atau matinya tombol maju
        self.tombolKembali.setEnabled(self.webBrowser.history().canGoBack())  //menentukan hidup atau matinya tombol kembali

        self.webBrowser.urlChanged.connect(self.setKolomUrl)  //menjalankan metode ‘setKolomUrl’ jika ada perubahan url
        self.webBrowser.loadProgress.connect(self.setValueProgressbar)  //menjalankan metode ‘setValueProgressbar’ saat proses memuat halaman
        self.webBrowser.loadFinished.connect(self.selesaiMemuat)  //menjalankan metode ‘selesaiMemuat’ jika loading halaman selesai
        self.webBrowser.titleChanged.connect(self.kirimJudul)  //menjalankan metode ‘kirimJudul’ jika judul halaman berubah

        self.webBrowser.show()  //menampilkan window browser

    def selesaiMemuat(self):  //metode ‘selesaiMemuat’
        self.tombolReload.setIcon(self.style().standardIcon(QtGui.QStyle.SP_BrowserReload))  //mengubah icon reload
        self.progressBar.setVisible(False)  //menyembunyikan progressbar

    def perintahKembali(self):  //metode ‘perintahKembali’
        self.webBrowser.back()  //kembali ke halaman sebelumnya

    def perintahMaju(self):  //metode perintahMaju
        self.webBrowser.forward()  //maju ke halaman yang telah di kunjungi

    def perintahReload(self):  //metode ‘perintahReload’
        self.webBrowser.reload()  //memuat halaman yang sedang di buka

    def setKolomUrl(self):  //metode ‘setKolomUrl’
        self.kolomUrl.setText(self.webBrowser.url().toString())  //mengubah kolom isi kolom url jika url berubah

        jam = time.strftime("%H:%M", time.localtime())  //mendapatkan jam ketika di mengunjungi sebuah web
        url = self.webBrowser.url().toString()  //mendapatkan url yang di kunjungi

        self.penampungHistory.append([jam, url])  //memasukkan url dan jam ke penampung history

    def getPosisiMemory(self):  //metode ‘getMemory’
        return (str(self))  //mendpatkan posisi memory class ini

    def kirimJudul(self):  //metode ‘kirimJudul’
        judul = self.webBrowser.title()  //mendpatkan judul halaman
        tab = self.parent  //mendapatkan class TabDialog yang menjadi parent class ini
        memori = self.getPosisiMemory()  //mendpatkan posisi memory class ini
        toolTip = judul  //menampung judul sebagai tooltip

        self.penampungHistory[len(self.penampungHistory) - 1].insert(1, judul)  //menyisipkan history

        judulBaru = ''  //inisialisasi variabel

        if len(judul) > 10:  //mengecek apakah jumlah karakter judul lebih dari 10 karakter
            for i in range(len(judul)):  //melakukan perulangan sebanyak karakter judul
                judulBaru += judul[i]  //menampung 9 karakter judul pertama
                if i > 9:  //memastikan perulangan lebih dari 9 kali
                    judul = judulBaru + '...'  //menambah 9 karakter pertama judul dengan titik titik
                    Break  //menghentikan perulangan

        tab.setJudul(judul, memori, toolTip)  //memasukkan judul dan tooltip. Dan lokasi memory agar yang di ubah judulnya tepat

    def closeEvent(self, event):  //metode yang akan otomatis dijalankan ketika window di tutup
        self.destroy()  //menghancurkan semua class

class History(QtGui.QMainWindow):  //class history
    def __init__(self, parent=None):  //construktor class ‘History’
        QtGui.QMainWindow.__init__(self)  //menjalankan class parent (QMainWindow)
        self.parent = parent  //menampung parent
        self.centralWidget = QtGui.QWidget(self)  //membuat central widget
        self.layout = QtGui.QHBoxLayout(self.centralWidget)  //membuat layout utama
        self.buatWindow()  //menjalankan metode ‘buatWindow’
        self.setCentralWidget(self.centralWidget)  //memasukkan widget/layout utama ke dalam window

    def klikTabel(self, baris, kolom):  //metode klik tabel
        self.tablewidget.selectRow(baris)  //memilih seluruh baris ketika satu cel di klik
        data = self.tablewidget.item(baris, 2).text() //mendpatkan teks di dalam tabel
        self.parent.tabBukaLinkDariHistory(data)  //menjalankan metode ‘tabBukaLinkDariHistory’

    def klik(self, baris, kolom):  //metode ‘klik’
        self.tablewidget.selectRow(baris)  //memilih semua baris ketika klik satu cell saja

    def updateTabel(self):  //metode updateTabel
        for i in range(self.tablewidget.rowCount()):  //melakukan perulangan sebanyak jumlah baris di tabel history
            self.tablewidget.removeRow(0)  //menghapus satu satu baris di tabel history
        for i in range(len(self.data)):  //melakukan perulangan sebanyak hitory

            try:  //mencoba beberapa code program
                jam = self.data[i][0]  //mendapatkan jam history
                nama = self.data[i][1]  //mendpaatkan nama history
                url = self.data[i][3]  //mendpatkan url history
            except:  //jika terjadi error pada try di atas
                try:  //mencoba code
                    jam = self.data[i][0]  //mendapatkan jam history
                    nama = self.data[i][1]  //mendapatkan nama history
                    url = self.data[i][2]  //mendapatkan url history
                except:  //jika terjadi error pada try di atas
                    pass  //tidak melakukan apa apa

            self.tablewidget.insertRow(i)  //membuat baris baru
            jam = QtGui.QTableWidgetItem(jam)  //membuat jam menjadi item tabel
            nama = QtGui.QTableWidgetItem(nama)  //membuat nama menjadi item tabel
            url = QtGui.QTableWidgetItem(str(url))  //membuat url menjadi item tabel

            jam.setFlags(jam.flags() ^ QtCore.Qt.ItemIsEditable)  //membuat item jam tidek bisa di edit
            nama.setFlags(nama.flags() ^ QtCore.Qt.ItemIsEditable)  //membuat nama item tabel tidak bisa di edit
            url.setFlags(url.flags() ^ QtCore.Qt.ItemIsEditable)  //membuat item tabel url tidak bisa di edit

            self.tablewidget.setItem(i, 0, jam)  //memasukan jam ke tabel
            self.tablewidget.setItem(i, 1, nama)  //memasukkan nama ke tabel
            self.tablewidget.setItem(i, 2, url)  //memasukkan url ke tabel

    def buatWindow(self):  //metode buat window
        title = ['Waktu', 'Nama', 'Alamat']  //membuat judul tabel
        self.data = []  //membuat varuabel data

        for i in range(len(self.parent.penampungTab)):  //menghitung jumlah tab yang ada
            self.data += self.parent.penampungTab[i].penampungHistory  //mendapatkan semua history

        # besarnya kolom
        colcnt = len(title)  //menghitung jumlah kolom judul
        rowcnt = len(self.data)  //menghitung jumlah hitory

        self.tablewidget = QtGui.QTableWidget(rowcnt, colcnt, self)  //membuat tabel dengan jumlah kolom dan baris sesuai judul dan banyak data

        self.connect(self.tablewidget, QtCore.SIGNAL('cellDoubleClicked(int, int)'), self.klikTabel)  //menjalankan metode ‘klikabel’ ketika klik dua kali pada tabel
        self.connect(self.tablewidget, QtCore.SIGNAL('cellPressed(int, int)'), self.klik)  //menjalankan metode ‘klik’ ketika klik satu kali pada cell tabel

        # judul vertikal
        vheader = QtGui.QHeaderView(QtCore.Qt.Orientation.Vertical)  //membuat judul samping
        vheader.setResizeMode(QtGui.QHeaderView.ResizeToContents)  //membuat judul dinamis sesuai ukuran konten
        self.tablewidget.setVerticalHeader(vheader)  //memasukkan judul samping ke tabel

        # judul horizontal
        hheader = QtGui.QHeaderView(QtCore.Qt.Orientation.Horizontal)  //membuat judul atas
        hheader.setResizeMode(QtGui.QHeaderView.ResizeToContents)  //membuat judul dinamis sesuai kontern
        self.tablewidget.setHorizontalHeader(hheader)  //memasukkan judul atas
        self.tablewidget.setHorizontalHeaderLabels(title)  //memasukkan nama - nama judul

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

        self.layout.addWidget(self.tablewidget)  //memasukkan tabel ke window

    def getPosisiMemory(self):  //metode ‘getPosisiMemory’
        return (str(self))  //mengembalikan alamat memory class ini

    def closeEvent(self, event):  //metode yang akan di jalankan secara otomatis ketika window di close
        self.destroy()  //menghancurkan class

if __name__ == '__main__':  //agar di jalankan pertama kali
    app = QtGui.QApplication(sys.argv)  //membuat aplkasi
    main = TabDialog()  //menjalankan class ‘TabDialog’
    main.show()  //menampilkan aplkasi

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


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