(Python dan PyQt4) Dokumen editor versi 13

BelajarPython - Assalamualaikum wr. wb.

Haii.. Jumpa lagi dengan saya disini.. Pada kesempatan kali ini saya akan mencoba untuk melanjutkan atau mengupgrade versi dari aplikasi sebelumnya.. Walaupun perubahan nya tidak terlalu mentereng, tapi saya rasa akan membuat kualitas pembelajaran kalian akan lebih baik.. nah penasaran kan... Yuk langsung saja kita simak potingan kali ini temen - temen....


Pengenalan aplikasi yang akan kita buat.

Oke saya jelaskan lebih rinci lagi.. Jadi, seperti yang sudah saya katakan di atas, aplikasi yang akan saya buat kali ini merupakan penerus dari aplikasi dokumen editor versi ke duabelas.. Walaupun dengan perubahah yang tak terlalu mentereng..

Pada versi ke tigabelas kali ini, saya akan mencoba untuk menambahkan sebuah fitur untuk memasukkan format tanggal.. Dengan beberapa pilihan format yang telah di sediakan secara default oleh saya... Nah memang tidak terlalu berguna.. Tapi saya tidak menekankan ke sisi keguanaan.. Melainkan ke sisi pembelajarannya.. hehe

Ya memang kurang mentereng tambahan fitur pada versi kali ini,, tapi, saya rasa akan baik jika aplikasi ini saya kembangkan secara perlahan.. Jika kalian kurang suka dengan perubahan versi 13 ini, kalian bisa langsung saja lanjut ke versi 14 ya temen - temen... :)

Nah, untuk kalian yang ingin melihat perkembangan tiap versinya, kalian bisa KLIK DISINI. Dimana saya telah membuat rangkumannya beserta penjelasan fitur - fitur tiap versinya..

Spesifikasi dan fitur dokumen editor versi 13.0 di python.

Oya perlu kalian ketahui lagi.. Modul untuk membuat tampilan dokumen editor ini saya menggunakan pyQt4... Untuk proses install nya, kalian BISA KLIK DISINI. Dan untuk lebih jelasnya mengenai aplikasi kali ini, simak penjabaran spesifikasi berikut ini ya temen - temen....

Nama: mn-dokumen 13.0
Versi: 13.0
Platform: Python 3.x
Modul: PyQt4. Klik disini untuk instalasi PyQt4.
Baris Code: kurang lebih 660 baris code program.
Fitur: menyisipkan format waktu.
syarat menjalankan: install python 3.x dan PyQt4, punya editor teks atau IDE.
Cara menjalankan: install python 3 dan PyQt4, 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 loh.. 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 untuk membuat aplikasi dokumen editor versi 13.0 PyQt4 python.

Nah biar tidak penasaran, yuk langsung saja simak sama - sama code program untuk membuat aplikasi dokumen editor ini... Silahkan di simak di bawah ini ya temen - temen.. Let’s check it out...

import sys, time
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import Qt

var = 0
f = ""
choiceStr = ""
cs = False
wwo = False

class Find(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.initUI()

    def initUI(self):

        self.lb1 = QtGui.QLabel("Search for: ", self)
        self.lb1.setStyleSheet("font-size: 15px; ")
        self.lb1.move(10, 10)

        self.te = QtGui.QTextEdit(self)
        self.te.move(10, 40)
        self.te.resize(250, 25)

        self.src = QtGui.QPushButton("Find", self)
        self.src.move(270, 40)

        self.lb2 = QtGui.QLabel("Replace all by: ", self)
        self.lb2.setStyleSheet("font-size: 15px; ")
        self.lb2.move(10, 80)

        self.rp = QtGui.QTextEdit(self)
        self.rp.move(10, 110)
        self.rp.resize(250, 25)

        self.rpb = QtGui.QPushButton("Replace", self)
        self.rpb.move(270, 110)

        self.opt1 = QtGui.QCheckBox("Case sensitive", self)
        self.opt1.move(10, 160)
        self.opt1.stateChanged.connect(self.CS)

        self.opt2 = QtGui.QCheckBox("Whole words only", self)
        self.opt2.move(10, 190)
        self.opt2.stateChanged.connect(self.WWO)

        self.close = QtGui.QPushButton("Close", self)
        self.close.move(270, 220)
        self.close.clicked.connect(self.Close)

    def CS(self, state):
        global cs

        if state == QtCore.Qt.Checked:
            cs = True
        else:
            cs = False

    def WWO(self, state):
        global wwo

        if state == QtCore.Qt.Checked:
            wwo = True
        else:
            wwo = False

    def Close(self):
        self.hide()


class Margin(QtGui.QDialog):
    def __init__(self, parent):
        QtGui.QDialog.__init__(self, parent)
        self.parent = parent

        self.layout = QtGui.QFormLayout(self)
        self.layoutTombol = QtGui.QHBoxLayout(self)
        self.layoutKolom = QtGui.QHBoxLayout(self)
        self.tampilan()
        self.show()

    def tampilan(self):
        teks = QtGui.QLabel('Margin :')
        self.kolom = QtGui.QLineEdit('3')
        satuan = QtGui.QLabel('cm')

        ok = QtGui.QPushButton('Ok')
        ok.clicked.connect(self.perintahOk)
        cancel = QtGui.QPushButton('Cancel')
        cancel.clicked.connect(self.perintahCancel)

        self.layoutKolom.addWidget(teks)
        self.layoutKolom.addWidget(self.kolom)
        self.layoutKolom.addWidget(satuan)
        self.layout.addRow(self.layoutKolom)
        self.layout.addRow(ok, cancel)

    def perintahOk(self):
        try:
            nilai = int(self.kolom.text()) * 37.795275591
            self.parent.marginDokumen(nilai)
            self.perintahCancel()
        except:
            self.kolom.setText('Tidak Valid')

    def perintahCancel(self):
        self.close()


class Date(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)

        self.initUI()

    def initUI(self):
        self.form = QtGui.QComboBox(self)
        self.form.move(10, 10)
        self.form.addItem(time.strftime("%d.%m.%Y"))
        self.form.addItem(time.strftime("%A, %d. %B %Y"))
        self.form.addItem(time.strftime("%d. %B %Y"))
        self.form.addItem(time.strftime("%d %m %Y"))
        self.form.addItem(time.strftime("%X"))
        self.form.addItem(time.strftime("%x"))
        self.form.addItem(time.strftime("%H:%M"))
        self.form.addItem(time.strftime("%A, %d. %B %Y %H:%M"))
        self.form.addItem(time.strftime("%d.%m.%Y %H:%M"))
        self.form.addItem(time.strftime("%d. %B %Y %H:%M"))

        global choiceStr
        choiceStr = self.form.currentText()

        self.form.activated[str].connect(self.handleChoice)

        self.ok = QtGui.QPushButton("Insert", self)
        self.ok.move(180, 10)

        self.cancel = QtGui.QPushButton("Cancel", self)
        self.cancel.move(180, 40)
        self.cancel.clicked.connect(self.Cancel)

    def handleChoice(self, choice):
        global choiceStr

        choiceStr = choice

    def Cancel(self):
        self.close()

class Main(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self, None)
        self.marginSaatIni = 113.385826772
        self.initUI()
        QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('sgi'))

    def initUI(self):
        # ---------Window settings --------------------------------
        self.buatLembarKerja()
        self.buatToolbar1()
        self.buatToolbar2()
        self.buatToolbar3()
        self.buatStatusBar()
        self.setScroll()
        # ------- Toolbar --------------------------------------

        # -- Upper Toolbar --

    def buatToolbar1(self):
        self.perintahBaru = QtGui.QAction("New", self)
        self.perintahBaru.setShortcut("Ctrl+N")
        self.perintahBaru.setStatusTip("Buat Dokumen Baru.")
        self.perintahBaru.triggered.connect(self.New)

        self.perintahBuka = QtGui.QAction("Open", self)
        self.perintahBuka.setStatusTip("Buka dokumen yang telah disimpan")
        self.perintahBuka.setShortcut("Ctrl+O")
        self.perintahBuka.triggered.connect(self.Open)

        self.perintahSimpan = QtGui.QAction("Save", self)
        self.perintahSimpan.setStatusTip("Simpan dokumen yang telah dibuat")
        self.perintahSimpan.setShortcut("Ctrl+S")
        self.perintahSimpan.triggered.connect(self.Save)

        self.perintahPreview = QtGui.QAction("view", self)
        self.perintahPreview.setStatusTip("Lihat halaman sebelum di print")
        self.perintahPreview.setShortcut("Ctrl+Shift+P")
        self.perintahPreview.triggered.connect(self.PageView)

        self.perintahCari = QtGui.QAction("Find", self)
        self.perintahCari.setStatusTip("Cari kata di dokumen")
        self.perintahCari.setShortcut("Ctrl+F")
        self.perintahCari.triggered.connect(self.Find)

        self.perintahCut = QtGui.QAction("Cut", self)
        self.perintahCut.setStatusTip("Copy ke klipboard dan hapus teks yang di block")
        self.perintahCut.setShortcut("Ctrl+X")
        self.perintahCut.triggered.connect(self.Cut)

        self.perintahCopy = QtGui.QAction("Copy", self)
        self.perintahCopy.setStatusTip("Copy ke klipboard teks yang di block")
        self.perintahCopy.setShortcut("Ctrl+C")
        self.perintahCopy.triggered.connect(self.Copy)

        self.perintahPaste = QtGui.QAction("Paste", self)
        self.perintahPaste.setStatusTip("Paste teks dari clipboard")
        self.perintahPaste.setShortcut("Ctrl+V")
        self.perintahPaste.triggered.connect(self.Paste)

        self.perintahUndo = QtGui.QAction("Undo", self)
        self.perintahUndo.setStatusTip("Batalkan perintah terakhir")
        self.perintahUndo.setShortcut("Ctrl+Z")
        self.perintahUndo.triggered.connect(self.Undo)

        self.perintahRedo = QtGui.QAction("Redo", self)
        self.perintahRedo.setStatusTip("Batalkan perintah Undo terakhir")
        self.perintahRedo.setShortcut("Ctrl+Y")
        self.perintahRedo.triggered.connect(self.Redo)

        self.perintahTanggal = QtGui.QAction("time", self)
        self.perintahTanggal.setStatusTip("Sisipkan format tanggal dan waktu hari ini")
        self.perintahTanggal.setShortcut("Ctrl+D")
        self.perintahTanggal.triggered.connect(self.DateTime)

        self.perintahMargin = QtGui.QAction("Margin", self)
        self.perintahMargin.setStatusTip("Sesuiakan Margin Dokumen")
        self.perintahMargin.setShortcut("Ctrl+M")
        self.perintahMargin.triggered.connect(self.setMargin)

        self.perintahPrint = QtGui.QAction("Print", self)
        self.perintahPrint.setStatusTip("Cetak dokumen anda")
        self.perintahPrint.setShortcut("Ctrl+P")
        self.perintahPrint.triggered.connect(self.Print)

        self.perintahPdf = QtGui.QAction("PDF", self)
        self.perintahPdf.setStatusTip("Simpan sebagai PDF")
        self.perintahPdf.triggered.connect(self.PDF)

        self.perintahKeluar = QtGui.QAction("Exit", self)
        self.perintahKeluar.setStatusTip("Ingin Keluar ?")
        self.perintahKeluar.triggered.connect(self.exit)

        self.toolbar = self.addToolBar("Options")
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.perintahBaru)
        self.toolbar.addAction(self.perintahBuka)
        self.toolbar.addAction(self.perintahSimpan)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.perintahPrint)
        self.toolbar.addAction(self.perintahPdf)
        self.toolbar.addAction(self.perintahPreview)
        self.toolbar.addAction(self.perintahMargin)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.perintahCari)
        self.toolbar.addAction(self.perintahCut)
        self.toolbar.addAction(self.perintahCopy)
        self.toolbar.addAction(self.perintahPaste)
        self.toolbar.addAction(self.perintahUndo)
        self.toolbar.addAction(self.perintahRedo)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.perintahTanggal)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.perintahKeluar)
        self.addToolBarBreak()
        self.toolbar.setMovable(False)

        self.addToolBar(QtCore.Qt.LeftToolBarArea, self.toolbar)

        # -- Lower Toolbar --

    def buatToolbar2(self):
        self.jenisFont = QtGui.QFontComboBox(self)
        self.jenisFont.currentFontChanged.connect(self.FontFamily)

        ukuranFont = QtGui.QComboBox(self)
        ukuranFont.setEditable(True)
        ukuranFont.setMinimumContentsLength(3)
        ukuranFont.activated.connect(self.FontSize)
        flist = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 32, 36, 40, 44, 48,
                 54, 60, 66, 72, 80, 88, 96]
        for i in flist:
            ukuranFont.addItem(str(i))

        # warnaFont = QtGui.QAction("font color", self)
        self.warnaFont = QtGui.QPushButton('Text')
        self.warnaFont.setStyleSheet('QPushButton {color: black;font-weight:bold; text-decoration: underline; }')
        self.warnaFont.setFlat(True)
        self.warnaFont.setFixedSize(40, 20)
        self.warnaFont.clicked.connect(self.ubahWarna)

        self.warnaBackground = QtGui.QPushButton("Background")
        self.warnaBackground.setStyleSheet('QPushButton {color: white;font-weight:bold; text-decoration: underline; }')
        self.warnaBackground.setFixedSize(80, 20)
        self.warnaBackground.setFlat(True)
        self.warnaBackground.clicked.connect(self.ubahWarnaBackground)

        perintahTebal = QtGui.QAction("Bold", self, checkable=True)
        perintahTebal.setStatusTip("Tebalkan Teks")
        perintahTebal.setShortcut("Ctrl+B")
        perintahTebal.triggered.connect(self.Bold)

        perintahMiring = QtGui.QAction("Italic", self, checkable=True)
        perintahMiring.setStatusTip("Miringkan Teks")
        perintahMiring.setShortcut("Ctrl+I")
        perintahMiring.triggered.connect(self.Italic)

        perintahGarisBawah = QtGui.QAction("Underline", self, checkable=True)
        perintahGarisBawah.setStatusTip("Beri Garis bawah Teks")
        perintahGarisBawah.setShortcut("Ctrl+U")
        perintahGarisBawah.triggered.connect(self.Underl)

        space1 = QtGui.QLabel("  ", self)
        space2 = QtGui.QLabel(" ", self)

        self.formatbar = self.addToolBar("Format")
        self.formatbar.addWidget(self.jenisFont)
        self.formatbar.addWidget(space1)
        self.formatbar.addWidget(ukuranFont)
        self.formatbar.addWidget(space2)

        self.formatbar.addSeparator()

        self.formatbar.addWidget(self.warnaFont)
        self.formatbar.addWidget(self.warnaBackground)

        self.formatbar.addSeparator()

        self.formatbar.addAction(perintahTebal)
        self.formatbar.addAction(perintahMiring)
        self.formatbar.addAction(perintahGarisBawah)
        self.formatbar.addSeparator()

        self.toolbar.setMovable(False)
        self.formatbar.setMovable(False)

    def buatToolbar3(self):

        self.left = QtGui.QAction("left", self)
        self.left.triggered.connect(self.alignLeft)

        self.center = QtGui.QAction("center", self)
        self.center.triggered.connect(self.alignCenter)

        self.right = QtGui.QAction("right", self)
        self.right.triggered.connect(self.alignRight)

        self.justify = QtGui.QAction("justify", self)
        self.justify.triggered.connect(self.alignJustify)

        self.bullet = QtGui.QAction("Bullet", self)
        self.bullet.triggered.connect(self.BulletList)

        self.numbering = QtGui.QAction("Numbered", self)
        self.numbering.triggered.connect(self.NumberedList)

        self.paragrafBar = self.addToolBar("paragraf")
        self.paragrafBar.addAction(self.bullet)
        self.paragrafBar.addAction(self.numbering)

        self.paragrafBar.addSeparator()
        self.paragrafBar.addAction(self.left)
        self.paragrafBar.addAction(self.center)
        self.paragrafBar.addAction(self.right)
        self.paragrafBar.addAction(self.justify)

        self.paragrafBar.setMovable(False)

    def buatLembarKerja(self):
        # ------- Text Edit -----------------------------------
        widget = QtGui.QWidget(self)
        self.mainLayout = QtGui.QHBoxLayout(widget)

        self.text = QtGui.QTextEdit(self)
        self.text.setMaximumWidth(793.700787402)
        self.text.setMinimumWidth(793.700787402)
        self.text.setMinimumHeight(1122.519685039)
        self.mainLayout.addWidget(self.text)
        self.text.setFocus()
        self.setCentralWidget(widget)
        self.setCentralWidget(widget)

        # --------dokumen---------
        self.dokumen = QtGui.QTextDocument(self)
        self.text.setDocument(self.dokumen)
        self.text.document().setDocumentMargin(113.385826772)
        self.text.undoAvailable.connect(self.undoTersedia)
        self.text.redoAvailable.connect(self.redoTersedia)

    def undoTersedia(self, b):
        self.perintahUndo.setEnabled(b)

    def redoTersedia(self, b):
        self.perintahRedo.setEnabled(b)

    def buatStatusBar(self):
        # ------- Statusbar ------------------------------------
        self.status = self.statusBar()
        self.text.cursorPositionChanged.connect(self.CursorPosition)

    def setScroll(self):
        # mengatur scroll
        self.scrollArea = QtGui.QScrollArea()
        self.scrollArea.setWidget(self.text)
        self.scrollArea.setBackgroundRole(QtGui.QPalette.Mid)
        self.scrollArea.setAlignment(Qt.AlignCenter)

        self.mainLayout.addWidget(self.scrollArea)

            # -------- Toolbar slots -----------------------------------

    def New(self):
        self.text.clear()

    def Open(self):
        filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File')
        if filename:
            file = QtCore.QFileInfo(filename)
            nama = file.fileName()

            jumlah = len(nama)
            penentu = False
            if len(nama) > 3:
                if nama[jumlah - 1] != 'n':
                    if nama[jumlah - 2] != 'm':
                        if nama[jumlah - 3] != '.':
                            penentu = True
            if penentu or jumlah <= 3:
                QtGui.QMessageBox.critical(self, "Kesalahan",
                                           self.tr("Maaf!! aplkasi Mn-Editor ini hanya bisa membuka"
                                                   "\nfile dengan file ber-ekstensi (.mn)"
                                                   " mohon pilih file yang tepat."))
            else:
                try:
                    f = open(filename, 'r')
                    filedata = f.read()
                    self.text.setHtml(filedata)
                    f.close()
                except:
                    QtGui.QMessageBox.critical(self, "Kesalahan",
                                               self.tr("Maaf!! aplkasi Mn-Editor tidak bisa membuka file\n"
                                                       "yang telah anda pilih. yaitu '%s'\n"
                                                       "kemungkinan file telah rusak." % nama))

    def Save(self):
        filename = QtGui.QFileDialog.getSaveFileName(self, caption='Save File', filter='*;;*.mn')
        if filename:
            file = QtCore.QFile(filename)
            f = open(filename, 'w')
            filedata = self.text.toHtml()
            f.write(filedata)
            namaAwal = file.fileName()

            jumlah = len(namaAwal)
            penentu = True
            if len(namaAwal) > 3:
                if namaAwal[jumlah - 1] == 'n':
                    if namaAwal[jumlah - 2] == 'm':
                        if namaAwal[jumlah - 3] == '.':
                            penentu = False
            if penentu:
                file.rename(namaAwal, namaAwal + '.mn')
            f.close()

    def PageView(self):
        preview = QtGui.QPrintPreviewDialog()
        self.text.document().setDocumentMargin(0)
        preview.printer().setPageMargins(self.marginSaatIni, self.marginSaatIni, self.marginSaatIni, self.marginSaatIni,
                                         QtGui.QPrinter.DevicePixel)
        preview.paintRequested.connect(self.PaintPageView)
        preview.exec_()
        self.text.document().setDocumentMargin(self.marginSaatIni)

    def Print(self):
        dialog = QtGui.QPrintDialog()
        if dialog.exec_() == QtGui.QDialog.Accepted:
            self.text.document().print_(dialog.printer())

    def setMargin(self):
        Margin(self)

    def marginDokumen(self, ukuran):
        self.marginSaatIni = ukuran
        self.text.document().setDocumentMargin(ukuran)

    def PDF(self):
        printer = QtGui.QPrinter()
        printer.setOutputFormat(printer.NativeFormat)

        dialog = QtGui.QPrintDialog(printer)
        dialog.setOption(dialog.PrintToFile)
        if dialog.exec_() == QtGui.QDialog.Accepted:
            self.text.document().print_(dialog.printer())

    def PaintPageView(self, printer):
        self.text.print_(printer)

    def Find(self):
        global f

        find = Find(self)
        find.show()

        def handleFind():
            f = find.te.toPlainText()
            if cs == True and wwo == False:
                flag = QtGui.QTextDocument.FindBackward and QtGui.QTextDocument.FindCaseSensitively

            elif cs == False and wwo == False:
                flag = QtGui.QTextDocument.FindBackward

            elif cs == False and wwo == True:
                flag = QtGui.QTextDocument.FindBackward and QtGui.QTextDocument.FindWholeWords

            elif cs == True and wwo == True:
                flag = QtGui.QTextDocument.FindBackward and QtGui.QTextDocument.FindCaseSensitively and QtGui.QTextDocument.FindWholeWords

            self.text.find(f, flag)

        def handleReplace():
            f = find.te.toPlainText()
            r = find.rp.toPlainText()

            text = self.text.toPlainText()

            newText = text.replace(f, r)

            self.text.clear()
            self.text.append(newText)

        find.src.clicked.connect(handleFind)
        find.rpb.clicked.connect(handleReplace)

    def Undo(self):
        self.text.undo()

    def Redo(self):
        self.text.redo()

    def Cut(self):
        self.text.cut()

    def Copy(self):
        self.text.copy()

    def Paste(self):
        self.text.paste()

    def DateTime(self):
        date = Date(self)
        date.show()

        date.ok.clicked.connect(self.insertDate)

    def insertDate(self):
        global choiceStr
        print(choiceStr)
        self.text.append(choiceStr)

    def CursorPosition(self):
        line = self.text.textCursor().blockNumber()
        col = self.text.textCursor().columnNumber()
        linecol = ("Line: " + str(line) + " | " + "Column: " + str(col))
        self.status.showMessage(linecol)

    def FontFamily(self, font):
        font = QtGui.QFont(self.jenisFont.currentFont())
        self.text.setCurrentFont(font)
        self.text.setFocus()

    def FontSize(self, fsize):
        size = (int(fsize))
        self.text.setFontPointSize(size)
        self.text.setFocus()

    def ubahWarna(self):
        c = QtGui.QColorDialog.getColor()
        self.warnaFont.setStyleSheet(
            'QPushButton {color: %s; font-weight:bold; text-decoration: underline; }' % c.name())
        self.text.setTextColor(c)
        self.text.setFocus()

    def ubahWarnaBackground(self):
        c = QtGui.QColorDialog.getColor()
        self.warnaBackground.setStyleSheet(
            'QPushButton {color: %s; font-weight:bold; text-decoration: underline; }' % c.name())
        self.text.setTextBackgroundColor(c)
        self.text.setFocus()

    def Bold(self):
        w = self.text.fontWeight()
        if w == 50:
            self.text.setFontWeight(QtGui.QFont.Bold)
        elif w == 75:
            self.text.setFontWeight(QtGui.QFont.Normal)

    def Italic(self):
        i = self.text.fontItalic()

        if i == False:
            self.text.setFontItalic(True)
        elif i == True:
            self.text.setFontItalic(False)

    def Underl(self):
        ul = self.text.fontUnderline()

        if ul == False:
            self.text.setFontUnderline(True)
        elif ul == True:
            self.text.setFontUnderline(False)

    def lThrough(self):
        lt = QtGui.QFont.style()

    def alignLeft(self):
        self.text.setAlignment(Qt.AlignLeft)

    def alignRight(self):
        self.text.setAlignment(Qt.AlignRight)

    def alignCenter(self):
        self.text.setAlignment(Qt.AlignCenter)

    def alignJustify(self):
        self.text.setAlignment(Qt.AlignJustify)

    def BulletList(self):
        self.text.insertHtml("<ul><li> ...</li></ul>")

    def NumberedList(self):
        self.text.insertHtml("<ol><li> ...</li></ol>")

    def exit(self):
        self.close()

    def closeEvent(self, event):
        self.destroy()

def main():
    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()

    main.setGeometry(0, 0, 1000, 600)
    main.setWindowTitle('Dokumen Editor -> mn-belajarpython.blogspot.co.id')

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

    main.text.setFocus()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()


Nah itu dia temen - temen code program nya.. nah lalu sepertii apa ya tampilan yang akan di hasilkan dari code program di atas? Nah, biar gak penasaran, langsung saja kita simak gambar yang ada di bawah ini...



Nah itu dia temen - temen hasil dari code program di atas.. Bisa kita lihat ya.. Pada toolbar di kiri window, sudah ada 1 toolbar baru.. Yaitu time. Dimana jika kita klik, maka akan tampil sebuah mini window baru untuk menyisipkan sebuah format tanggal dan waktu. Saya yakin kalian akan langsung paham ketika kalian melihat gambar di atas.

Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu loh.. 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...

Penjelasan Code program untuk membuat aplikasi dokumen  editor versi 13.0.

nah pada bagian ini saya akan mencoba untuk menjelaskan code program yang telah saya bagikan diatas tadi yaa.. Hal ini saya lakukan agar kalian bisa memahami code program untuk membuat aplikasi dokumen editor ini... Yuk tanpa lama - lama lagi langsung saja kita simak sama - sama penjelasan saya di bawah ini...

[NOTE : Teks yang berwarna merah pada penjelasan merupakan "Code program" yang di tambahkan pada versi kali ini. Dan tidak ada di versi sebelumnya]

import sys  //digunakan untuk mengimpor modul ‘sys’
from PyQt4 import QtGui, QtCore  //digunakan untuk mengimport ‘QtGui’ dan ‘QtCore’
from PyQt4.QtCore import Qt  //digunakan untuk import ‘Qt’ dari QtCore.


var = 0  //digunakan untuk membuat global variabel dengan nama ‘var’ dengan nilai ‘0’.
f = ""  //digunakan untuk membuat global variabel dengan nama ‘f’ dengan nilai kosong.
choiceStr = ""  //digunakan untuk membuat global variabel dengan nama ‘choiceStr’ dengan nilai kosong. Yang akan digunakan untuk mengisi nilai pilihan combobox format waktu.
cs = False  //digunakan untuk membuat sebuah variabel global untuk menentukan apakah pencarian merupakan tipe case sensitive atau tidak. False jika tidak, dan true jika case sensitive.
wwo = False  //digunakan untuk menentukan apakah mencari keseluruhan kata saja atau tidak. True untuk iya dan false jika tidak.

class Find(QtGui.QDialog):  //digunakan untuk membuat class baru yang akan digunakan untuk menampilkan window pencarian. 
    def __init__(self, parent=None):  /digunakan untuk membuat sebuah konstruktor dari class ‘Find’.
        QtGui.QDialog.__init__(self, parent)  //digunakan untuk menurunkan class ‘QDialog’ ke clas ‘Find’ ini.
        self.initUI()  //digunakan untuk memanggil class dengan nama ‘initUI’.
: install python 3 dan PyQt4, copy dan paste code program pada editor atau IDE, simpan dalam file python(ekstensi .py), lalu jalankan.

    def initUI(self):  //digunakan untuk membuat metode dengan nama ‘initUI’ yang akan digunakan untuk menyusun tampilan dari mini window class ini.

        self.lb1 = QtGui.QLabel("Search for: ", self)  //digunakan untuk sebuah label atau teks ‘search for :’. Yang di simpan ke dalam variabel ‘lb1’.
        self.lb1.setStyleSheet("font-size: 15px; ")  //digunakan untuk mengubah ukuran teks menjadi 15px dari label yang ada di variabel ‘lb1’.
        self.lb1.move(10, 10)  //digunakan untuk memasukkan label atau teks yang ada pada variabel ‘lb1’. Ke posisi ‘10x10’.

        self.te = QtGui.QTextEdit(self)  //digunakan untuk membuat sebuah kolom teks. Yang kemudian digunakan untuk kolom tempat memasukkan teks kata untuk dicari. Yang dimasukkan kedala variabel ‘te’.
        self.te.move(10, 40)  //digunakan untuk memasukkan kolom teks yang ada pada variabel ‘te’ ke dalam window dengan lokasi ‘10x40’.
        self.te.resize(250, 25)  //digunakan untuk merubah ukuran kolom teks pada variabel ‘te’ menjadi ‘250x25’.

        self.src = QtGui.QPushButton("Find", self)  //digunakan untuk membuat sebuah tombol dengan teks ‘Find’ yang disimpan kedalam variabel ‘src’. Yang akan digunakan untuk eksekusi pencarian.
        self.src.move(270, 40)  //digunakan untuk memasukkan tombol ‘Find’ ke dalam windw dengan posisi ‘270x40’.

        self.lb2 = QtGui.QLabel("Replace all by: ", self)  //digunakan untuk sebuah label atau teks ‘Replace all by :’. Yang di simpan ke dalam variabel ‘lb2’.
        self.lb2.setStyleSheet("font-size: 15px; ")  //digunakan untuk mengubah ukuran teks menjadi 15px dari label yang ada di variabel ‘lb2’.
        self.lb2.move(10, 80) //digunakan untuk memasukkan label atau teks yang ada pada variabel ‘lb2’. Ke posisi ‘10x80’.

        self.rp = QtGui.QTextEdit(self)  //digunakan untuk membuat sebuah kolom teks. Yang kemudian digunakan untuk kolom tempat memasukkan teks kata untuk sebagai ganti dari teks yang di cari. Yang dimasukkan kedalam variabel ‘rp’.
        self.rp.move(10, 110)  //digunakan untuk memasukkan kolom teks yang ada pada variabel ‘rp’ ke dalam window dengan lokasi ‘10x110’.
        self.rp.resize(250, 25)  //digunakan untuk merubah ukuran kolom teks pada variabel ‘re’ menjadi ‘250x25’.

        self.rpb = QtGui.QPushButton("Replace", self)  //digunakan untuk membuat sebuah tombol dengan teks ‘Replace’. Yang disimpan ke dalam variabel ‘rpb’ dan digunakan untuk mengeksekusi penggantian kata setelah di cari.
        self.rpb.move(270, 110)  //digunakan untuk memasukkan tombol ‘Replace’ ke dalam window dengan posisi ‘270x110’.

        self.opt1 = QtGui.QCheckBox("Case sensitive", self)  //digunakan untuk membuat sebuah checkbox dengan nama ‘Case sensitive’ yang disimpan kedalam variabel ‘opt1’
        self.opt1.move(10, 160)  //digunakan untuk memasukkan checkbox yang ada pada variabel ‘opt1’ kedalam window dengan lokasi ‘10x160’.
        self.opt1.stateChanged.connect(self.CS)  //digunakan untuk menjalankan metode dengan nama ‘CS’ ketika checkbox  pada variabel ‘opt2’ dicentang atau pun dibuang centangnya.

        self.opt2 = QtGui.QCheckBox("Whole words only", self)  //digunakan untuk membuat sebuah checkbox dengan nama ‘Whole words only’ yang disimpan kedalam variabel ‘opt2’
        self.opt2.move(10, 190)  //digunakan untuk memasukkan checkbox yang ada pada variabel ‘opt1’ kedalam window dengan lokasi ‘10x190’.
        self.opt2.stateChanged.connect(self.WWO)  //digunakan untuk menjalankan metode dengan nama ‘WWO’ ketika checkbox pada variabel ‘opt2’ dicentang atau pun dibuang centangnya.

        self.close = QtGui.QPushButton("Close", self)  //digunakan untuk membuat tombol dengan teks ‘Close’. Dan disimpan ke dalam variabel ‘close’.
        self.close.move(270, 220)  //digunakan untuk memasukkan tombol ‘close’ ke dalam window dengan lokasi ‘270x220’.
        self.close.clicked.connect(self.Close)  //digunakan untuk menjalankan metode dengan nama ‘close’. Ketika tombol ‘close’ ini kita klik.

    def CS(self, state):  //digunakan untuk membuat sebuah metode dengan nama ‘CS’ yang digunakan untuk menentukan case sensitive.
        global cs  //digunakan unuk memanggil global variabel ‘cs’.

        if state == QtCore.Qt.Checked:  //digunakn untuk mengecek apakah checkbox yang ada pada variabel ‘opt1’ tercentang.
            cs = True  //digunakan untuk mengubah nilai variabel ‘cs’ menjadi true.
        else:  //kondisi jika checkbox pada variabel ‘opt1’ tidak di centang.
            cs = False   //digunakan untuk mengubah nilai variabel ‘cs’ menjadi false.

    def WWO(self, state):  //digunakan untuk membuat sebuah metode dengan nama ‘WWO’ yang digunakan untuk menentukan case sensitive.
        global wwo  //digunakan unuk memanggil global variabel ‘wwo’.

        if state == QtCore.Qt.Checked:  //digunakan untuk mengubah nilai variabel ‘opt2’ menjadi true.
            wwo = True  //digunakan untuk mengubah nilai variabel ‘wwo’ menjadi true.
        else:  //kondisi jika checkbox pada variabel ‘opt1’ tidak di centang.
            wwo = False  //digunakan untuk mengubah nilai variabel ‘wwo’ menjadi false.

    def Close(self):  //digunakan untuk membuat sebuah metode dengan nama ‘Close’.
        self.hide()  //digunakan untuk menutup mini window dari class ‘FInd’ ini.



class Margin(QtGui.QDialog):  //digunakan untuk membuat class baru yang akan digunakan untuk menampilkan mini window untuk menentukan margin dari lembar kerja kita.
    def __init__(self, parent):  //merupakan sebuah konstruktor dari class ‘Margin’.
        QtGui.QDialog.__init__(self, parent) //digunakan untuk meng inheritens atau menurun kan class QtGui.Qdialog.
        self.parent = parent   //digunakan untuk menapung nilai parameter parent.

        self.layout = QtGui.QFormLayout(self)  //digunakan untuk mendefinisikan sebuah layout utama. Yaitu form layout. Yang disimpan ke dalam variabel ‘layout’.
        self.layoutTombol = QtGui.QHBoxLayout(self)  //mendefinisikan  sebuah layout baru yang akan digunakan untuk layout tombol. Yaitu QHBoxLayout. Dan disimpan ke dalam variabel ‘layoutTombol’.
        self.layoutKolom = QtGui.QHBoxLayout(self)  //digunakan untuk membuat layout kolom. Yang disimpan ke dalam variabel ‘layoutKolom’.
        self.tampilan()  //digunakan untuk menjalankan metode ‘tampilan’.
        self.show()   //digunakan untuk menampilkan miniwindow.

    def tampilan(self):  //digunakan untuk membuat metode dengan nama ‘tampilan’ yang akan digunakan untuk mengatur tampilan mini window pengatur margin nya.
        teks = QtGui.QLabel('Margin :')  //digunakan untuk membuat teks atau label ‘Margin: ‘. Yang di simpan ke dalam variabel ‘teks’.
        self.kolom = QtGui.QLineEdit('3')  //digunakan untuk membuat sebuah kolom teks. Dengan nilai default ‘3’. Dan disimpan ke dalam variabel ‘kolom’.
        satuan = QtGui.QLabel('cm')  //digunakan untuk membuat teks atau label ‘cm’. Dan disimpan kedalam variabel ‘satuan’.

        ok = QtGui.QPushButton('Ok')  //digunakan untuk membuat tombol ‘Ok’. Ke mudian disimpan ke dalam variabel ‘ok’.
        ok.clicked.connect(self.perintahOk)  //digunakan untuk menghubungkan tombol ‘ok’. Untuk menjalankan metode dengan nama ‘perintahOk’ saat tombol di klik.
        cancel = QtGui.QPushButton('Cancel')  //digunakan untuk membuat tombol ‘Cancel’. Ke mudian disimpan ke dalam variabel ‘cancel’.
        cancel.clicked.connect(self.perintahCancel)  //digunakan untuk menghubungkan tombol ‘cancel’. Untuk menjalankan metode dengan nama ‘perintahCancel’ saat tombol di klik.

        self.layoutKolom.addWidget(teks)  //digunakan untuk memasukkan label yg ada di variabel ‘teks’. Kedalam layout kolom.
        self.layoutKolom.addWidget(self.kolom)  //digunakan untuk memasukkan kolom teks yang ada pada variabel ‘kolom’ kedalam layout kolom.
        self.layoutKolom.addWidget(satuan)  //digunakan untuk memasukkan label yg ada di variabel ‘satuan’. Kedalam layout kolom.
        self.layout.addRow(self.layoutKolom)  //digunakan untuk memasukkan ‘layoutKolom’ ke dalam layout utama.
        self.layout.addRow(ok, cancel)  //diunakan untuk memasukkan tombol ‘ok’ dan ‘cancel’. Kedalam layout utama.

    def perintahOk(self):  //digunakan untuk membuat metode dengan nama ‘perintahOk’ yang digunakan untuk menjalankan perintah untuk mengatur margin.
        try:  //digunakan untuk mencoba beberapa code program.
            nilai = int(self.kolom.text()) * 37.795275591  //digunakan untuk mengalikan nilai yang ada di dalam kolom teks yang di masukkan oleh user. Pengalian tersebut saya lakukan agar perubahan yang di dapat lebih terlihat.
            self.parent.marginDokumen(nilai)  //digunakan untuk mengoper atau memaskkan nilai kedalam class utama dan mengatur margen lembar kerja nya.
            self.perintahCancel()  //digunakan untuk memanggilatau menjalankan metode dengan nama ‘perintahCancel’. Yang sebenarnya tujuan nya untuk menutup window ini sendiri.
        except:  //digunakan untuk menjalankan code program lain ketika code program di dalam ‘try’ terdapat error. Atau ketika user tidak memasukkan sebuah angka melainkan huruf. Dimana  untuk mengatur margin kita hanya memerlukan angka bukan huruf apalagi teks. hehe
            self.kolom.setText('Tidak Valid')  //digunakan untuk mengatur isi ‘kolom’ menjadi ‘tidak valid’ untuk memberitau user jika inputan nya salah.

    def perintahCancel(self):  //digunakan untuk membuat metode dengan nama ‘perintahCancel’. Untuk menutup window
        self.close()  //digunakan untuk menutup mini window.

class Date(QtGui.QDialog):  //digunakan untuk membuat class baru yangakan digunakan untuk menampilkan window untuk menyisipkan format waktu.
    def __init__(self, parent=None):  //merupakan sebuah konstruktor dari class Date.
        QtGui.QDialog.__init__(self, parent)
  //menginisiasi class QDialog dari QtGui.
        self.initUI()  //digunakan untuk memanggil metode dengan nama ‘initUI’.

    def initUI(self):  //digunakan untuk membuat sebuah metode dengan nama ‘initUI’ yang akan digunakan untuk mengatur tampilan mini window dari class ini.
        self.form = QtGui.QComboBox(self)  //digunakan untuk membuat sebuah combo box. Dan ditampung ke dalam variabel ‘form’.
        self.form.move(10, 10)  //code ini digunakan untuk memasukkan combobox yang ada di variabel ‘form’ ke dalam window. Pada posisi ‘10x10’.
        self.form.addItem(time.strftime("%d.%m.%Y"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘tanggal.bulan.tahun’.
        self.form.addItem(time.strftime("%A, %d. %B %Y"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘hari.tanggal.bulan(teks).tahun’.
        self.form.addItem(time.strftime("%d. %B %Y"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘tanggal.bulan(teks).tahun’.
        self.form.addItem(time.strftime("%d %m %Y"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘tanggal.bulan.tahun’.
        self.form.addItem(time.strftime("%X"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘jam.menit.detik’.
        self.form.addItem(time.strftime("%x"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘tanggal.bulan.tahun(singkat)’.
        self.form.addItem(time.strftime("%H:%M"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘jam:menit’.
        self.form.addItem(time.strftime("%A, %d. %B %Y %H:%M"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘hari, tanggal.bulan(teks) tahun jam:menit’.
        self.form.addItem(time.strftime("%d.%m.%Y %H:%M"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘tanggal.bulan.tahun jam:menit’.
        self.form.addItem(time.strftime("%d. %B %Y %H:%M"))  //digunakan untuk menambah item ke dalam combobox yang ada pada variabel ‘form’. Item yang dimasukkan merupakan waktu terkini dengan format ‘tanggal. Bulan(teks) tahun jam:menit’.

        global choiceStr  //digunakan untuk mendefinisikan sebuah variabel global. Dengan nama ‘choiceStr’.
        choiceStr = self.form.currentText()  // digunakan untuk mendapatkan nilai yang terpilih dari combobox yang kemudian disimpan ke dalam ke dalam variabel ‘choiceStr’.

        self.form.activated[str].connect(self.handleChoice)  //digunakan untuk menghubungkan combobox di dalam variabel ‘form’ untuk menjalankan metode dengan nama ‘handleChoice’ ketika combobox aktif.

        self.ok = QtGui.QPushButton("Insert", self)  //digunakan untuk membuat tombol dengan nama ‘Insert’ yang kemudian ditampung ke dalam variabel  ‘ok’.
        self.ok.move(180, 10)  //digunakan untuk memasukkan tombol ‘Insert’ yang tertampung di dalam variabel ‘ok’ ke dalam window. Dengan posisi ‘180x10’.

        self.cancel = QtGui.QPushButton("Cancel", self)  //digunakan untuk membuat tombol dengan nama ‘Cancel’ yang kemudian ditampung ke dalam variabel  ‘cancel’.
        self.cancel.move(180, 40)  //digunakan untuk memasukkan tombol ‘Cancel’ yang tertampung di dalam variabel ‘cancel’ ke dalam window. Dengan posisi ‘180x40’.
        self.cancel.clicked.connect(self.Cancel)  //digunakan untuk menjalankan metode dengan nama ‘cancel’ ketika tombol cancel di klik.

    def handleChoice(self, choice):  //digunakan untuk membuat metode dengan nama ‘handleChoice’ yang akan digunakan untuk menghandle perubahan nilai pada combo box.
        global choiceStr  //digunakan untuk memanggil global variabel yaitu ‘choiceStr’.

        choiceStr = choice  //digunakan untuk mengubah nilai ‘choiceStr’ menjadi pilihan yang terpilih pada combo box pemilih format waktu.

    def Cancel(self):  //digunkan untuk membuat metode dengan nama ‘Cancel’ yang akan digunakan untuk menutup mini window.
        self.close()  //digunakan untuk menutup mini window.


class Main(QtGui.QMainWindow):  //digunakan untuk membuat class utama untuk membuat class utama dari aplikasi Dokumen editor. Dengan memberikan turunan dari class ‘QtGui.QMainQindow’.
    def __init__(self):  //merupakan konstrutor dari class ‘main’.
        QtGui.QMainWindow.__init__(self, None)  //digunakan untuk memanggil class ‘QtGui.QmainWindow’ nya.
        self.marginSaatIni = 113.385826772  //digunakan untuk mengatur margin saat pertama aplikasi atau program di jalankan.
        self.initUI()  //digunakan untuk menjalankan metode dengan nama ‘initUI’.
        QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('sgi'))  //digunakan untuk merubah style keseluruhan dari window aplikasi.

    def initUI(self):  //merupakan metode dengan nama ‘initUI’ yang digunakan untuk menjalankan beberapa metode.
        # ---------Window settings --------------------------------  //komentar
        self.buatLembarKerja()  //digunakan untuk menjalankan metode dengan nama ‘buatLembarKerja’.
        self.buatToolbar1() //digunakan untuk menjalankan metode dengan nama ‘buatToolbar1’.
        self.buatToolbar2() //digunakan untuk menjalankan metode dengan nama ‘buatToolbar2’.
        self.buatToolbar3()//digunakan untuk menjalankan metode dengan nama ‘buatToolbar3’.
        self.buatStatusBar() //digunakan untuk menjalankan metode dengan nama ‘buatStatusbar’.
        self.setScroll()  //digunakn untuk menjalankan metode dengan nama ‘setScroll’.
        # ------- Toolbar --------------------------------------  //komentar

    def buatToolbar1(self):  //digunakan untuk membuat metode dengan nama ‘buatToolbar1’. Yang akan digunakan untuk membuat toolbar pertama yang ada di kiri area kerja.

        self.perintahBaru = QtGui.QAction("New", self)  //digunakan untuk membuat perintah ‘New’ yang disimpan kedalam variabel ‘perintahBaru’.
        self.perintahBaru.setShortcut("Ctrl+N")  //digunakn untuk membuat shortcut untuk perintah ‘New’. Dengan shorcut ‘Ctrl+N’
        self.perintahBaru.setStatusTip("Buat Dokumen Baru.")  //digunakan untuk menampilkan status atau tooltip pada statusbar saat kursor ada di toolbar atau perintah ‘New’.
        self.perintahBaru.triggered.connect(self.New)  //digunakan untuk menjalankan metode dengan nama ‘New’ ketika perintah ‘New’ diklik atau di jalankan.

        self.perintahBuka = QtGui.QAction("Open", self)  //digunakan untuk membuat perintah ‘Open' yang disimpan kedalam variabel ‘perintahBuka’.
        self.perintahBuka.setStatusTip("Buka dokumen yang telah disimpan")  //digunakan untuk menampilkan status atau tooltip pada statusbar saat kursor ada di toolbar atau perintah ‘Open’.
        self.perintahBuka.setShortcut("Ctrl+O")  //digunakn untuk membuat shortcut untuk perintah ‘Open’. Dengan shorcut ‘Ctrl+O’
        self.perintahBuka.triggered.connect(self.Open)  //digunakan untuk menjalankan metode dengan nama ‘Open’ ketika perintah ‘Open’ diklik atau di jalankan.

        self.perintahSimpan = QtGui.QAction("Save", self) //digunakan untuk membuat perintah ‘Save’ yang disimpan kedalam variabel ‘perintahSimpan’.
        self.perintahSimpan.setStatusTip("Simpan dokumen yang telah dibuat")  //digunakan untuk menampilkan status atau tooltip pada statusbar saat kursor ada di toolbar atau perintah ‘Save’.
        self.perintahSimpan.setShortcut("Ctrl+S")  //digunakn untuk membuat shortcut untuk perintah ‘Save’. Dengan shorcut ‘Ctrl+S’
        self.perintahSimpan.triggered.connect(self.Save)  //digunakan untuk menjalankan metode dengan nama ‘Save’ ketika perintah ‘Save’ diklik atau di jalankan.

        self.perintahPreview = QtGui.QAction("view", self)  //digunakan untuk membuat perintah ‘view’ yang disimpan kedalam variabel ‘perintahPreview’.
        self.perintahPreview.setStatusTip("Lihat halaman sebelum di print")  //digunakan untuk menampilkan status atau tooltip pada statusbar saat kursor ada di toolbar atau perintah ‘view’.
        self.perintahPreview.setShortcut("Ctrl+Shift+P")  //digunakn untuk membuat shortcut untuk perintah ‘view’. Dengan shorcut ‘Ctrl+Shift+P’
        self.perintahPreview.triggered.connect(self.PageView)  //digunakan untuk menjalankan metode dengan nama ‘PageView’ ketika perintah ‘view’ diklik atau di jalankan.

        self.perintahCari = QtGui.QAction("Find", self)  //digunakan untuk membuat perintah ‘Find’ yang disimpan kedalam variabel ‘perintahCari’.
        self.perintahCari.setStatusTip("Cari kata di dokumen")  //digunakan untuk menampilkan status atau tooltip pada statusbar saat kursor ada di toolbar atau perintah ‘Find’.
        self.perintahCari.setShortcut("Ctrl+F")  //digunakn untuk membuat shortcut untuk perintah ‘Find’. Dengan shorcut ‘Ctrl+F’
        self.perintahCari.triggered.connect(self.Find)  //digunakan untuk menjalankan metode dengan nama ‘Find’ ketika perintah ‘Find’ yang ada pada variabel ‘perintahCari’ diklik atau di jalankan.

        self.perintahCut = QtGui.QAction("Cut", self)  //digunakan untuk membuat sebuah perintah untuk tombol cut. Dan disimpan kedalam variabel ‘perintahCut’.
        self.perintahCut.setStatusTip("Copy ke klipboard dan hapus teks yang di block")  //membuat status tip ketika kursor ada di atas tombol nantinya
        self.perintahCut.setShortcut("Ctrl+X")  //digunakan untuk membuat shortcut untuk perintah cut. Dengan shortcut ‘Ctrl+X’
        self.perintahCut.triggered.connect(self.Cut)  //digunakan untuk menghubungkan perintah cut untuk menjalankan metode ‘cut’.

        self.perintahCopy = QtGui.QAction("Copy", self)  //digunakan untuk membuat sebuah perintah untuk tombol copy. Dan disimpan kedalam variabel ‘perintahCopy’.
        self.perintahCopy.setStatusTip("Copy ke klipboard teks yang di block")  //membuat status tip ketika kursor ada di atas tombol nantinya
        self.perintahCopy.setShortcut("Ctrl+C")  //digunakan untuk membuat shortcut untuk perintah copy. Dengan shortcut ‘Ctrl+C’
        self.perintahCopy.triggered.connect(self.Copy)  //digunakan untuk menghubungkan perintah copy untuk menjalankan metode ‘copy’.

        self.perintahPaste = QtGui.QAction("Paste", self)  //digunakan untuk membuat sebuah perintah untuk tombol paste. Dan disimpan kedalam variabel ‘perintahPaste’.
        self.perintahPaste.setStatusTip("Paste teks dari clipboard")  //membuat status tip ketika kursor ada di atas tombol nantinya
        self.perintahPaste.setShortcut("Ctrl+V")  //digunakan untuk membuat shortcut untuk perintah paste. Dengan shortcut ‘Ctrl+V’
        self.perintahPaste.triggered.connect(self.Paste)  //digunakan untuk menghubungkan perintah paste untuk menjalankan metode ‘paste’.

        self.perintahUndo = QtGui.QAction("Undo", self)  //digunakan untuk membuat sebuah perintah untuk tombol Undo. Dan disimpan kedalam variabel ‘perintahUndo’.
        self.perintahUndo.setStatusTip("Batalkan perintah terakhir")  //membuat status tip ketika kursor ada di atas tombol nantinya
        self.perintahUndo.setShortcut("Ctrl+Z")  //digunakan untuk membuat shortcut untuk perintah undo. Dengan shortcut ‘Ctrl+Z’
        self.perintahUndo.triggered.connect(self.Undo)  //digunakan untuk menghubungkan perintah undo untuk menjalankan metode ‘undo’.

        self.perintahRedo = QtGui.QAction("Redo", self)  //digunakan untuk membuat sebuah perintah untuk tombol cut. Dan disimpan kedalam variabel ‘perintahRedo’.
        self.perintahRedo.setStatusTip("Batalkan perintah Undo terakhir")  //membuat status tip ketika kursor ada di atas tombol nantinya
        self.perintahRedo.setShortcut("Ctrl+Y")  //digunakan untuk membuat shortcut untuk perintah Redo. Dengan shortcut ‘Ctrl+Y’
        self.perintahRedo.triggered.connect(self.Redo)  //digunakan untuk menghubungkan perintah redo untuk menjalankan metode ‘Redo’.

        self.perintahTanggal = QtGui.QAction("time", self)  //digunakan untuk membuat sebuah perintah dengn nama ‘time’. Dan disimpan kedalam variabel ‘perintahTaggal’.
        self.perintahTanggal.setStatusTip("Sisipkan format tanggal dan waktu hari ini")  //membuat status tip ketika kursor ada di atas tombol nantinya
        self.perintahTanggal.setShortcut("Ctrl+D")  //digunakan untuk membuat shortcut untuk perintah ‘time’. Dengan shortcut ‘Ctrl+D’
        self.perintahTanggal.triggered.connect(self.DateTime)  //digunakan untuk menghubungkan perintah ‘time’ untuk menjalankan metode ‘DateTime’.

        self.perintahMargin = QtGui.QAction("Margin", self)  //digunakan untuk membuat sebuah perintah untuk dengan nama 
‘Margin’. Dan disimpan kedalam variabel ‘perintahMargin’.
        self.perintahMargin.setStatusTip("Sesuiakan Margin Dokumen")  //digunakan untuk menampilkan sebuah pesan ketika kursor ada di atas tombol.
        self.perintahMargin.setShortcut("Ctrl+M")  //digunakan untuk memberikan shortcut untuk menjalankan peritah ‘Margin’ ini. Yaitu ‘Ctrl+M’.
        self.perintahMargin.triggered.connect(self.setMargin)  //diguanakan untuk menjalankan metode dengan nama ‘setMargin’.  Ketika perintah ‘Margin’ atau yang ada di dalam variabel ‘perintahMargin’ di klik nantinya.

        self.perintahPrint = QtGui.QAction("Print", self) //digunakan untuk membuat perintah ‘Print’ yang disimpan kedalam variabel ‘perintahPrint’.
        self.perintahPrint.setStatusTip("Cetak dokumen anda")
        self.perintahPrint.setShortcut("Ctrl+P")  //digunakn untuk membuat shortcut untuk perintah ‘print’. Dengan shorcut ‘Ctrl+P’
        self.perintahPrint.triggered.connect(self.Print)  //digunakan untuk menjalankan metode dengan nama ‘Print’ ketika perintah ‘print’ diklik atau di jalankan.

        self.perintahPdf = QtGui.QAction("PDF", self) //digunakan untuk membuat perintah ‘PDF’ yang disimpan kedalam variabel ‘perintahPdf’.
        self.perintahPdf.setStatusTip("Simpan sebagai PDF")  //digunakan untuk menampilkan status atau tooltip pada statusbar saat kursor ada di toolbar atau perintah ‘PDF’.
        self.perintahPdf.triggered.connect(self.PDF)  //digunakan untuk menjalankan metode dengan nama ‘PDF’ ketika perintah ‘PDF’ diklik atau di jalankan.

        self.perintahKeluar = QtGui.QAction("Exit", self)  //digunakan untuk membuat sebuah perintah untuk tombol keluar.
        self.perintahKeluar.setStatusTip("Ingin Keluar ?")  //membuat status tip ketika kursor ada di atas tombol nantinya
        self.perintahKeluar.triggered.connect(self.exit)  //digunakan untuk menghubungkan tombol ketika di klik untuk menjalankan metode ‘exit’.

        self.toolbar = self.addToolBar("Options")  //digunakan untuk membuat sebuah toolbar ‘option’. Yang di tampung ke dalam variabel toolbar.
        self.toolbar.addSeparator()  //digunakan untuk membuat gari pembatas.
        self.toolbar.addAction(self.perintahBaru)  //digunakan untuk memasukkan perintah ‘New’ yang tersimpan di dalam variabel ‘PerintahBaru’ kedalam jajaran toolbar.
        self.toolbar.addAction(self.perintahBuka)  //digunakan untuk memasukkan perintah ‘Open’ yang tersimpan di dalam variabel ‘perintahBuka’ kedalam jajaran toolbar.
        self.toolbar.addAction(self.perintahSimpan)  //digunakan untuk memasukkan perintah ‘Save’ yang tersimpan di dalam variabel ‘perintahSimpan’ kedalam jajaran toolbar.
        self.toolbar.addSeparator()  //digunakan untuk membuat sebuah garis batas.
        self.toolbar.addAction(self.perintahPrint)  //digunakan untuk memasukkan perintah print tadi kedalam toolbar di window.
        self.toolbar.addAction(self.perintahPdf)  //digunakan untuk memasukkan perintah ‘PDF’ tadi kedalam toolbar di window.
        self.toolbar.addAction(self.perintahPreview)  //digunakan untuk memasukkan perintah ‘view’ tadi kedalam toolbar di window.
        self.toolbar.addAction(self.perintahMargin)  //digunakan untuk memasukkan perintah ‘margin’ tadi kedalam toolbar di window.
        self.toolbar.addSeparator()  //digunakan untuk membuat sebuah garis batas.
        self.toolbar.addAction(self.perintahCari)  //digunakan untuk memasukkan perintah ‘Find’ yang ada di dalam variabel ‘perintahCari’ kedalam toolbar di window.
        self.toolbar.addAction(self.perintahCut)  //digunakan untuk memasukkan perintah cut tadi kedalam toolbar di window.
        self.toolbar.addAction(self.perintahCopy)  //digunakan untuk memasukkan perintah copy tadi kedalam toolbar di window.
        self.toolbar.addAction(self.perintahPaste)  //digunakan untuk memasukkan perintah paste tadi kedalam toolbar di window.
        self.toolbar.addAction(self.perintahUndo)  //digunakan untuk memasukkan perintah undo tadi kedalam toolbar di window.
        self.toolbar.addAction(self.perintahRedo)  //digunakan untuk memasukkan perintah Redo tadi kedalam toolbar di window.
        self.toolbar.addSeparator()  //digunakan untuk membuat sebuah garis batas.
        self.toolbar.addAction(self.perintahTanggal)  //digunakan untuk memasukkan perintah ‘time’ tadi kedalam toolbar di window.
        self.toolbar.addSeparator()  //digunakan untuk membuat sebuah garis batas.
        self.toolbar.addAction(self.perintahKeluar)  //digunakan untuk memasukkan perintah tadi kedalam toolbar.
        self.addToolBarBreak()  //digunakan untuk memberikan batas penambahan toolbar.
        self.toolbar.setMovable(False)  //digunakan agar toolbar tidak bisa di pindah.

        self.addToolBar(QtCore.Qt.LeftToolBarArea, self.toolbar)  //digunakan untuk memasukkan toolbar ke samping lembar kerja.

    def buatToolbar2(self):  //digunakan untuk membuat metode dengan nama ‘buatToolbar2’. Yang akan digunakan untuk membuat toolbar kedua yang ada di atas area kerja.
        self.jenisFont = QtGui.QFontComboBox(self)  //digunakan untuk membuat sebuah combobox font dan disimpan ke dalam variabel ‘jenisFont’.
        self.jenisFont.currentFontChanged.connect(self.FontFamily)  //digunakan untuk menjalankan metode dengan nama ‘FontFamily’ ketika nilai atau jenis font di combobox berubah.

        ukuranFont = QtGui.QComboBox(self)  //digunakan untuk membuat sebuah combobox. Dan ditampung kedalam metode dengan nama ‘ukuranFont’.
        ukuranFont.setEditable(True)  //digunakan untuk membuat combobox ‘ukruanFont’ agar tidak bisa di edit manual.
        ukuranFont.setMinimumContentsLength(3)  //digunakan untuk menentukan ukuran combobox dari ‘ukuranFont’.
        ukuranFont.activated.connect(self.FontSize)  //digunakan untuk  menjalankan perintah ‘FontSize’ ketika combo box ‘ukuran font aktif. Atau sudah ada nilai yang valid.
        flist = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 32, 36, 40, 44, 48,
                 54, 60, 66, 72, 80, 88, 96]  //membuat list number yang kemudian ditampung kedalam variabel ‘flist’’.
        for i in flist:  //digunakan untuk melakukan perulangan sebanyak nilai yang ada di variabel list ‘flist’.
            ukuranFont.addItem(str(i))  //digunakan untuk memasukkan angka - angka yang ada pada variabel ‘flist’ kealam combobox ‘ukuranFont’.

        self.warnaFont = QtGui.QPushButton('Text')  //digunakan untuk membuat sebuah perintah dengan nama ‘text’ dan disimpan kedalam variabel ‘warnaFont’.
        self.warnaFont.setStyleSheet('QPushButton {color: black;font-weight:bold; text-decoration: underline; }')  //digunakan untuk mengubah warna teks dari perintah ‘text’. Dan saya tebalkan serta saya beri garis bawah dengan perintah html.
        self.warnaFont.setFlat(True)  //digunakan untuk menghilangkan garis tombol pada perintah ‘text’.
        self.warnaFont.setFixedSize(40, 20)  //digunakan untuk mengatur ukuran toolbar perintah ‘text’.
        self.warnaFont.clicked.connect(self.ubahWarna)  //digunakan untuk menjalankan metode dangan naa ‘ubahWarna’  ketika printah ‘text’ dieksekusi atau di klik.

        self.warnaBackground = QtGui.QPushButton("Background")  //digunakan untuk membuat sebuah perintah dengan nama ‘background’ dan disimpan kedalam variabel ‘warnaFont’.
        self.warnaBackground.setStyleSheet('QPushButton {color: white;font-weight:bold; text-decoration: underline; }')  //digunakan untuk mengubah warna teks dari perintah ‘Background’. Dan saya tebalkan serta saya beri garis bawah dengan perintah html.
        self.warnaBackground.setFixedSize(80, 20)  //digunakan untuk mengatur ukuran toolbar perintah ‘background’.
        self.warnaBackground.setFlat(True)  //digunakan untuk menghilangkan garis tombol pada perintah ‘background’ saat menjadi toolbar.
        self.warnaBackground.clicked.connect(self.ubahWarnaBackground)  //digunakan untuk untuk menjalankan metode dengan nama ‘ubahWarnaBackground’. Ketika perintah ini di alankan atau di klik.

        perintahTebal = QtGui.QAction("Bold", self, checkable=True)  //digunakan untuk mendefinisikan sebuah perintah yang ditampung kedalam variabel ‘perintahTebal’.
        perintahTebal.setStatusTip("Tebalkan Teks")  //menampilkan teks ‘tebalkan Teks’ saat kursor berada di atasnya.
        perintahTebal.setShortcut("Ctrl+B")  //memberikan shortcut untuk menjalankan perintah tersebut.
        perintahTebal.triggered.connect(self.Bold)  //digunakan untuk menghubungkan perintah ini untuk menjalankan metode dengan nama ‘Bold’.

        perintahMiring = QtGui.QAction("Italic", self, checkable=True)  //digunakan untuk mendefinisikan sebuah perintah yang ditampung kedalam variabel ‘perintahMiring’.
        perintahMiring.setStatusTip("Miringkan Teks")  //menampilkan teks ‘Miringkan Teks’ saat kursor berada di atasnya.
        perintahMiring.setShortcut("Ctrl+I")  //memberikan shortcut untuk menjalankan perintah tersebut.
        perintahMiring.triggered.connect(self.Italic)  //digunakan untuk menghubungkan perintah ini untuk menjalankan metode dengan nama ‘Italic’.

        perintahGarisBawah = QtGui.QAction("Underline", self, checkable=True)  //digunakan untuk mendefinisikan sebuah perintah yang ditampung kedalam variabel ‘perintahGarisBawah’.
        perintahGarisBawah.setStatusTip("Beri Garis bawah Teks")  //menampilkan teks ‘Beri Garis bawah Teks’ saat kursor berada di atasnya.
        perintahGarisBawah.setShortcut("Ctrl+U")  //memberikan shortcut untuk menjalankan perintah tersebut.
        perintahGarisBawah.triggered.connect(self.Underl)  //digunakan untuk menghubungkan perintah ini untuk menjalankan metode dengan nama ‘Underl’.

        space1 = QtGui.QLabel("  ", self)  //membuat sebuah sepasi kosong yang akan digunakan untuk memberikan jarak antar combo box ‘jenisFont’ dan ‘ukuranFont’. Dan ditampung kedalam variabel ‘space1’.
        space2 = QtGui.QLabel(" ", self)  //membuat sebuah sepasi kosong yang akan digunakan untuk memberikan jarak antar combo box ‘jenisFont’ dan ‘ukuranFont’. Dan ditampung kedalam variabel ‘space2’.

        self.formatbar = self.addToolBar("Format")  //membuat sebuah toolbar dengan nama ‘format’ dan disimpan ke dalam variabel ‘formatbar’.

        self.formatbar.addWidget(self.jenisFont)  //digunakn untuk memasukkan combobox ‘jenisFont’ ke dalam jajaran toolbar aplikasi.
        self.formatbar.addWidget(space1) //digunakan untuk memasukkan spasi kosong atau ‘space1’ kedalam toolbar agar ada jarak.
        self.formatbar.addWidget(ukuranFont)  //digunakn untuk memasukkan combobox ‘jenisFont’ ke dalam jajaran toolbar aplikasi.
        self.formatbar.addWidget(space2) //digunakan untuk memasukkan spasi kosong atau ‘space2’ kedalam toolbar agar ada jarak.

        self.formatbar.addSeparator()  //digunakan untuk menambahkan garis pembatas dengan toolbar lain.

        self.formatbar.addWidget(self.warnaFont)  //digunakan untuk memasukkan perintah ‘warnaFont’ atau ‘text’. Ke dalam jajaran toolbar.
        self.formatbar.addWidget(self.warnaBackground) //digunakan untuk memasukkan perintah ‘warnaBackground’ atau ‘background’. Ke dalam jajaran toolbar.

        self.formatbar.addSeparator()  //digunakan untuk memberikan garis batas pada jajaran toolbar.

        self.formatbar.addAction(perintahTebal)  //menambahkan perintah ‘perintahTebal’ ke dalam toolbar dengan variabel formatbar.
        self.formatbar.addAction(perintahMiring)  //menambahkan perintah ‘perintahMiring’ ke dalam toolbar dengan variabel formatbar.
        self.formatbar.addAction(perintahGarisBawah)  //menambahkan perintah ‘perintahGarisBawah’ ke dalam toolbar dengan variabel formatbar.
        self.formatbar.setMovable(False)  //membuat agar toolbar tidak bisa dipindah - pindah

    def buatToolbar3(self):  //digunakan untuk membuat metode dengan nama ‘buatToolbar3’ yang digunakan untuk membuat toolbar 3.


        self.left = QtGui.QAction("left", self)  //digunakan untuk membuat perintah dengan nama ‘left’ dan saya simpan di variabel ‘left’. Yang akan digunakan untuk perintah perataan kiri.
        self.left.triggered.connect(self.alignLeft)  //digunakan untuk menghubungkan perintah ‘left’ untuk menjalankan metode ‘alignLeft’ ketika perintah di jalankan/diklik nantinya.

        self.center = QtGui.QAction("center", self)  //digunakan untuk membuat perintah dengan nama ‘center’ dan saya simpan di variabel ‘center’. Yang akan digunakan untuk perintah perataan tengah.
        self.center.triggered.connect(self.alignCenter)  //digunakan untuk menghubungkan perintah ‘center’ untuk menjalankan metode ‘alignCenter’ ketika perintah di jalankan/diklik nantinya.

        self.right = QtGui.QAction("right", self)  //digunakan untuk membuat perintah dengan nama ‘right’ dan saya simpan di variabel ‘right’. Yang akan digunakan untuk perintah perataan kanan.
        self.right.triggered.connect(self.alignRight)  //digunakan untuk menghubungkan perintah ‘right’ untuk menjalankan metode ‘alignRight’ ketika perintah di jalankan/diklik nantinya.

        self.justify = QtGui.QAction("justify", self)  //digunakan untuk membuat perintah dengan nama ‘justifyt’ dan saya simpan di variabel ‘justify’. Yang akan digunakan untuk perintah perataan kanan dan kiri.
        self.justify.triggered.connect(self.alignJustify)  //digunakan untuk menghubungkan perintah ‘justify’ untuk menjalankan metode ‘alignJustify’ ketika perintah di jalankan/diklik nantinya.

        self.bullet = QtGui.QAction("Bullet", self)  //digunakan untuk membuat sebuah perintah dengan nama ‘bullet’. Dan disimpan ke dalam variabel ‘bullet’.
        self.bullet.triggered.connect(self.BulletList)  //digunakan untuk menghubunkan perintah bullet untuk menjalankan metode dengan nama ‘BulletList’.

        self.numbering = QtGui.QAction("Numbered", self)  //digunakan untuk membuat sebuah perintah dengan nama ‘Numbered’. Dan disimpan ke dalam variabel ‘Numbering’.
        self.numbering.triggered.connect(self.NumberedList)  //digunakan untuk menghubunkan perintah Numbering untuk menjalankan metode dengan nama ‘NumberedList’.

        self.paragrafBar = self.addToolBar("paragraf")  //digunakan untuk membuat toolbar baru dengna nama paragraf. Dan disimapan ke dalam variabel ‘paragrafBar’.
        self.paragrafBar.addAction(self.bullet)  //digunakan untuk memsukkan perintah ‘bullet’ ke dalam toolbar paragraf bar.
        self.paragrafBar.addAction(self.numbering)  //digunakan untuk memsukkan perintah ‘Numbering’ ke dalam toolbar paragraf bar.

        self.paragrafBar.addSeparator()  //digunakan untuk menambahkan garis pembatas pada barisan toolbar.
        self.paragrafBar.addAction(self.left)  //digunakan untuk memasukkan perintah ‘left’ kedalam toolbar ‘paragrafBar’.
        self.paragrafBar.addAction(self.center)  //digunakan untuk memasukkan perintah ‘center’ kedalam toolbar ‘paragrafBar’.
        self.paragrafBar.addAction(self.right)  //digunakan untuk memasukkan perintah ‘right’ kedalam toolbar ‘paragrafBar’.
        self.paragrafBar.addAction(self.justify)  //digunakan untuk memasukkan perintah ‘justify’ kedalam toolbar ‘paragrafBar’.

        self.paragrafBar.setMovable(False)  //digunakan untuk membuat toolbar ‘paragrafBar’ agar tidak bisa di pindah pindah.

    def buatLembarKerja(self):  //digunakan untuk membuat metode dengan nama ‘buatLembarKerja’ yang akan digunakan untuk membuat lembar kerjanya.
        # ------- Text Edit -----------------------------------
        widget = QtGui.QWidget(self)  //mendefinisikan sebuah widget
        self.mainLayout = QtGui.QHBoxLayout(widget)  //membuat sebuah layout utama dari aplikasi ini. Dengan memasukkan widget yang sudah kita definisikan tadi sebagai komponen utama yang ada ditengah.

        self.text = QtGui.QTextEdit(self)  //mendefinisikan atau membuat kolom teks nya. Yang kemudian disimpan ke dalam variabel ‘text’.
        self.text.setMaximumWidth(793.700787402)  //mengatur lebar maksimal dari kolom teks menjadi angka yang ada pada parameter.
        self.text.setMinimumWidth(793.700787402)  //mengatur lebar minimal dari kolom teks menjadi angka yang ada pada parameter.
        self.text.setMinimumHeight(1122.519685039)  //mengatur tinggi maksimal dari kolom teks menjadi angka yang ada pada parameter.
        self.mainLayout.addWidget(self.text)  //digunakan untuk memasukkan kolom teks ke widget utama aplikasi.
        self.text.setFocus()  //mengatur agar saat aplikasi dijalankan, maka kursor akan fokus ke kolom teks.
        self.setCentralWidget(widget) //membuat agar ‘widget’ menjadi widget atau komponen utama.

        # --------dokumen---------  //komentar
        self.dokumen = QtGui.QTextDocument(self)  //mendefinisikan ‘QTextDocument’ yang ditampung ke dalam variabel ‘self.dokumen’.
        self.text.setDocument(self.dokumen)  //mengatur kolom text yang ditampung ke dalam variabel ‘text’ menjadi sebuah text editor agar bisa kita bold, meiringkan dan kita berikan berbagai variasi
        self.text.document().setDocumentMargin(113.385826772)  //digunakan untuk menentukan margin saat program di jalankan.
        self.text.undoAvailable.connect(self.undoTersedia)  //digunakan untuk menghubungkan ketersediaan undo ke metode dengan nama ‘undoTersedia’
        self.text.redoAvailable.connect(self.redoTersedia)  //digunakan untuk menghubungkan ketersediaan redo ke metode dengan nama ‘redoTersedia’

    def undoTersedia(self, b):  //digunakan untuk membuat metode dengan nama ‘undoTersedia’ yang digunakan untuk menerima boolean ketersediaan undo. False jika tidak tersedia dan true jika tersedia. True atau false tersebut di tampung ke dalam variabel ‘b’.
        self.perintahUndo.setEnabled(b)  //digunakan untuk menghidupkan atau mematikan tombol ‘undo’ sesuai ketersediaan nya.

    def redoTersedia(self, b):  //digunakan untuk membuat metode dengan nama ‘redoTersedia’ yang digunakan untuk menerima boolean ketersediaan redo. False jika tidak tersedia dan true jika tersedia. True atau false tersebut di tampung ke dalam variabel ‘b’.
        self.perintahRedo.setEnabled(b)  //digunakan untuk menghidupkan atau mematikan tombol ‘redo’ sesuai ketersediaan nya.

    def buatStatusBar(self):  //digunakan untuk membuat metode dengan nama ‘buatStatusBar’. Yang akan digunakan untuk membuat sebuah status bar si bawah window aplikasi.
        # ------- Statusbar ------------------------------------
        self.status = self.statusBar()  //digunakan untuk memanggil statusbar window aplikasi dan  disimpan keadalam variabel ‘status’.
        self.text.cursorPositionChanged.connect(self.CursorPosition)  //digunakan untuk memanggil metode dengan nama ‘CursorPosition’ saat posisi kursor di area kerja berubah.

    def setScroll(self):  //digunakan untuk membuat metode dengan nama ‘setScroll’ yang akan digunakan untuk mengatur scrollbar
        # mengatur scroll  //komentar
        self.scrollArea = QtGui.QScrollArea()  //digunakan untuk mendefinisikan sebuah scrollbar yang ditampung ke dalam variabel ‘scrollArea’.
        self.scrollArea.setWidget(self.text)  //mengatur fungsi scrollbar sebagai  scroll dari kolom text yang sudah kita buat pada metode sebelumnya.
        self.scrollArea.setBackgroundRole(QtGui.QPalette.Mid)  //mengatur style dari background tempat widget yang di scroll
        self.scrollArea.setAlignment(Qt.AlignCenter)  //mengatur agar widget nya (kolom teks) berada di posisi tengah

        self.mainLayout.addWidget(self.scrollArea)  //memasukkan scroll nya ke dalam window

            # -------- Toolbar slots -----------------------------------  //komentar

    def New(self):  //digunakan untuk membuat metode dengan nama ‘New’. Yang akan digunakan untuk membuat dokumen baru.
        self.text.clear()  //digunakan untuk membersihkan lembar kerja. Sehingga seakan akan seperti membuat dokumen baru.

    def Open(self):  //digunakan untuk membuat metode dengan nama ‘open’ yang akan digunakan untuk membuka dokumen yang telah tesimpan.
        filename = QtGu: install python 3 dan PyQt4, copy dan paste code program pada editor atau IDE, simpan dalam file python(ekstensi .py), lalu jalankan.

i.QFileDialog.getOpenFileName(self, 'Open File')  //digunakan untuk membuka sebuah file dialog untuk mencari file. Yang akan disimpan lokasinya kedalam variabel ‘filename’.
        if filename:  //digunakanuntuk mengecek apakah variabel ‘filename’ kosong atau tidak. Yang artinya mengecek apakah user memilih file atau tidak.
            file = QtCore.QFileInfo(filename)  //mengelola file dan memasukkan nya ke dalam variabel ‘file’.
            nama = file.fileName()  //digunakan untuk mendapatkan nama file. Lalu disimpan kedalam variabel ‘nama’.

            jumlah = len(nama)  //digunakan untuk mendapatkan jumlah jumlah karekter dari nama file. Lalu disimpan kedalam variabel ‘jumlah’.
            penentu = False  //digunakan untuk mendefinisikan variabel boolean dengan kondisi awal ‘false’. Dengan nama ‘penentu’.
            if len(nama) > 3:  //digunakan untuk mengecek apakah nama flle lebih dari 3 karakter.
                if nama[jumlah - 1] != 'n':
                    if nama[jumlah - 2] != 'm':
                        if nama[jumlah - 3] != '.':  
                            penentu = True
//4 baris code diatas fungsinya untuk mengecek ekstensi dari file yang akan kita buka nantinya... Variabel ‘penentu’ akan bernilai true jika ekstensi nya tidak sesuai... Dan akan bernilai false jika ekstensi nya benar. Yaitu ‘.mn’.

            if penentu or jumlah <= 3:  //digunakan untuk mengecek apakah penentu bernilai true. Yang artinya mengecek apakah ekstensinya salah. Dan nama nya kurang atau sama dengan 3 karakter.
                QtGui.QMessageBox.critical(self, "Kesalahan",
                                           self.tr("Maaf!! aplkasi Mn-Editor ini hanya bisa membuka"
                                                   "\nfile dengan file ber-ekstensi (.mn)"
                                                   " mohon pilih file yang tepat."))  //4 baris code program di atas, digunakan untuk menampilkan pesan error jika file yang dipilih user tidak sesuai.
            else:  //kondisi else dari ketidak sesuai an nama file. Atau kondisi benar dari kesalahan pengecekan nama file.
                try:  //digunakan untuk mencoba beberapa baris code program
                    f = open(filename, 'r')  //digunakan untuk membuka file yang telah dipilih oleh user dan telah sesuai.
                    filedata = f.read() //digunakan untuk membaca file yang telah disimpan.
                    self.text.setHtml(filedata)  //digunakan untuk memasang file yang telah dibuka tadi kedalam lembar kerja.
                    f.close()  //digunakan untuk menutup file yang telah kita buka. Setelah sebelumnya kita masukkan ke dalam lembar kerja kita.
                except:  //kondisi yang akan dijalankan jika ‘try’ atau percobaan penjalanan code program di atas terdapat eror.
                    QtGui.QMessageBox.critical(self, "Kesalahan",
                                               self.tr("Maaf!! aplkasi Mn-Editor tidak bisa membuka file\n"
                                                       "yang telah anda pilih. yaitu '%s'\n"
                                                       "kemungkinan file telah rusak." % nama))  //4 baris code program di atas, digunakan untuk menampilkan pesan error jika code program ‘try’ terdapat sebuah error.

    def Save(self):  //digunakan untuk membuat metode dengan nama ‘Save’ yang akan di dunakan untuk menyimpan dokumen.
        filename = QtGui.QFileDialog.getSaveFileName(self, caption='Save File', filter='*;;*.mn')  //digunakan untuk memanggil sebuah fle dialog untuk memilih lokasi penyimpanan file serta langsung membuat sebuah file tersebut. Dan lokasi nya akan di simpan ke dalam variabel ‘filename’.
        if filename:  //digunakan untuk mengecek apakah variabel ‘filename’ tidak kosong. Yang artinya apakah user telah mimilih lokasi penyimpanan.
            file = QtCore.QFile(filename)  //digunakan untuk mendefinisikan sebuah file yang telah disimpan tadi.
            f = open(filename, 'w')  //digunakan untuk membuka file yang telah tersimpan tadi.
            filedata = self.text.toHtml()  //digunakan untuk mengambil semua data yang ada di lembar kerja.
            f.write(filedata)  //digunakan untuk memasukkan data dari lembar kerja ke dalam file yang telah di buat tadi.
            namaAwal = file.fileName()  //digunakan untuk mengambil nama file yang telah di buat tadi. Dan disimpan ke dalam variabel ‘namAwal’.

            jumlah = len(namaAwal)   //digunakan untuk menghitung jumlah karakter dari nama file. Dan disimpan ke dalam variabel ‘jumlah’.
            penentu = True  //digunakan untuk mendefinisikan variabel ‘penentu’ dengan nilai ‘True’.
            if len(namaAwal) > 3:  //mengecek apakah jumlah karakter dari nama file lebih dari 3 karakter.
                if namaAwal[jumlah - 1] == 'n':
                    if namaAwal[jumlah - 2] == 'm':
                        if namaAwal[jumlah - 3] == '.':
                            penentu = False
//4 baris code diatas fungsinya untuk mengecek ekstensi dari file yang akan kita buka nantinya... Variabel penentu akan bernilai true jika ekstensi nya tidak sesuai... Dan akan bernilai false jika ekstensi nya benar. Yaitu ‘.mn’.
            if penentu:  //mengecek apakah penentu bernilai ‘true’. Yang artinya mengecek apakah nama nya salah.
                file.rename(namaAwal, namaAwal + '.mn')  //digunakan untuk mengubah ekstensi file menjadi ‘.mn’ jika nama tidak sesuai.
            f.close()  //digunakan untuk menutup file


    def PageView(self):  //digunakan untuk membuat metode dengan nama’PageView’ yang digunakan untuk menampilkan window print preview.
        preview = QtGui.QPrintPreviewDialog()  //digunakan untuk menampilkan window print preview. Kemudian saa simpan ke dalam variabel ‘preview’.

        self.text.document().setDocumentMargin(0)  //digunakan untuk mengatur lembar kerja menjadi 0. Agar saat di print preview tidak di tambah dua kali margin nya.
        preview.printer().setPageMargins(self.marginSaatIni, self.marginSaatIni, self.marginSaatIni, self.marginSaatIni,
                                         QtGui.QPrinter.DevicePixel)  //digunakan untuk mengatur margin saat di print preview sesuai dengan angka yang sudah di set sebelumnya.
        preview.paintRequested.connect(self.PaintPageView)  //digunakan untuk memenggil metode dengan nama ‘PaintPageView’. Yang digunakan untuk memasukkan lembar kerja nya ke dalam window preview.
        preview.exec_()  //digunakan untuk menampilkan window preveiew nya,
        self.text.document().setDocumentMargin(self.marginSaatIni)  //digunakan untuk mengatur margin lembar kerja menjadi semula.

    def Print(self):  //digunakan untuk membuat metode dengan nama’Print’ yang digunakan untu mencetak dokumen nya.
        dialog = QtGui.QPrintDialog()  //digunakan untuk memanggil window settingan untuk print.
        if dialog.exec_() == QtGui.QDialog.Accepted:  //digunakan untuk mengecek apakah user menekan ok
            self.text.document().print_(dialog.printer())  //digunakan untuk mencetak dokumen yang telah kita buat.

    def setMargin(self):  //digunakan untuk membuat metode dengan nama ‘setMargin’ yang akan digunakan untuk menampilkan window pengatur margin.
        Margin(self)  //digunakan untuk menjalankan class untuk menampilkan mini window untuk menerima inputan pengatur margin lebar kerja kita.

    def marginDokumen(self, ukuran):  //digunakan untuk membuat metode dengan nama ‘marginDokumen’ yang akan digunakan untuk menirama kirimin angka nilai dari margin yang di set pada class ‘Margin’.
        self.marginSaatIni = ukuran  //digunakan untuk mengubah nilai variabel ‘marginSaatIni’ menjadi nilai yang di oper dari class margin atau mini window. Yaitu parameter dengan variabel ‘ukuran’.
        self.text.document().setDocumentMargin(ukuran)  //digunakan untuk mengatur ukuran margin dari lembar kerja.

    def PDF(self):  //digunakan untuk membuat metode dengan nama’PDF’ yang digunakan untuk mencetak dokumen menjadi PDF.
        printer = QtGui.QPrinter()  //mendefinisikan sebuah printer. Dan saya simpan ke dalam variabel ‘printer’.
        printer.setOutputFormat(printer.NativeFormat)  //digunakan untuk memformat hasil dari print nya.

        dialog = QtGui.QPrintDialog(printer)  //digunakan untuk mensetting printer.
        dialog.setOption(dialog.PrintToFile)  //digunakan untuk mencetak menjadi file
        if dialog.exec_() == QtGui.QDialog.Accepted:  //digunakan untuk mengecek apakah user memilih atau menekan ok.
            self.text.document().print_(dialog.printer())  //digunakan untuk mengeksekusi atau mencetak lembar kerja menjadi PDF.

    def PaintPageView(self, printer):  //digunakan untuk membuat metode dengan nama’PaintPageView’ yang digunakan untuk menampilkan window print preview.
        self.text.print_(printer)  //digunakan untuk menampilkan lembar kerja ke dalam window print preview.

    def Find(self):  //digunakan untuk membuat metode dengan nama ‘Find’ yang akan di jalankan ketika akan melakukan pencarian.
        global f  //untuk membuat variabel global dengan nama ‘f’.

        find = Find(self)  //digunakan untuk memanggil atau menjalankan class ‘Find’. Dan disimpan ke dalam variabel ‘find’.
        find.show()  //digunakan untuk menampilkan window class ‘Find’.

        def handleFind():  //digunakan untuk membuat metode dengan nama ‘handleFind’ yang digunakan untuk pencarian kata.
            f = find.te.toPlainText()  //digunakan untuk mengambil teks yang ada pada kolom teks pencarian di window ‘Find’. Dan disimpan ke dalam variabel ‘f’.
            if cs == True and wwo == False:  //digunakan untuk mengecek apakah ‘cs’ bernilai true dan ‘wwo’ bernilai false. Yang artinya mengecek apakah checkbox pada variabel ‘opt1’ tercentang dan pada variabel ‘opt2’ tidak tercentang.
                flag = QtGui.QTextDocument.FindBackward and QtGui.QTextDocument.FindCaseSensitively  //digunakan untuk membuat settingan dengan memperhatikan huruf besar dan kecil nya huruf. Atau case sensitive.

            elif cs == False and wwo == False:  //digunakan untuk mengecek apakah ‘cs’ bernilai false dan ‘wwo’ bernilai false. Yang artinya mengecek apakah checkbox pada variabel ‘opt1’  tidak tercentang dan pada variabel ‘opt2’ tidak tercentang.
                flag = QtGui.QTextDocument.FindBackward  //digunakan untuk membuat settingan pencarian dengan tanpa syarat.

            elif cs == False and wwo == True:  //digunakan untuk mengecek apakah ‘cs’ bernilai false dan ‘wwo’ bernilai true. Yang artinya mengecek apakah checkbox pada variabel ‘opt1’ tidak tercentang dan pada variabel ‘opt2’ tercentang.
                flag = QtGui.QTextDocument.FindBackward and QtGui.QTextDocument.FindWholeWords  //digunakan untuk membuat settingan dengan hanya mencari satu kata utuh saja.

            elif cs == True and wwo == True:  //digunakan untuk mengecek apakah ‘cs’ bernilai true dan ‘wwo’ bernilai true. Yang artinya mengecek apakah checkbox pada variabel ‘opt1’ tercentang dan pada variabel ‘opt2’ tercentang.
                flag = QtGui.QTextDocument.FindBackward and QtGui.QTextDocument.FindCaseSensitively and QtGui.QTextDocument.FindWholeWords  //digunakan untuk membuat settingan dengan memperhatikan huruf besar dan kecil nya huruf. Atau case sensitive. Dan dengan satu kata utuh saja.

            self.text.find(f, flag)  //digunakan untuk menandai atau memblok file yang ditemukan pada lembar kerja.

        def handleReplace(): //digunakan untuk membuat metode dengan nama ‘handleReplace’ yang akan digunakan untuk mengganti teks setelah mencari file.
            f = find.te.toPlainText()  //digunakan untuk mengambil teks yang ada pada kolom teks pencarian di window ‘Find’. Dan disimpan ke dalam variabel ‘f’.
            r = find.rp.toPlainText()  //digunakan untuk mengambil teks yang ada pada kolom teks untuk penggantian di window ‘Find’. Dan disimpan ke dalam variabel ‘fr.

            text = self.text.toPlainText()  //digunakan untuk mengambil teks pada lembar kerja dan disimpan ke dalam variabel ‘text’.

            newText = text.replace(f, r)  //digunakan untuk mengganti teks dan menuimpan hasilnya ke dalam variabel ‘newText’.

            self.text.clear()  //digunakan untuk menghapus teks pada lembar kerja.
            self.text.append(newText)  //memasukkan teks baru ke dalam lembar kerja.

        find.src.clicked.connect(handleFind)  //digunakan untuk mengjubungkan tombol ‘Find’ atau tombol  yang ada pada variabel ‘src’ untuk menjalankan metode dengan nama ‘handleFind’. Ketika tombol tersebut di klik.
        find.rpb.clicked.connect(handleReplace)  //digunakan untuk mengjubungkan tombol ‘Replace’ atau tombol  yang ada pada variabel ‘rpb’ untuk menjalankan metode dengan nama ‘handleReplace’. Ketika tombol tersebut di klik.

    def Undo(self):  //digunakan untuk membuat metode dengan nama ‘undo’ yang akan digunakan untuk undo.
        self.text.undo()  //digunakan untuk melakukan undo.

    def Redo(self):  //digunakan untuk membuat metode dengan nama ‘redo’ yang akan digunakan untuk redo.
        self.text.redo()  //digunakan untuk melakukan redo.

    def Cut(self):  //digunakan untuk membuat metode dengan nama ‘Cut’ yang akan digunakan untuk cut.
        self.text.cut()  //digunakan untuk melakukan perintah cut.

    def Copy(self):  //digunakan untuk membuat metode dengan nama ‘Copy’ yang akan digunakan untuk Copy.
        self.text.copy()  //digunakan untuk melakukan perintah copy.

    def Paste(self):  //digunakan untuk membuat metode dengan nama ‘Paste’ yang akan digunakan untuk paste.
        self.text.paste()  //digunakan untuk melakukan perintah paste.

    def DateTime(self):  //digunakan untuk membuat metode dengan nama ‘DateTime’ yang akan digunakan untuk menampilkan window penyisip jam.
        date = Date(self)  //digunakan untuk menjalankan class ‘Date’.
        date.show()  //digunakan untuk menampilkan mini window untuk menyisipkan waktu.

        date.ok.clicked.connect(self.insertDate)  //digunakan untuk menjalankan metode  dengan nama ‘insertDate’ ketika tombol ‘insert’ yang ada pada variabel ‘ok’ di klik. Tombol tersebut saya definisikan pada class ‘Date’.

    def insertDate(self):  //digunakan untuk membuat metode dengan nama ‘insertDate’ yang akan digunakan untuk menyisipkan jam.
        global choiceStr  //digunakan untuk memanggil variabel global dengan nama ‘choiceStr’.
        print(choiceStr)  //digunakn untuk mencetak nilai ‘choiceStr’. Saya lakukan hanya untuk mengecek saja.
        self.text.append(choiceStr)  //digunakan untuk menyisipkan format waktunya.

    def CursorPosition(self):  //digunakan untuk membuat metode dengan nama ‘CursorPosition’ yang akan digunakan untuk mengupdate posisi kolom dan baris pada statusbar.
        line = self.text.textCursor().blockNumber()  //memperoleh lokasi atau posisi baris kursor di lembar kerja. Dan ditampung ke dalam variabel ‘line’.
        col = self.text.textCursor().columnNumber()  //memperoleh lokasi atau posisi kolom kursor di lembar kerja. Dan ditampung ke dalam variabel ‘col.
        linecol = ("Line: " + str(line) + " | " + "Column: " + str(col))  //digunakan untuk membuat format tampilan kolom dan baris di status bar. Dan ditampung kedalam variabel ‘linecol’.
        self.status.showMessage(linecol)  //digunakan untuk menampilkan posisi kolom dan baris kursor pada lembar kerja dengan format yang telah dibuat.


    def FontFamily(self, font):  //digunakan untuk membuat metode dengan nama ‘fontFamily’ yang akan digunakan untuk mengubah jenis font.
        font = QtGui.QFont(self.jenisFont.currentFont())  //digunakan untuk mendapatkan font yang sudah kalian pilih. Dan disimpan ke dalam variabel ‘font’.
        self.text.setCurrentFont(font)  //digunakan untuk mengubah jenis font pada lembar kerja. Sesuai yang sudah dipilih sebelumnya.
        self.text.setFocus()  //digunakan untuk memfokuskan kursor kembali ke area kerja setelah kalian memilih jenis font.

    def FontSize(self, fsize):  //digunakan untuk membuat metode dengan nama ‘FontSize’ yang akan digunakan untuk mengubah ukuran font.
        size = (int(fsize)) //digunakan untuk mengambil nilai yang terpilih pada combobox ‘FontSize lalu di ubah tipe datanya menjadi integer. Menggunakan metode ‘int’’’(nilai).
        self.text.setFontPointSize(size) //digunakan untuk mengubah ukuran font pada lembar kerja sesai yang sudah kalian pilih.
        self.text.setFocus()  //digunakan untuk memfokuskan kursor kembali ke area kerja setelah kalian memilih ukuran font.

    def ubahWarna(self):  //digunakan untuk membuat metode dengan nama ‘ubahWarna’ yang akan digunakan untuk mengubah warna teks.
        c = QtGui.QColorDialog.getColor()  //digunakan untuk menampilkan window pemilih warna. Dan hasilnya akan disimpan ke dalam variabel ‘c’.
        self.warnaFont.setStyleSheet(
            'QPushButton {color: %s; font-weight:bold; text-decoration: underline; }' % c.name())  //digunakan untuk mengubah warna teks dari perintah ‘text’ ketika warna yang sudah di pilih.
        self.text.setTextColor(c)  //digunakan untuk mengubah warna teks di lembar kerja menjadi teks yang sudah terpilih.
        self.text.setFocus()  //digunakan agar yg terpilih adalah lembar kerja kembali saat kita mengklik toolbar  ‘text’  untuk mengubah warna. Silahkan hapus dan lihat perbedaannya kalau kurang paham.

    def ubahWarnaBackground(self):  //digunakan untuk membuat metode dengan nama ‘ubahWarnaBackground’ yang akan digunakan untuk mengubah warna background teks di lembar kerja.
        c = QtGui.QColorDialog.getColor()  //digunakan untuk menampilkan window pemilih warna. Dan hasilnya akan disimpan ke dalam variabel ‘c’.
        self.warnaBackground.setStyleSheet(
            'QPushButton {color: %s; font-weight:bold; text-decoration: underline; }' % c.name())  //digunakan untuk mengubah warna teks dari perintah ‘background’ ketika warna yang sudah di pilih.
        self.text.setTextBackgroundColor(c)  //digunakan untuk mengubah warna background teks di lembar kerja menjadi teks yang sudah terpilih.
        self.text.setFocus()  //digunakan agar yg terpilih adalah lembar kerja kembali saat kita mengklik toolbar  ‘text’  untuk mengubah warna background. Silahkan hapus dan lihat perbedaannya kalau kurang paham.

    def Bold(self):  //membuat sebuah metode dengan nama ‘bold’ dan berfungsi sebagai perintah untuk menebalkan teks atau menormalkan teks.
        w = self.text.fontWeight()  //digunakan untuk mengecek nilai dari font weight lalu ditampung ke dalam variabel ‘w’
        if w == 50:  //digunakan untuk mengecek nilai di dalam variabel ‘w’ apakah bernilai 50. Yang artinya mengecek apakah font tidak bernilai ‘bold’.
            self.text.setFontWeight(QtGui.QFont.Bold)  //digunakan untuk membuat teks menjadi tebal.
        elif w == 75:  //digunakan untuk mengecek apakah nilai dari variabel ‘w’ apakah bernilai 75. Yang artinya apakah font sedang tebal atau bold.
            self.text.setFontWeight(QtGui.QFont.Normal)  //digunakan untuk menormalkan teks yang tebal.

    def Italic(self):  //membuat sebuah metode dengan nama ‘Italic’ dan berfungsi sebagai perintah untuk memiringkan teks atau menormalkan teks.
        i = self.text.fontItalic()  //digunakan untuk mengecek teks berada di dalam kondisi ‘italic’ atau mirik. Yang akan bernilai false jika normal dan true jika italic. Dan ditampung ke dalam variabel ‘i’.

        if i == False:  //digunakan untuk mengecek apakah variabel 
‘i’ bernilai false. Yang aritnya apakah teks tidak sedang italic.
            self.text.setFontItalic(True)  //digunaka untuk membuat font menjadi italic atau miring
        elif i == True:  //digunakan untuk mengecek apakah variabel 
‘i’ bernilai true. Yang aritnya apakah teks sedang italic.
            self.text.setFontItalic(False)  //digunaka untuk membuat font menjadi tidak italic atau tidak miring. Dan bisa kita katakn untuk menormalkan teks.

    def Underl(self):  //membuat sebuah metode dengan nama ‘Underl’ dan berfungsi sebagai perintah untuk menggaris bawahi teks atau menormalkan teks.
        ul = self.text.fontUnderline()  //digunakan untuk mengecek teks berada di dalam kondisi ‘underline’ atau bergaris bawah. Yang akan bernilai false jika normal dan true jika begaris bawah. Dan ditampung ke dalam variabel ‘ul’.
        if ul == False:  //digunakan untuk mengecek apakah variabel 
‘ul’ bernilai false. Yang aritnya apakah teks tidak sedang bergaris bawah.
            self.text.setFontUnderline(True)  //digunakan untuk membuat teks bergaris bawah
        elif ul == True:  //digunakan untuk mengecek apakah variabel 
‘ul’ bernilai true. Yang aritnya apakah teks tidak sedang bergaris bawah.
            self.text.setFontUnderline(False)  //menormalkan teks. Atau membuat teks tidak bergaris bawah.

    def alignLeft(self):  //digunakan untuk membuat metode dengan nama ‘alignLeft’ untuk perintah perataan kiri.
        self.text.setAlignment(Qt.AlignLeft)  //digunakan untuk meratakan teks di kiri pada lembar kerja.

    def alignRight(self):  //digunakan untuk membuat metode dengan nama ‘alignRight’ untuk perintah perataan kanan.
        self.text.setAlignment(Qt.AlignRight)  //digunakan untuk meratakan teks di kanan pada lembar kerja.

    def alignCenter(self):  //digunakan untuk membuat metode dengan nama ‘alignCenter’ untuk perintah perataan tengah.
        self.text.setAlignment(Qt.AlignCenter)  //digunakan untuk meratakan teks di tengah pada lembar kerja.

    def alignJustify(self):  //digunakan untuk membuat metode dengan nama ‘alignJustify’ untuk perintah perataan kanan dan kiri.
        self.text.setAlignment(Qt.AlignJustify)  //digunakan untuk meratakan teks di kiri dan kanan pada lembar kerja.

    def BulletList(self):  //digunakan untuk membuat metode dengan nama ‘BulletList’ yang digunakan untuk membuat bullet.
        self.text.insertHtml("<ul><li> ...</li></ul>")  //digunakan untuk membuat bullet pada lembar kerja.

    def NumberedList(self):  //digunakan untuk membuat metode dengan nama ‘NumberingList’ yang digunakan untuk membuat Numbering.
        self.text.insertHtml("<ol><li> ...</li></ol>")  //digunakan untuk membuat Numbering pada lembar kerja.

    def exit(self):  //digunakan untuk membuat metode dengan nama ‘exit’. Yang akan digunakan untuk menjalankan perintah untuk menutup window.
        self.close()  //digunakan untuk menutup window.

    def closeEvent(self, event):  //membuat metode dengan nama ‘closEvent’ yang akan di jalankan ketika aplikasi kita close atau kita tutup.
        self.destroy()  //digunakan untuk menutup aplikasi.

def main():  //membuat metode dengan nama ‘main’ yang yang berisi untuk pembuatan window dan pemanggilan class utama.
    app = QtGui.QApplication(sys.argv)  //digunakna untuk mendefinisikan sebuah window aplikasi.
    main = Main()  //memanggil class dengan nama ‘Main’ yang sudah di buat di atas.
    main.show()  //menampilkan window di class ‘Main’ tersebut

    main.setGeometry(0, 0, 1000, 600)  //digunakan untuk menentukan posisi window saat muncul. Yang saya berikan pada posisi 0 0 layar monitor kalian. Dan dan lebar window sebesar 1000 dan tingginya 600.
    main.setWindowTitle('Dokumen Editor -> mn-belajarpython.blogspot.co.id')  //digunakan untuk mengubah judul dari window..

    screen = QtGui.QDesktopWidget().screenGeometry()   //digunakan untuk mendapatkan resolusi layar kalian.
    size = main.geometry()  //digunakan untuk mendapatkan ukuran layar aplikasi dokumen editor ini.
    main.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)  //memindahkan window aplikasi dokumen editor yang sebelumnya ada di posisi  0 0 ke bagian tengah layar kalian.

    main.text.setFocus()  //mengatur agar yang terpilih adalah kolom teks atau lembar kerja. Bukan elemen lain. 
    sys.exit(app.exec_())  //digunakan agar window tidak langsung close saat kita jalankan.

if __name__ == "__main__":  //memastikan agar code di bawah ini akan di jalankan pertama kali ketika file di eksekusi.

    main()  //digunakan untuk menjalankan metode dengan nama ‘main’ yang sudah di buat di atas.


nah itu dia temen - temen penjelasan dari code program diatas.. Semoga penjelasan yang sudah saya berikan tadi dapat sedikit membantu penjelasan code program untuk membuat aplikasi dokumen editor versi ke tiga belas kali ini ya...

Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu loh.. 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...




Dan itu dia temen - temen cara untuk membuat aplikasi dokumen editor yang sangat sederhana ini.. Semoga apa yang telah saya sampaikan di atas dapat memberikan manfaat bagi kalian yaa... Dan tentu saja saya harap dapat menjadikan referensi untuk membuat sebuah produk atau untuk belajar python..

Oke sampai disini dulu ya temen - temen bahasan pada postingan saya kali ini,, jangan lupa baca tutorial menarik lainnya ya.. Dan jangan lupa berkomentar atau berikan masukan atau kritikan kalian ya... Terimakasih.. Sampai jumpa di tutorial yang lainnya ya...

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