BelajarPython - Assalamualaikum wr. wb.
Jumpa lagi temen - temen... Kali ini, saya akan mengajak kalian untuk membuat aplikasi yang cuku unik nih.. Karena saya akan membuat sebuah aplikasi yang belum umum keberadaannya.. Langsung saja kita simak ya....
Namun, Aplikasi ini saya posting dengan berbagai versi.. Dengan penambahan fitur di tiap versinya.. Jika kalian ingin melihat versi - versi aplikasi ini, KALIAN BISA KLIK DISINI...
Ini adalah postingan versi ke 8. Dimana pada versi ini kita bisa menentukan tanggal kapan kita membuat file yang akan kita cari.
Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu.. sehingga, nantinya kita cukup klik dua kali saja untuk menjalankan aplikasi ini... tanpa perlu repot - repot membuka nya di IDLE atau IDE python.. nah seperti apa caranya? cukup mudah kok.. dan saya juga sudah membuatkan tutorialnya.. untuk kalian yang menggunakan windows, KALIAN BISA KLIK DISINI ya temen - temen.. atau jika pada link pertama terlalu rumit, KALIAN BISA MENCOBA CARA INI ya.... dan bagi pengguna linux ? tenang saja.. bisa juga kok membuat file executable nya.. untuk melihat tutorialnya, KALIAN BISA KLIK DISINI temen - temen...
Nah lalu, seperti apa tampilan yang di hasilkan dari code program di atas? Langsung saja yuk kita simak sama - sama tampilannya di bawah ini...
Nah itu dia temen - temen penjelasan code programnya.. Mohon maaf apabila ada penjelasan yang kurang jelas, atau bahkan ada kekeliruan... Mohon kasi pembenaran atau pendapat kalian di kolom komentar ya... Biar kita bisa belajar bersama..
Oke terimakasih dan sampai di sini dulu ya... Jangan lupa untuk membaca versi yang lain... Biar ilmunya nambah.. Hehe.. Temikasih sekali lagi dan sekian...
Wassalamualaikum wr. wb.
Jumpa lagi temen - temen... Kali ini, saya akan mengajak kalian untuk membuat aplikasi yang cuku unik nih.. Karena saya akan membuat sebuah aplikasi yang belum umum keberadaannya.. Langsung saja kita simak ya....
Pengenalan aplikasi yang akan kita buat.
Aplikasi yang akan kita buat kali ini adalah aplikasi pencari file.. Kalian mungkin belum pernah melihat aplikasi seperti ini.. Karena fungsi ini sudah ada di file browser.. Tapi saya membuat fungsi tersebut menjadi aplikasi mandiri...Namun, Aplikasi ini saya posting dengan berbagai versi.. Dengan penambahan fitur di tiap versinya.. Jika kalian ingin melihat versi - versi aplikasi ini, KALIAN BISA KLIK DISINI...
Ini adalah postingan versi ke 8. Dimana pada versi ini kita bisa menentukan tanggal kapan kita membuat file yang akan kita cari.
Rincian Lengkap Pencari File PySide Versi 8.0
Aplikasi ini menggunakan library PySide.. Jadi, untuk menjalankannya, harus install dulu (KLIK DISINI untuk install).... Dan berikut rincian lengkap versi ini..Nama | : mn-FileFind 8.0 |
Versi | : 8.0 || selanjutnya. |
Platform | : Python 3.x || Install. |
Modul | : PySide || Install. |
Baris Code | : +- 473 baris. |
Penambahan | : +-97 baris. |
Terdiri dari | : 1 class dan 25 metode. |
Fitur | : menentukan pencarian dengan rentan tanggal file di buat. |
Kelemahan | : Tidak ada koreksi input. |
syarat menjalankan | : Python 3.x, PySIde, dan editor teks / IDE. |
Cara menjalankan | : install python 3 dan PySide, copy paste code program pada editor/IDE, simpan dalam file python(ekstensi ‘.py’), lalu jalankan. |
Kalian juga bisa membuat code program ini menjadi file aplikasi loh.. iya file aplikasi seperti "exe" itu.. sehingga, nantinya kita cukup klik dua kali saja untuk menjalankan aplikasi ini... tanpa perlu repot - repot membuka nya di IDLE atau IDE python.. nah seperti apa caranya? cukup mudah kok.. dan saya juga sudah membuatkan tutorialnya.. untuk kalian yang menggunakan windows, KALIAN BISA KLIK DISINI ya temen - temen.. atau jika pada link pertama terlalu rumit, KALIAN BISA MENCOBA CARA INI ya.... dan bagi pengguna linux ? tenang saja.. bisa juga kok membuat file executable nya.. untuk melihat tutorialnya, KALIAN BISA KLIK DISINI temen - temen...
Code program aplikasi Pencari file versi 8.0
Nah lalu seperti apa code program versi ini ? Oke, Berikut saya berikan code program nya ya...from PySide import QtCore, QtGui import sys, os, subprocess class Window(QtGui.QMainWindow): def __init__(self, parent=None): super(Window, self).__init__(parent) self.setWindowTitle("Pecari File -> mn-belajarpython.blogspot.co.id") self.resize(700, 500) self.initUi() def initUi(self): self.buatTombol() self.buatTabel() self.buatCombobox() self.buatLabel() self.aturKomponen() self.setStatus(0) def buatTombol(self): self.browseButton = self.perintahTombol("&...", self.tentukanFolder) self.findButton = self.perintahTombol("&Find", self.cariFile) self.tombolDiakses = self.perintahTombol("&...", self.pilihTanggalAkses) self.tombolDibuat = self.perintahTombol("&...", self.pilihTanggalBuat) self.browseButton.setFixedSize(30, 20) self.tombolDibuat.setFixedSize(30, 20) self.tombolDiakses.setFixedSize(30, 20) def buatCombobox(self): self.lokasi = self.perintahComboBox(QtCore.QDir.currentPath()) self.nama = self.perintahComboBox("mn-belajarpython.co.id") self.tipe = QtGui.QComboBox() self.tipe.addItems(['jpg', 'png', 'txt', 'doc', 'docx', 'mp3', 'mp4', 'avi']) self.tipe.setEditable(True) self.ukuranAwal = self.perintahComboBox('0') self.ukuranAwal.setFixedSize(QtCore.QSize(110, 28)) self.ukuranAkhir = self.perintahComboBox('12000') self.ukuranAkhir.setFixedSize(QtCore.QSize(111, 28)) self.jenisUkuran = QtGui.QComboBox() self.jenisUkuran.addItems(['B', 'KB', 'MB', 'GB']) self.jenisUkuran.setFixedSize(40, 20) self.jenisUkuran.setFrame(False) tglSkrg = QtCore.QDateTime.currentDateTime() tgl = QtCore.QDate(int(tglSkrg.toString('yyyy')), int(tglSkrg.toString('M')), int(tglSkrg.toString('d'))) self.dibuatAwal = QtGui.QDateEdit() self.dibuatAkhir = QtGui.QDateEdit() self.dibuatAwal.setDate(tgl) self.dibuatAkhir.setDate(tgl) self.diaksesAwal = QtGui.QDateEdit() self.diaksesAkhir = QtGui.QDateEdit() self.diaksesAwal.setDate(tgl) self.diaksesAkhir.setDate(tgl) def buatLabel(self): self.teksLokasi = QtGui.QLabel(" Lokasi :") self.teksNama = QtGui.QCheckBox("Nama :") self.teksNama.stateChanged.connect(self.setStatus) self.teksTipe = QtGui.QCheckBox("Tipe : ") self.teksTipe.stateChanged.connect(self.setStatus) self.teksUkuran = QtGui.QCheckBox("Ukuran :") self.teksUkuran.stateChanged.connect(self.setStatus) self.teksDibuat = QtGui.QCheckBox('Dibuat :') self.teksDibuat.stateChanged.connect(self.setStatus) self.teksDiakses = QtGui.QCheckBox('Diakses :') self.teksDiakses.stateChanged.connect(self.setStatus) self.teksInfo = QtGui.QLabel() self.teksSampaiBuat = QtGui.QLabel("sampai") self.teksSampaiAkses = QtGui.QLabel("sampai") self.teksSampaiUkuran = QtGui.QLabel("sampai") def aturKomponen(self): buttonsLayout = QtGui.QHBoxLayout() buttonsLayout.addStretch() buttonsLayout.addWidget(self.findButton) buttonsLayout.addStretch() layoutTipe = QtGui.QHBoxLayout() layoutTipe.addWidget(self.tipe) layoutTipe.addStretch() layoutUkuran = QtGui.QHBoxLayout() layoutUkuran.addWidget(self.ukuranAwal) layoutUkuran.addWidget(self.teksSampaiUkuran) layoutUkuran.addWidget(self.ukuranAkhir) layoutUkuran.addWidget(self.jenisUkuran) layoutUkuran.addStretch() layoutTglBuat = QtGui.QHBoxLayout() layoutTglBuat.addWidget(self.dibuatAwal) layoutTglBuat.addWidget(self.teksSampaiBuat) layoutTglBuat.addWidget(self.dibuatAkhir) layoutTglBuat.addWidget(self.tombolDibuat) layoutTglBuat.addStretch() layoutTglAkses = QtGui.QHBoxLayout() layoutTglAkses.addWidget(self.diaksesAwal) layoutTglAkses.addWidget(self.teksSampaiAkses) layoutTglAkses.addWidget(self.diaksesAkhir) layoutTglAkses.addWidget(self.tombolDiakses) layoutTglAkses.addStretch() widgetTengah = QtGui.QWidget() mainLayout = QtGui.QGridLayout(widgetTengah) mainLayout.setColumnStretch(1,6) mainLayout.setRowStretch(7, 0) mainLayout.addWidget(self.teksLokasi, 0, 0) mainLayout.addWidget(self.lokasi, 0, 1, 1, 3) mainLayout.addWidget(self.browseButton, 0, 4) mainLayout.addWidget(self.teksNama, 1, 0) mainLayout.addWidget(self.nama, 1, 1, 1, 4) mainLayout.addWidget(self.teksTipe, 2, 0) mainLayout.addLayout(layoutTipe, 2, 1, 1, 4) mainLayout.addWidget(self.teksUkuran, 3, 0) mainLayout.addLayout(layoutUkuran, 3, 1, 1, 4) mainLayout.addWidget(self.teksDiakses, 4, 0) mainLayout.addLayout(layoutTglAkses, 4, 1, 1, 4) mainLayout.addWidget(self.teksDibuat, 5, 0) mainLayout.addLayout(layoutTglBuat, 5, 1, 1, 4) mainLayout.addWidget(self.filesTable, 7, 0, 2, 5) mainLayout.addWidget(self.teksInfo, 10, 0, 1 ,2) mainLayout.addLayout(buttonsLayout, 10, 0, 1, 5) mainLayout.setContentsMargins(4,5,4,2) self.setCentralWidget(widgetTengah) def tentukanFolder(self): directory = QtGui.QFileDialog.getExistingDirectory(self, "Find Files", QtCore.QDir.currentPath()) if directory: if self.lokasi.findText(directory) == -1: self.lokasi.addItem(directory) self.lokasi.setCurrentIndex(self.lokasi.findText(directory)) @staticmethod def updateComboBox(comboBox): if comboBox.findText(comboBox.currentText()) == -1: comboBox.addItem(comboBox.currentText()) def cariFile(self): self.filesTable.setRowCount(0) path = self.lokasi.currentText() file = self.dapatkanSemuaFile(path) self.updateComboBox(self.lokasi) self.updateComboBox(self.nama) self.updateComboBox(self.tipe) self.updateComboBox(self.ukuranAwal) self.updateComboBox(self.ukuranAkhir) self.tampilkanFile(file) def tampilkanFile(self, files): for i in range(len(files)) : file = QtCore.QFile(files[i][5]) size = QtCore.QFileInfo(files[i][5]).size() itemNo = QtGui.QTableWidgetItem(str(i+1)+'.') itemNo.setFlags(itemNo.flags() ^ QtCore.Qt.ItemIsEditable) fileNameItem = QtGui.QTableWidgetItem(self.penampungHasil[i][0]) fileNameItem.setFlags(fileNameItem.flags() ^ QtCore.Qt.ItemIsEditable) tipe = QtGui.QTableWidgetItem('.'+self.penampungHasil[i][1]) tipe.setFlags(tipe.flags() ^ QtCore.Qt.ItemIsEditable) sizeItem = QtGui.QTableWidgetItem("%d KB" % (int((size + 1023) / 1024))) sizeItem.setTextAlignment(QtCore.Qt.AlignVCenter) sizeItem.setFlags(sizeItem.flags() ^ QtCore.Qt.ItemIsEditable) akses = QtGui.QTableWidgetItem(self.penampungHasil[i][3].toString('d-M-yyyy')) akses.setFlags(akses.flags() ^ QtCore.Qt.ItemIsEditable) modif = QtGui.QTableWidgetItem(self.penampungHasil[i][4].toString('d-M-yyyy')) modif.setFlags(modif.flags() ^ QtCore.Qt.ItemIsEditable) lokasi = QtGui.QTableWidgetItem(self.penampungHasil[i][5]) lokasi.setFlags(lokasi.flags() ^ QtCore.Qt.ItemIsEditable) row = self.filesTable.rowCount() self.filesTable.insertRow(row) self.filesTable.setItem(row, 0, itemNo) self.filesTable.setItem(row, 1, fileNameItem) self.filesTable.setItem(row, 2, tipe) self.filesTable.setItem(row, 3, sizeItem) self.filesTable.setItem(row, 4, akses) self.filesTable.setItem(row, 5, modif) self.filesTable.setItem(row, 6, lokasi) self.teksInfo.setText("%d file(s) found (Double click on a file to open it)" % len(files)) def perintahTombol(self, text, member): button = QtGui.QPushButton(text) button.clicked.connect(member) return button def perintahComboBox(self, text=""): comboBox = QtGui.QComboBox() comboBox.setEditable(True) comboBox.addItem(text) comboBox.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) return comboBox def buatTabel(self): self.filesTable = QtGui.QTableWidget(0, 7) self.filesTable.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.filesTable.setHorizontalHeaderLabels(("No.", "Nama", "Tipe", "Ukuran", "Akses", "Dibuat", "Lokasi")) self.filesTable.horizontalHeader().setResizeMode(6, QtGui.QHeaderView.Stretch) self.filesTable.verticalHeader().hide() self.filesTable.setShowGrid(False) self.filesTable.setColumnWidth(0, 40) self.filesTable.setColumnWidth(2, 50) self.filesTable.setColumnWidth(3, 60) self.filesTable.setColumnWidth(4, 80) self.filesTable.setColumnWidth(5, 80) self.connect(self.filesTable, QtCore.SIGNAL('cellDoubleClicked(int, int)'),self.bukaFIle) def bukaFIle(self, row, column): item = self.penampungHasil[row][2] if sys.platform == 'win32': os.startfile('file://'+item) elif sys.platform == 'darwin': subprocess.Popen(['open', item]) else: try: os.system('xdg-open "%s"' %item) except : QtGui.QMessageBox.critical(self, "ERROR", "Maaf file tidak bisa di buka", QtGui.QMessageBox.Ok) def dapatkanSemuaFile(self, folderInti): cari = [folderInti] self.penampungHasil = [] penampungFolder = [] while len(cari) : for i in cari : files = QtCore.QDir(i).entryList(QtCore.QDir.Files | QtCore.QDir.NoSymLinks) folder = QtCore.QDir(i).entryList(QtCore.QDir.Dirs | QtCore.QDir.NoDotAndDotDot) path = QtCore.QDir(i).absolutePath() if files : for i in files : cek = self.cekKecocokan(path+'/'+i) if cek : file = cek nama = file.baseName() tipe = file.suffix() ukuran = file.size() akses = file.lastRead() modif = file.lastModified() lokasi = path+'/'+i self.penampungHasil.append([nama, tipe, ukuran, akses, modif, lokasi]) if folder : for i in folder: print(i) penampungFolder.append(path+'/'+i) print('==========') cari = penampungFolder penampungFolder = [] return self.penampungHasil def setStatus(self, status): self.nama.setEnabled(self.teksNama.isChecked()) self.tipe.setEnabled(self.teksTipe.isChecked()) self.ukuranAwal.setEnabled(self.teksUkuran.isChecked()) self.ukuranAkhir.setEnabled(self.teksUkuran.isChecked()) self.diaksesAwal.setEnabled(self.teksDiakses.isChecked()) self.diaksesAkhir.setEnabled(self.teksDiakses.isChecked()) self.tombolDiakses.setEnabled(self.teksDiakses.isChecked()) self.dibuatAwal.setEnabled(self.teksDibuat.isChecked()) self.dibuatAkhir.setEnabled(self.teksDibuat.isChecked()) self.tombolDibuat.setEnabled(self.teksDibuat.isChecked()) def cekKecocokan(self, file): path = file file = QtCore.QFileInfo(file) if self.teksNama.isChecked() : if not self.nama.currentText().lower() in file.baseName().lower(): file = None if self.teksTipe.isChecked() and file : if not self.tipe.currentText().lower() in file.suffix().lower(): file = None if self.teksUkuran.isChecked() and file : ukuran = file.size() ukuranCariAkhir = int(self.ukuranAkhir.currentText()) ukuranCariAwal = int(self.ukuranAwal.currentText()) if self.jenisUkuran.currentText()=='KB' : ukuranCariAwal *= 1000 ukuranCariAkhir *= 1000 elif self.jenisUkuran.currentText()=='MB' : ukuranCariAwal *= 1000000 ukuranCariAkhir *= 1000000 elif self.jenisUkuran.currentText()=='GB' : ukuranCariAwal *= 1000000 ukuranCariAkhir *= 1000000 if ukuran < ukuranCariAwal or ukuran > ukuranCariAkhir : file = None if self.teksDiakses.isChecked() and file : tahunAwal = int(self.diaksesAwal.date().toString('yy')) bulanAwal = int(self.diaksesAwal.date().toString('M')) hariAwal = int(self.diaksesAwal.date().toString('d')) tahunAkhir = int(self.diaksesAkhir.date().toString('yy')) bulanAkhir = int(self.diaksesAkhir.date().toString('M')) hariAkhir = int(self.diaksesAkhir.date().toString('d')) tahunFile = int(file.lastModified().toString('yy')) bulanFile = int(file.lastModified().toString('M')) hariFile = int(file.lastModified().toString('d')) if tahunFile < tahunAwal or tahunFile > tahunAkhir : file = None else: if bulanFile < bulanAwal or bulanFile > bulanAkhir : file = None else : if hariFile < hariAwal or hariFile > hariAkhir : file = None if self.teksDibuat.isChecked() and file : tahunAwal = int(self.dibuatAwal.date().toString('yy')) bulanAwal = int(self.dibuatAwal.date().toString('M')) hariAwal = int(self.dibuatAwal.date().toString('d')) tahunAkhir = int(self.dibuatAkhir.date().toString('yy')) bulanAkhir = int(self.dibuatAkhir.date().toString('M')) hariAkhir = int(self.dibuatAkhir.date().toString('d')) tahunFile = int(file.lastRead().toString('yy')) bulanFile = int(file.lastRead().toString('M')) hariFile = int(file.lastRead().toString('d')) if tahunFile < tahunAwal or tahunFile > tahunAkhir: file = None else: if bulanFile < bulanAwal or bulanFile > bulanAkhir: file = None else: if hariFile < hariAwal or hariFile > hariAkhir: file = None return file def pilihTanggalAkses(self): self.windowTanggalAkses = QtGui.QDialog(self) mainLayout = QtGui.QVBoxLayout() layoutTanggal = QtGui.QHBoxLayout() layoutTombol = QtGui.QHBoxLayout() self.tanggalAksesAwal = QtGui.QCalendarWidget() self.tanggalAksesAwal.selectionChanged.connect(self.tanggalAksesBerubahAwal) layoutTanggal.addWidget(self.tanggalAksesAwal) teksSampai = QtGui.QLabel("sampai") layoutTanggal.addWidget(teksSampai) self.tanggalAksesAkhir = QtGui.QCalendarWidget() self.tanggalAksesAkhir.selectionChanged.connect(self.tanggalAksesBerubahAkhir) self.tanggalAksesAkhir.setMinimumDate(self.tanggalAksesAwal.selectedDate()) layoutTanggal.addWidget(self.tanggalAksesAkhir) self.teksInfo1Akses = QtGui.QLabel(self.tanggalAksesAwal.selectedDate().toString("dd - MMMM - yyyy")) tombol = QtGui.QPushButton("Selesai") tombol.clicked.connect(self.tanggalAkses) self.teksInfo2Akses = QtGui.QLabel(self.tanggalAksesAkhir.selectedDate().toString("dd - MMMM - yyyy")) layoutTombol.addStretch() layoutTombol.addWidget(self.teksInfo1Akses) layoutTombol.addStretch() layoutTombol.addWidget(tombol) layoutTombol.addStretch() layoutTombol.addWidget(self.teksInfo2Akses) layoutTombol.addStretch() mainLayout.addLayout(layoutTanggal) mainLayout.addLayout(layoutTombol) self.windowTanggalAkses.setLayout(mainLayout) self.windowTanggalAkses.show() def tanggalAkses(self): self.diaksesAwal.setDate(self.tanggalAksesAwal.selectedDate()) self.diaksesAkhir.setDate(self.tanggalAksesAkhir.selectedDate()) self.windowTanggalAkses.close() def tanggalAksesBerubahAwal(self): self.teksInfo1Akses.setText(self.tanggalAksesAwal.selectedDate().toString("dd - MMMM - yyyy")) self.tanggalAksesAkhir.setMinimumDate(self.tanggalAksesAwal.selectedDate()) def tanggalAksesBerubahAkhir(self): self.teksInfo2Akses.setText(self.tanggalAksesAkhir.selectedDate().toString("dd - MMMM - yyyy")) def pilihTanggalBuat(self): self.windowTanggalBuat = QtGui.QDialog(self) mainLayout = QtGui.QVBoxLayout() layoutTanggal = QtGui.QHBoxLayout() layoutTombol = QtGui.QHBoxLayout() self.tanggalBuatAwal = QtGui.QCalendarWidget() self.tanggalBuatAwal.selectionChanged.connect(self.tanggalBuatBerubahAwal) layoutTanggal.addWidget(self.tanggalBuatAwal) teksSampai = QtGui.QLabel("sampai") layoutTanggal.addWidget(teksSampai) self.tanggalBuatAkhir = QtGui.QCalendarWidget() self.tanggalBuatAkhir.selectionChanged.connect(self.tanggalBuatBerubahAkhir) self.tanggalBuatAkhir.setMinimumDate(self.tanggalBuatAwal.selectedDate()) layoutTanggal.addWidget(self.tanggalBuatAkhir) self.teksInfo1Buat = QtGui.QLabel(self.tanggalBuatAwal.selectedDate().toString("dd - MMMM - yyyy")) tombol = QtGui.QPushButton("Selesai") tombol.clicked.connect(self.tanggalBuat) self.teksInfo2Buat = QtGui.QLabel(self.tanggalBuatAkhir.selectedDate().toString("dd - MMMM - yyyy")) layoutTombol.addStretch() layoutTombol.addWidget(self.teksInfo1Buat) layoutTombol.addStretch() layoutTombol.addWidget(tombol) layoutTombol.addStretch() layoutTombol.addWidget(self.teksInfo2Buat) layoutTombol.addStretch() mainLayout.addLayout(layoutTanggal) mainLayout.addLayout(layoutTombol) self.windowTanggalBuat.setLayout(mainLayout) self.windowTanggalBuat.show() def tanggalBuat(self): self.dibuatAwal.setDate(self.tanggalBuatAwal.selectedDate()) self.dibuatAkhir.setDate(self.tanggalBuatAkhir.selectedDate()) self.windowTanggalBuat.close() def tanggalBuatBerubahAwal(self): self.teksInfo1Buat.setText(self.tanggalBuatAwal.selectedDate().toString("dd - MMMM - yyyy")) self.tanggalBuatAkhir.setMinimumDate(self.tanggalBuatAwal.selectedDate()) def tanggalBuatBerubahAkhir(self): self.teksInfo2Buat.setText(self.tanggalBuatAkhir.selectedDate().toString("dd - MMMM - yyyy")) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
Nah lalu, seperti apa tampilan yang di hasilkan dari code program di atas? Langsung saja yuk kita simak sama - sama tampilannya di bawah ini...
Penjelasan code program Aplikasi Pembuka Foto PySide versi 8.0
Sekarang saya akan mencoba untuk menjelaskan code program yang sudah saya bagikan di atas tadi.. Agar kalian lebih mudah untuk memahaminya.. Oke, Langsung saja..[NOTE : Teks berwarna MERAH pada penjelasan adalah Code tambahan yang tidak ada di versi sebelumnya. Dan yang Berwarna BIRU akan di hapus di versi berikutnya. Jika Code berwarna MERAH dan komentar berwarna BIRU maka merupakan code baru dan akan di hapus di versi berikutnya]
from PySide import QtCore, QtGui //import class QtCore dan QtGui
import sys, os, subprocess //import class sys, os, dan subprocess
class Window(QtGui.QMainWindow): //membuat class ‘window’ dengan menurunkan class ‘QmainWindow’
def __init__(self, parent=None): //membuat construktor class ‘Window’
super(Window, self).__init__(parent) //menjalankan construktor class parent (QMainWindow)
self.setWindowTitle("Pecari File -> mn-belajarpython.blogspot.co.id") //mengubah judul
self.resize(700, 500) //mengubah ukuran window
self.initUi() //menjalankan metode ‘initUi’
def initUi(self): //metode ‘initUi’
self.buatTombol() //menjalankan metode ‘buatTombol’
self.buatTabel() //menjalankan metode ‘buatTabel’
self.buatCombobox() //menjalankan metode ‘buatCombobox’
self.buatLabel() //menjalankan metode ‘buatLabel’
self.aturKomponen() //menjalankan metode ‘aturKomponen’
self.setStatus(0) //menjalankan metode ‘setStatus’
def buatTombol(self): //metode ‘buatTombol’
self.browseButton = self.perintahTombol("&...", self.tentukanFolder) //membuat perintah pencari folder. Yang akan menjalankan metode ‘tentukanFolder’ jika diklik
self.findButton = self.perintahTombol("&Find", self.cariFile) //membuat perintah ‘Find’ dan menjalankan ‘cariFile’ jika di klik
self.tombolDiakses = self.perintahTombol("&...", self.pilihTanggalAkses) //membuat tombol untuk menampilkan window pemilih tanggal
self.tombolDibuat = self.perintahTombol("&...", self.pilihTanggalBuat) //membuat tombol pemilih tanggal dibuat. Yang akan menjalankan metode ‘pilihTanggalBuat’
self.browseButton.setFixedSize(30, 20) //mengubah ukuran tombol ‘browseButton’ (pemilih folder)
self.tombolDiakses.setFixedSize(30, 20) //mengubah ukuran tombol
self.tombolDiakses.setFixedSize(30, 20) //mengubah ukuran tombol untuk memilih tanggal di buat
def buatCombobox(self): //metode ‘buatCombobox’
self.lokasi = self.perintahComboBox(QtCore.QDir.currentPath()) //menjalankan metode ‘perintahComboBox’
self.nama = self.perintahComboBox("mn-belajarpython.co.id") //membuat kolom teks nama
self.tipe = QtGui.QComboBox() //membuat comboBox
self.tipe.addItems(['jpg', 'png', 'txt', 'doc', 'docx', 'mp3', 'mp4', 'avi']) //menambah item comboBox ‘tipe’
self.tipe.setEditable(True) //mebuat combobox bisa di edit
self.ukuranAwal = self.perintahComboBox('0') //membuat combobox. Dengan nilai awal 0
self.ukuranAwal.setFixedSize(QtCore.QSize(110, 28)) //mengubah ukuran combobox
self.ukuranAkhir = self.perintahComboBox('12000') //membuat cobobox ukuran akhir. Dengan nilai awal `12000’
self.ukuranAkhir.setFixedSize(QtCore.QSize(111, 28)) //mengubah ukuran combobox ukuran akhir
self.jenisUkuran = QtGui.QComboBox() //membuat combobox
self.jenisUkuran.addItems(['B', 'KB', 'MB', 'GB']) //menambahkan item combobox
self.jenisUkuran.setFixedSize(40, 20) //mengubah ukuran combobox
self.jenisUkuran.setFrame(False) //menghilangkan frame combobox
tglSkrg = QtCore.QDateTime.currentDateTime() //mendapatkan tgl sekarang
tgl = QtCore.QDate(int(tglSkrg.toString('yyyy')), int(tglSkrg.toString('M')), int(tglSkrg.toString('d'))) //mengubah format tanggal sekarang
self.dibuatAwal = QtGui.QDateEdit() //membuat kolom input tanggal buat 1. (Awal)
self.dibuatAkhir = QtGui.QDateEdit() //membuat kolom input tanggal buat 2. (Akhir)
self.dibuatAwal.setDate(tgl) //memasukkan nilai tanggal sekarnga pada kolom input tanggal 1 (awal)
self.dibuatAkhir.setDate(tgl) //memasukkan nilai tanggal sekarnga pada kolom input tanggal 2 (akhir)
self.diaksesAwal = QtGui.QDateEdit() //membuat kolom dare/tanggal
self.diaksesAkhir = QtGui.QDateEdit() //membuat kolom dare/tanggal
self.diaksesAwal.setDate(tgl) //mengubah isian menjadi tanggal hari ini
self.diaksesAkhir.setDate(tgl) //mengubah isian menjadi tanggal hari ini
def buatLabel(self): //metode ‘buatLabel’
self.teksLokasi = QtGui.QLabel(" Lokasi :") //membuat label ‘Lokasi’
self.teksNama = QtGui.QCheckBox("Nama :") //membuat checkbox (teks nama)
self.teksNama.stateChanged.connect(self.setStatus) //menghubungkan checkbox ‘teksNama’ untuk menjalankan metode ‘setStatus’ ketika di centang maupun tidak
self.teksTipe = QtGui.QCheckBox("Tipe : ") //membuat checkbox ‘tipe’
self.teksTipe.stateChanged.connect(self.setStatus) //menjalankan metode ‘setStatus’ ketika checkBox ‘teksTIpe’ (tipe) di centang atau tidak
self.teksUkuran = QtGui.QCheckBox("Ukuran :") //membuat checkbox ukuran
self.teksUkuran.stateChanged.connect(self.setStatus) //menjalankan metode ‘setStatus’ jika ada perubahan
self.teksDibuat = QtGui.QCheckBox('Dibuat :') //membuat checkbox tanggal dibuat file
self.teksDibuat.stateChanged.connect(self.setStatus) //menjalankanmetode ‘setStatus’ jika ada perubahan pada checkbox penyaring tanggal dibuat
self.teksDiakses = QtGui.QCheckBox('Diakses :') //membuat chekbox tanggal di akses
self.teksDiakses.stateChanged.connect(self.setStatus) //menjalankan metode ‘setStatus’ jika ada perubahan
self.teksInfo = QtGui.QLabel() //membuat label dengan teks koson
g
self.teksSampaiUkuran = QtGui.QLabel("sampai") //membuat labe(teks)l sampai
self.teksSampaiUkuran = QtGui.QLabel("sampai") //membuat labe(teks)l sampai
self.teksSampaiUkuran = QtGui.QLabel("sampai") //membuat tekx/label ‘sampai’
def aturKomponen(self): //metode ‘aturKomponen’
buttonsLayout = QtGui.QHBoxLayout() //membuat layout Tombol
buttonsLayout.addStretch() //membuat stretch (bisa membesar/mengecil saat window di perbesar/perkecil)
buttonsLayout.addWidget(self.findButton) //memasukkan tombol ‘find’
buttonsLayout.addStretch() //membuat stretch (bisa membesar/mengecil saat window di perbesar/perkecil)
layoutTipe = QtGui.QHBoxLayout() //membuat layout ‘tipe
layoutTipe.addWidget(self.tipe) //memasukkan comboBox ‘tipe’ ke dalam ‘layoutTipe’
layoutTipe.addStretch() //menambahkan ‘stretch’ *bisa memanjang atau memendek saat window di kecilkan/dibesarkan’
layoutUkuran = QtGui.QHBoxLayout() //membuat ‘layoutUkuran’
layoutUkuran.addWidget(self.ukuranAwal) //memasukkan combobox ukuranAwal
layoutUkuran.addWidget(self.teksSampaiUkuran) //memasukkan teks/label ‘sampai’
layoutUkuran.addWidget(self.ukuranAkhir) //memasukkan kolom ‘ukuranAkhir’ kedalam layout
layoutUkuran.addWidget(self.jenisUkuran) //memasukkan combobox jenis ukuran
layoutUkuran.addStretch() //memasukkan stretch “akan memanjang/mengecil jika window di ubah ukuran”
layoutTglBuat = QtGui.QHBoxLayout() //membuat layout untuk tanggal di buat
layoutTglBuat.addWidget(self.dibuatAwal) //memasukkan kolom tanggal dibuat 1 (awal) ke ‘layoutTglBuat’
layoutTglBuat.addWidget(self.teksSampaiBuat) //memasukkan teks ‘sampai’ ke ‘layoutTglBuat’
layoutTglBuat.addWidget(self.dibuatAkhir) //memasukkan kolom tanggal dibuat 2 (akhir) ke ‘layoutTglBuat’
layoutTglBuat.addWidget(self.tombolDibuat) //memasukkan tombol pemilih tanggal ‘dibuat’ ke ‘layoutTglBuat’ ke ‘layoutTglBuat’
layoutTglBuat.addStretch() //memasukkan stretch “akan memanjang/mengecil jika window di ubah ukuran”
layoutTglAkses = QtGui.QHBoxLayout() //membuat layout kolom tanggal
layoutTglAkses.addWidget(self.diaksesAwal) //memasukkan kolom di akses
layoutTglAkses.addWidget(self.teksSampaiAkses) //memasukkan teks sampai
layoutTglAkses.addWidget(self.diaksesAkhir) //memasukkan kolom akses ke dua
layoutTglAkses.addWidget(self.tombolDiakses) //memasukkan tombol pemilih tanggal
layoutTglAkses.addStretch() //memasukkan stretch “akan memanjang/mengecil jika window di ubah ukuran”
widgetTengah = QtGui.QWidget() //insisialisasi widget
mainLayout = QtGui.QGridLayout(widgetTengah) //membuat Layout utama
mainLayout.setColumnStretch(1,6) //membuat stretch (bisa membesar/mengecil saat window di perbesar/perkecil)
mainLayout.setRowStretch(7, 0) //membuat stretch (bisa membesar/mengecil saat window di perbesar/perkecil)
mainLayout.addWidget(self.teksLokasi, 0, 0) //memasukkan label ‘teksLokasi’ ke dalam window
mainLayout.addWidget(self.lokasi, 0, 1, 1, 3) //memasukkan comboBox ‘lokasi’ (penampil path folder) ke dalam window
mainLayout.addWidget(self.browseButton, 0, 4) //memasukkan tombol ‘brows’ (pemilih folder) ke dalam window
mainLayout.addWidget(self.teksNama, 1, 0) //memasukkan teksNama (checkbox Nama) ke dalam window
mainLayout.addWidget(self.nama, 1, 1, 1, 4) //memasukkan kolom ‘nama’ ke dalam window
mainLayout.addWidget(self.teksTipe, 2, 0) //memasukkan checkbox ‘teksTIpe’ layout utama
mainLayout.addLayout(layoutTipe, 2, 1, 1, 4) //memasukkan ‘layoutTipe’ ke dalam layout utama
mainLayout.addWidget(self.teksUkuran, 3, 0) //memasukkan checkbox ‘teksUkuran’
mainLayout.addLayout(layoutUkuran, 3, 1, 1, 4) //memasukkan ‘layoutUkuran’
mainLayout.addWidget(self.teksDiakses, 4, 0) //memasukkan checkbox tanggal di akses ke main layout
mainLayout.addLayout(layoutTglAkses, 4, 1, 1, 4) //memasukkan layout tanggal ke main layout
mainLayout.addWidget(self.teksDibuat, 5, 0) //memasukkan checkbox untuk tanggal dibuat
mainLayout.addLayout(layoutTglBuat, 5, 1, 1, 4) //memasukkan layout tanggal di buat
mainLayout.addWidget(self.filesTable, 7, 0, 2, 5) //memasukkan tabel (menampilkan daftar file) ke dalam window
mainLayout.addWidget(self.teksInfo, 10, 0, 1 ,2) //memasukkan label ‘teksInfo’ (jumlah hasil file) ke dalam window
mainLayout.addLayout(buttonsLayout, 10, 0, 1, 5) //memasukkan ‘layoutTombol’ ke dalam window
mainLayout.setContentsMargins(4,5,4,2) //mengatur margin agar tampilan lebih bagus
self.setCentralWidget(widgetTengah) //memsukkan widget tengah
def tentukanFolder(self): //metode ‘tentukanFolder’
directory = QtGui.QFileDialog.getExistingDirectory(self, "Find Files",
QtCore.QDir.currentPath()) //menampilkan file dialog pemilih folder
if directory: //memastikan user klik ‘ok’ (memilih folder’
if self.lokasi.findText(directory) == -1: //memastikan path/folder belum di tambahkan ke dalam combobox ‘lokasi’
self.lokasi.addItem(directory) //menambahkan path/folder ke dalam combobox ‘lokasi’ jika tidak ada
self.lokasi.setCurrentIndex(self.lokasi.findText(directory)) //mengatur agar folder yang sudah dipilih menjadi yang terpilih di combobox ‘lokasi’
@staticmethod //mengatur agar menjadi static
def updateComboBox(comboBox): //metode update combobox
if comboBox.findText(comboBox.currentText()) == -1: //mengecek apakah folder/path yang di pilih user tidak ada di dalam item ‘combobox’
comboBox.addItem(comboBox.currentText()) //menambahkan path/folder ke dalam combobox ‘lokasi’ jika tidak ada
def cariFile(self): //metode ‘cariFile’
self.filesTable.setRowCount(0) //mengatur perhitungan tabel menjadi 0
path = self.lokasi.currentText() //mendapatkan folder yang terpilih
file = self.dapatkanSemuaFile(path) //menjalanan metode ‘dapatkanSemuaFile’
self.updateComboBox(self.lokasi) //menjalankan metode ‘UpdateComboBox’ dengan memasukkan lokasi path
self.updateComboBox(self.nama) //memanggil metode ‘updateComboBox’ dengan memasukkan parameter nilai var ‘nama’
self.updateComboBox(self.tipe) //menjalankan metode ‘updatComboBox’
self.updateComboBox(self.ukuranAwal) //memanggil metode ‘updateComboBox’ dengan memasukkan parameter nilai var ‘ukuranAwal’
self.updateComboBox(self.ukuranAkhir) //memanggil metode ‘updateComboBox’ dengan memasukkan parameter nilai var ‘ukuranAkhir’
self.tampilkanFIle(file) //menjalankan metode ‘tampilkanFIle’ dengan parameter nilai variabel ‘file’
def tampilkanFile(self, files): //metode ‘tampilkanFIle’
for i in range(len(files)) : //melakukan perulangan sebanyak file yang telah di peroleh
file = QtCore.QFile(files[i][5]) //memanggil class ‘QFIle’ dengan memasukkan path file sebagai parameter
size = QtCore.QFileInfo(files[i][5]).size() //mendapatkan ukuran file
itemNo = QtGui.QTableWidgetItem(str(i+1)+'.') //mendefinisikan nomer urut file di tabel
itemNo.setFlags(itemNo.flags() ^ QtCore.Qt.ItemIsEditable) //membuat kolom ‘no.’ agar tidak bisa di edit
fileNameItem = QtGui.QTableWidgetItem(self.penampungHasil[i][0]) //mendapatkan nama file
fileNameItem.setFlags(fileNameItem.flags() ^ QtCore.Qt.ItemIsEditable) //membuat kolom ‘nama file’ agar tidak bisa di edit
tipe = QtGui.QTableWidgetItem('.'+self.penampungHasil[i][1]) //membuat cell dengan memberi isi tipe file
tipe.setFlags(tipe.flags() ^ QtCore.Qt.ItemIsEditable) //membuat cell/kolom tipe agar tidak bisa di edit
sizeItem = QtGui.QTableWidgetItem("%d KB" % (int((size + 1023) / 1024))) //mendapatkan ukuran file
sizeItem.setTextAlignment(QtCore.Qt.AlignVCenter) //membuat teks ukuran agar ada di tengah
sizeItem.setFlags(sizeItem.flags() ^ QtCore.Qt.ItemIsEditable) //membuat kolom ‘ukuran’ agar tidak bisa di edit
akses = QtGui.QTableWidgetItem(self.penampungHasil[i][3].toString('d-M-yyyy')) //inisialisasi kolom dan isi dariwaktu terakhir di akses
akses.setFlags(akses.flags() ^ QtCore.Qt.ItemIsEditable) //membuat kolom terakhir di akses tidak bisa di edit
modif = QtGui.QTableWidgetItem(self.penampungHasil[i][4].toString('d-M-yyyy')) //inisialisasi kolom dan isi dar iwaktu terakhir di edit
modif.setFlags(modif.flags() ^ QtCore.Qt.ItemIsEditable) //membuat kolom terakhir waktu terakhir di edit agar tidak bisa di edit.
lokasi = QtGui.QTableWidgetItem(self.penampungHasil[i][5]) //inisialisasi kolom dan isi dari lokasi file
lokasi.setFlags(lokasi.flags() ^ QtCore.Qt.ItemIsEditable) //membuat kolom agar tidak bisa di edit
row = self.filesTable.rowCount() //mendapatkan total baris tabel
self.filesTable.insertRow(row) //memasukkan baris baru di paling akhir
self.filesTable.setItem(row, 0, itemNo) //memasukkan no. file
self.filesTable.setItem(row, 1, fileNameItem) //memasukkan nama file
self.filesTable.setItem(row, 2, tipe) //memasukkan ti pe file
self.filesTable.setItem(row, 3, sizeItem) //memasukkan ukuran file
self.filesTable.setItem(row, 4, akses) //memasukkan terakhir di akses
self.filesTable.setItem(row, 5, modif) //memasukkan waktu terakhir di edit
self.filesTable.setItem(row, 6, lokasi) //memasukkan lokasi file
self.teksInfo.setText("%d file(s) found (Double click on a file to open it)" % len(files)) //menampilkan teks (mengubah teksinfo) dengan menampilkan total file yg di temukan
def perintahTombol(self, text, member): //metode ‘perintahTomol’ (pembuat tombol’
button = QtGui.QPushButton(text) //membuat tombol
button.clicked.connect(member) //menghubungkan tombol dengan nilai (parameter) ‘member’
return button //mengembalikan tombol
def perintahComboBox(self, text=""): //metode ‘perintahComboBox’ (pembuatCombobox)
comboBox = QtGui.QComboBox() //membuat combobox
comboBox.setEditable(True) //membuat combobox agar bisa di edit
comboBox.addItem(text) //memasukkan item combobbox
comboBox.setSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Preferred) //mengatur ukuran
return comboBox //mengembalikan combobox
def buatTabel(self): //metode ‘buatTabel’
self.filesTable = QtGui.QTableWidget(0, 3) //membuat tabel
self.filesTable.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) //agar saat di pilih salah satu colom, maka semua kolom dlm satu bari terpilih
self.filesTable.setHorizontalHeaderLabels(("No.", “Nama”, "Tipe", "Ukuran", "Akses", "Dibuat", "Lokasi")) //menambahkan judul di tabel
self.filesTable.horizontalHeader().setResizeMode(6, QtGui.QHeaderView.Stretch) //agar bisa memanjang sendiri jika teks panjang
self.filesTable.verticalHeader().hide() //menyembunyikan judl samping tabel
self.filesTable.setShowGrid(False) //agar tidak menampilkan garis kolom
self.filesTable.setColumnWidth(0, 40) //mengatur ukuran kolom 0 (urutan 1)
self.filesTable.setColumnWidth(2, 60) //mengatur ukuran kolom 2 (urutan 3)
self.filesTable.setColumnWidth(3, 60) //mengatur ukuran kolom 3 (urutan 4)
self.filesTable.setColumnWidth(4, 80) //mengatur ukuran kolom 4 (urutan 5)
self.filesTable.setColumnWidth(5, 80) //mengatur ukuran kolom 5 (urutan 6)
self.connect(self.filesTable, QtCore.SIGNAL('cellDoubleClicked(int, int)'),self.bukaFIle) //membuat perintah untuk menjalankan ‘bukaFile’ jika baris tabel (daftar file) di klik dua kali
def bukaFIle(self, row, column): //metode ‘bukaFile’
item = self.penampungHasil[row][2] //mendapatkan path/lokasi file
if sys.platform == 'win32': //mengecek apkah di jalankan di os windows
os.startfile('file://'+item) //membuka file
elif sys.platform == 'darwin': //mengecek apakah di jalankan di Mac os
subprocess.Popen(['open', item]) //membuka file
else: //jika tidak di jalankan di Mac os atau Windows
try: //mencoba code program
os.system('xdg-open "%s"' %item) //membuka file
except : //jika terjadi error
QtGui.QMessageBox.critical(self, "ERROR",
"Maaf file tidak bisa di buka",
QtGui.QMessageBox.Ok) //menampilkan pesan error
def dapatkanSemuaFile(self, folder): //metod ‘dapatkanSemuaFile’
cari = [folderInti] //menampung folder yang akan di cari file nya
self.penampungHasil = [] //mendefinisikan list kosong
penampungFolder = [] //membuat penampung folder jika ada subfolder
while len(cari) : //melakukan perulangan selama variabel ‘cari’ ada isinya
for i in cari : //melakukan perulangan sebanyak item di variabel ‘cari’
files = QtCore.QDir(folder).entryList(QtCore.QDir.Files | QtCore.QDir.NoSymLinks) //mendapatkan semua file di direktori yg telah di tentukan
folder = QtCore.QDir(i).entryList(QtCore.QDir.Dirs | QtCore.QDir.NoDotAndDotDot) //mendapatkan subfolder
path = QtCore.QDir(folder).absolutePath() //mendapatkan lokasi folder
if files : //mengecek dan memastikan ada file di folder yang di pilih
for i in files : //melakukan perulangan sebanyak file yang ada di folder
cek = self.cekKecocokan(path+'/'+i) //memanggil metode ‘kecocokan’ dengan memasukkan lokasi file
if cek : //memastikan nilai kembalian di dalam var ‘cek’ tidak kosong
file = QtCore.QFileInfo(path+'/'+i) //memanggil class ‘QfileInfo’ dengan memasukkan lokasi file
nama = file.fileName() //mendapatkan nama file
tipe = file.suffix() //mendapatkan ekstensi file
ukuran = file.size() //mendapatkan ukuran file
akses = file.lastRead() //mendapatkan tgl terakhir di baca
modif = file.lastModified() //mendapatkan tgl terakhir di edit
lokasi = path+'/'+i //mendapatkan lokasi file
self.penampungHasil.append([nama, ukuran, lokasi]) //memasukkan nama, ukuran dan lokasi file ke dalam ‘penampungHasil’
if folder : //memastikan variabel ‘folder’ tidak kosong
for i in folder: //melakukan perulangan sebanyak item di ‘folder’ (banyak nya sub folder)
print(i) //mencetak subfolder (hanya untuk pengecekan. Silahkan hapus)
penampungFolder.append(path+'/'+i) //menampung lokasi sub folder (memasukkan ke ‘penampungFolder’)
print('==========') //mencetak garis saja
cari = penampungFolder //mengambil nilai ‘penampungFolder’
penampungFolder = [] //mengosongkan variabel ‘penampung folder’
return self.penampungHasil //mengembalikan penampungHasil
def setStatus(self, status): //digunakan untuk menghidupkan atau mematikan opsi pencarian
self.nama.setEnabled(self.teksNama.isChecked()) //mematikan atau menghidupkan pencarian ‘nama’
self.tipe.setEnabled(self.teksTipe.isChecked()) //mematikan atau menghidupkan combobox ‘tipe’
self.ukuranAwal.setEnabled(self.teksUkuran.isChecked()) //mematikan/menghidupkan combobox awal (hidup jika di checkbox ‘teksUkuran’ di centang)
self.ukuranAkhir.setEnabled(self.teksUkuran.isChecked()) //mematikan/menghidupkan combobox akhir (hidup jika di checkbox ‘teksUkuran’ di centang)
self.diaksesAwal.setEnabled(self.teksDiakses.isChecked()) //mematikan/menghidupkan combobox tanggal di akses pertama (hidup jika di checkbox ‘teks di akses’ di centang)
self.diaksesAkhir.setEnabled(self.teksDiakses.isChecked()) //mematikan/menghidupkan combobox tanggal di akses kedua (hidup jika di checkbox ‘teks di akses’ di centang)
self.tombolDiakses.setEnabled(self.teksDiakses.isChecked()) //mematikan/menghidupkan tombol pemilih tanggal (hidup jika di checkbox ‘teks di akses’ di centang)
self.dibuatAwal.setEnabled(self.teksDibuat.isChecked()) //mematikan/menghidupkan kolom tanggal dibuat 1/awal (hidup jika di checkbox ‘dibuat’ di centang)
self.dibuatAkhir.setEnabled(self.teksDibuat.isChecked()) //mematikan/menghidupkan kolom tanggal dibuat akhir/2 (hidup jika di checkbox ‘dibuat’ di centang)
self.tombolDibuat.setEnabled(self.teksDibuat.isChecked()) //mematikan/menghidupkan tombol pemilih tanggal dibuat (hidup jika di checkbox ‘dibuat’ di centang)
def cekKecocokan(self, file): //metode untuk mecocokkan file
path = file //menampung lokasi/path file
file = QtCore.QFileInfo(file) //memanggil class ‘QFileInfo’ dengan memasukkan nilai variabel ‘file’ sebagai parameter
if self.teksNama.isChecked() : //memastikan kolom nama tercentang
if not self.nama.currentText().lower() in file.baseName().lower(): //mengecek nama di kolom nama apakah tidak ada di dalam nama file
file = None //mengembalikan kosongan jika tidak cocok
if self.teksTipe.isChecked() and file : //memastikan tekstipe tercentang dan variabel ‘file’ tidak kosong (bukan None)
if not self.tipe.currentText().lower() in file.suffix().lower(): //mengecek apakah tipe file dengan tipe di combobox tidak cocok
file = None //mengubah nilai variabel ‘file’ menjadi ‘None’ jika tidak cocok
if self.teksUkuran.isChecked() and file : //memastikan teksUkuran di chek dan ‘file’ tidak kosong
ukuran = file.size() //mendapatkan ukuran file
ukuranCariAkhir = int(self.ukuranAkhir.currentText()) //mendapatkan nilai combo box ‘ukuranAkhir'
ukuranCariAwal = int(self.ukuranAwal.currentText()) //mendapatkan nilai combo box ‘ukuranAwal'
if self.jenisUkuran.currentText()=='KB' : //mengecek apakah tipe nya adalah KB (combobox tipe yg terpilh adalah KB)
ukuranCariAwal *= 1000 //mengalikan 1.000 pada nilai di kolom ‘ukuranAwal’
ukuranCariAkhir *= 1000 //mengalikan 1.000 pada nilai di kolom ‘ukuranAkhir’ (efek KB)
elif self.jenisUkuran.currentText()=='MB' : //mengecek apakah tipe nya adalah MB (combobox tipe yg terpilh adalah MB)
ukuranCariAwal *= 1000000 //mengalikan 1.000.000 pada nilai di kolom ‘ukuranAwal(efek MB)
ukuranCariAkhir *= 1000000 //mengalikan 1.000.000 pada nilai di kolom ‘ukuranAkhir’ (efek MB)
elif self.jenisUkuran.currentText()=='GB' : //mengecek apakah tipe nya adalah GB (combobox tipe yg terpilh adalah GB)
ukuranCariAwal *= 1000000 //mengalikan 1.000.000.000 pada nilai di kolom ‘ukuranAwal(efek GB)
ukuranCariAkhir *= 1000000 //mengalikan 1.000.000.000 pada nilai di kolom ‘ukuranAkhir’ (efek GB)
if ukuran < ukuranCariAwal or ukuran > ukuranCariAkhir : //mengecek apakah ukuran file tidak ada di rentan ukuran awal dan akhir
file = None //mengubah nilai file menjadi ‘none’ jika tidak ada di rentan ukuran awal dan akhir
if self.teksDiakses.isChecked() and file : //memastikan checkbox ‘teksDiakses’ tercentang dan variabel ‘file’ tidak none
tahunAwal = int(self.diaksesAwal.date().toString('yy')) //mendapatkan tahun kolom diakses 1
bulanAwal = int(self.diaksesAwal.date().toString('M')) //mendapatkan bulan kolom diakses 1
hariAwal = int(self.diaksesAwal.date().toString('d')) //mendapatkan tangggal kolom diakses 1
tahunAkhir = int(self.diaksesAkhir.date().toString('yy')) //mendapatkan tahun kolom diakses 2
bulanAkhir = int(self.diaksesAkhir.date().toString('M')) //mendapatkan bulan kolom diakses 2
hariAkhir = int(self.diaksesAkhir.date().toString('d')) //mendapatkan tanggal kolom diakses 2
tahunFile = int(file.lastModified().toString('yy')) //mendapatkan tahun file terakhir di akses
bulanFile = int(file.lastModified().toString('M')) //mendapatkan bulan file terakhir di akses
hariFile = int(file.lastModified().toString('d')) //mendapatkantanggal file terakhir di akses
if tahunFile < tahunAwal or tahunFile > tahunAkhir : //mengecek apakah tahun file tidak ada di rentan tahun di kolom akses 1 dan 2
file = None //mengubah menjadi none jika tidak ada di rentan tahun kolom 1 dan 2
else: //jika ada di rentan tahun
if bulanFile < bulanAwal or bulanFile > bulanAkhir : //mengecek apakah tahun file tidak ada di rentan bulan di kolom akses 1 dan 2
file = None //mengubah menjadi none jika tidak ada di rentan bulan kolom 1 dan 2
else : //jika ada di rentan bulan kolom 1 dan 2
if hariFile < hariAwal or hariFile > hariAkhir : //mengecek apakah hari file tidak ada di rentan bulan di kolom akses 1 dan 2
file = None //mengubah menjadi none jika tidak ada di rentan hari kolom 1 dan 2
if self.teksDibuat.isChecked() and file : //mengecek apakah checkbox ‘dibuat’ tercentang dan ‘file’ tidak bernilai ‘None’
tahunAwal = int(self.dibuatAwal.date().toString('yy')) //mendapatkan tahun awal pada kolom tanggal dibuat 1/awal
bulanAwal = int(self.dibuatAwal.date().toString('M')) //mendapatkan bulan awal pada kolom tanggal dibuat 1/awal
hariAwal = int(self.dibuatAwal.date().toString('d')) //mendapatkan tanggal awal pada kolom tanggal dibuat 1/awal
tahunAkhir = int(self.dibuatAkhir.date().toString('yy')) //mendapatkan tahun akhir pada kolom tanggal dibuat 2/akhir
bulanAkhir = int(self.dibuatAkhir.date().toString('M')) //mendapatkan bulan akhir pada kolom tanggal dibuat 2/akhir
hariAkhir = int(self.dibuatAkhir.date().toString('d')) //mendapatkan tanggal akhir pada kolom tanggal dibuat 2/akhir
tahunFile = int(file.lastRead().toString('yy')) //mendapatkan tahun file dibuat
bulanFile = int(file.lastRead().toString('M')) //mendapatkan bulan file dibuat
hariFile = int(file.lastRead().toString('d')) //mendapatkan tanggal file dibuat
if tahunFile < tahunAwal or tahunFile > tahunAkhir: //mengecek apakah tahun file tidak ada di rentan tahun kolom input tanggal 1/awal dan tahun kolom input tanggal 2/akhir
file = None //merubah menjadi None tahun di buat file ada di rentan tahun kolom input tanggal 1 dan 2
else: //apa bila tahun di buat file ada di rentan tahun kolom input tanggal 1 dan 2
if bulanFile < bulanAwal or bulanFile > bulanAkhir: //mengecek apakah bulan file tidak ada di rentan bulan kolom input tanggal 1/awal dan bulan kolom input tanggal 2/akhir
file = None //apa bila bulan di buat file ada di rentan nulan kolom input tanggal 1 dan 2
else: //apa bila tahun di buat file ada di rentan bulan kolom input tanggal 1 dan 2
if hariFile < hariAwal or hariFile > hariAkhir: //mengecek apakah tanggal file tidak ada di rentan tahun kolom input tanggal 1/awal dan tanggal kolom input tanggal 2/akhir
file = None //apa bila tanggal di buat file ada di rentan tanggal kolom input tanggal 1 dan 2
return file //mengembalikan file kembali jika cocok
def pilihTanggalAkses(self): //metode ‘pilihTanggalAkses’
self.windowTanggalAkses = QtGui.QDialog(self) //window barun (window pemilih tanggal)
mainLayout = QtGui.QVBoxLayout() //membuat main layout window pemilih tanggal
layoutTanggal = QtGui.QHBoxLayout() //membuat layout tanggal
layoutTombol = QtGui.QHBoxLayout() //membuat layout tombol
self.tanggalAksesAwal = QtGui.QCalendarWidget() //membuat tanggal 1 (awal)
self.tanggalAksesAwal.selectionChanged.connect(self.tanggalAksesBerubahAwal) //menjalankan metode ‘tanggalAksesBerubahAwal’ jika pilihan tanggal 1 berubah
layoutTanggal.addWidget(self.tanggalAksesAwal) //memasukkan tanggal 1 (awal) ke layout tanggal
teksSampai = QtGui.QLabel("sampai") //membuat teks/label (sampai)
layoutTanggal.addWidget(teksSampai) //memasukkan teks/label sampaik e layout tanggal
self.tanggalAksesAkhir = QtGui.QCalendarWidget() //membuat tanggal 2 (akhir)
self.tanggalAksesAkhir.selectionChanged.connect(self.tanggalAksesBerubahAkhir) //menjalankan metode ‘tanggalAksesBerubahAkhir’ jika pilihan tanggal 2 berubah
self.tanggalAksesAkhir.setMinimumDate(self.tanggalAksesAwal.selectedDate()) //membuat minimal pemilihan tanggal 2. (harus di atas tanggal 1)
layoutTanggal.addWidget(self.tanggalAksesAkhir) //memasukkan tanggal 2 (akhir) ke layout tanggal
self.teksInfo1Akses = QtGui.QLabel(self.tanggalAksesAwal.selectedDate().toString("dd - MMMM - yyyy")) //membuat label sesuai tanggal terpilih (tanggal 1/awal)
tombol = QtGui.QPushButton("Selesai") //membuat tombol ‘selesai’
tombol.clicked.connect(self.tanggalAkses) //menjalankan metode ‘tanggalAkses’ jika tombol ‘selesai’ di klik
self.teksInfo2Akses = QtGui.QLabel(self.tanggalAksesAkhir.selectedDate().toString("dd - MMMM - yyyy")) //membuat label sesuai tanggal terpilih (tanggal 2/akhir)
layoutTombol.addStretch() //menambahkan strecth (space yg akan membesar/mengecil sesuai ukuran window)
layoutTombol.addWidget(self.teksInfo1Akses) //memasukkan teks info tanggal yang dipilih 1 (awal)
layoutTombol.addStretch() //menambahkan strecth (space yg akan membesar/mengecil sesuai ukuran window)
layoutTombol.addWidget(tombol) //memasukkan tombol selesai ke layou tombol
layoutTombol.addStretch() //menambahkan strecth (space yg akan membesar/mengecil sesuai ukuran window)
layoutTombol.addWidget(self.teksInfo2Akses) //memasukkan teks info tanggal yang dipilih 2 (akhir)
layoutTombol.addStretch() //menambahkan strecth (space yg akan membesar/mengecil sesuai ukuran window)
mainLayout.addLayout(layoutTanggal) //memasukkan ‘layoutTangga’ ke layout utama
mainLayout.addLayout(layoutTombol) //memasukkan layout tombol ke layout utama
self.windowTanggalAkses.setLayout(mainLayout) //memasukkan layout utama ke dalam window
self.windowTanggalAkses.show() //menampilkan wiindow
def tanggalAkses(self): //metode ‘tanggalAkses’
self.diaksesAwal.setDate(self.tanggalAksesAwal.selectedDate()) //mengubah isian kolom tanggal 1 (awal) sesuai tanggal yang terpilih pada pemilih tanggal 1 (awal) di window
self.diaksesAkhir.setDate(self.tanggalAksesAkhir.selectedDate()) //mengubah isian kolom tanggal 2 (akhir) sesuai tanggal yang terpilih pada pemilih tanggal 2 (akhir) di window
self.windowTanggalAkses.close() //menutup window ‘tanggalAkses’
def tanggalAksesBerubahAwal(self): //metode ‘tanggalAksesBerubahAwal’
self.teksInfo1Akses.setText(self.tanggalAksesAwal.selectedDate().toString("dd - MMMM - yyyy")) //mengubah teks info sesuai tanggal terpilih pada pemilih tanggal 1 (AWAL)
self.tanggalAksesAkhir.setMinimumDate(self.tanggalAksesAwal.selectedDate()) //mengubah minimum tanggal pada pemilih tanggal 2/akhir (minimal sama dengan pemilih tanggal 1 (awal))
def tanggalAksesBerubahAkhir(self): //metode ‘tanggalAksesBerubahAkhir’
self.teksInfo2Akses.setText(self.tanggalAksesAkhir.selectedDate().toString("dd - MMMM - yyyy")) //mengubah teks info sesuai tanggal terpilih pada pemilih tanggal 2 (AKHIR)
92
def pilihTanggalBuat(self): //metode ‘pilihTanggalBuat’
self.windowTanggalBuat = QtGui.QDialog(self) //membuat window untuk pemilih tanggal di buat
mainLayout = QtGui.QVBoxLayout() //membuat ‘layoutUtama’
layoutTanggal = QtGui.QHBoxLayout() //membuat ‘layoutTanggal’ /kalender
layoutTombol = QtGui.QHBoxLayout() //membuat ‘layoutTombol’
self.tanggalBuatAwal = QtGui.QCalendarWidget() //membuat ‘calender’/pemilih tanggal 1
self.tanggalBuatAwal.selectionChanged.connect(self.tanggalBuatBerubahAwal) //menjalankan metode ‘tanggalBuatBerubaAwal’ jika user memilih tanggal (awal/1)
layoutTanggal.addWidget(self.tanggalBuatAwal) //memasukkan calender 1 ke layout tanggal
teksSampai = QtGui.QLabel("sampai") //membuat teks/label ‘sampai’
layoutTanggal.addWidget(teksSampai) //memaukkan teks/label ‘sampai’ ke layout tanggal
self.tanggalBuatAkhir = QtGui.QCalendarWidget() //membuat ‘calender’/pemilih tanggal 2
self.tanggalBuatAkhir.selectionChanged.connect(self.tanggalBuatBerubahAkhir) //menjalankan metode ‘tanggalBuatBerubaAkhir’ jika user memilih tanggal (akhir/2)
self.tanggalBuatAkhir.setMinimumDate(self.tanggalBuatAwal.selectedDate()) //menentukan batas pemilihan tanggal di kalender 2. (minimal sama dengan pilihan di calender 1)
layoutTanggal.addWidget(self.tanggalBuatAkhir) //memasukkan calender 2 ke layout tanggal
self.teksInfo1Buat = QtGui.QLabel(self.tanggalBuatAwal.selectedDate().toString("dd - MMMM - yyyy")) //membuat teks yang menampilkan tanggal terpilih pada calender 1
tombol = QtGui.QPushButton("Selesai") //membuat tombol selesai
tombol.clicked.connect(self.tanggalBuat) //menjalankan metode ‘tanggalBuat’ jika tombol selesai di klik
self.teksInfo2Buat = QtGui.QLabel(self.tanggalBuatAkhir.selectedDate().toString("dd - MMMM - yyyy")) //membuat teks yang menampilkan tanggal terpilih pada calender 2
layoutTombol.addStretch() //membuat stretch (ruang kosong yang dapat membesar/mengecil sesuai ukuran window)
layoutTombol.addWidget(self.teksInfo1Buat) //memasukkan teks yang menampilkan tanggal terpilih calender 1 ke layout tombol
layoutTombol.addStretch() //membuat stretch (ruang kosong yang dapat membesar/mengecil sesuai ukuran window)
layoutTombol.addWidget(tombol) //memasukkan tombol selesai ke layoutTombol
layoutTombol.addStretch() //membuat stretch (ruang kosong yang dapat membesar/mengecil sesuai ukuran window)
layoutTombol.addWidget(self.teksInfo2Buat) //memasukkan teks yang menampilkan tanggal terpilih calender 2 ke layout tombol
layoutTombol.addStretch() //membuat stretch (ruang kosong yang dapat membesar/mengecil sesuai ukuran window)
mainLayout.addLayout(layoutTanggal) //memasukkan layout tanggal ke layout utama
mainLayout.addLayout(layoutTombol) //memasukkan layout tombol ke layout utama
self.windowTanggalBuat.setLayout(mainLayout) //memasukkan layout utama ke dalam window pemilih tanggal di buat
self.windowTanggalBuat.show() //menampilkan window pemilih tanggal di buat
def tanggalBuat(self): //metode tanggalBuat
self.dibuatAwal.setDate(self.tanggalBuatAwal.selectedDate()) //memasukkan tanggal terpilih di calender 1 ke dalam kolom input tanggal 1
self.dibuatAkhir.setDate(self.tanggalBuatAkhir.selectedDate()) //memasukkan tanggal terpilih di calender 2 ke dalam kolom input tanggal 2
self.windowTanggalBuat.close() //menutup window pemilih tanggal buat
def tanggalBuatBerubahAwal(self): //metode tanggalBuatBerubaAwal
self.teksInfo1Buat.setText(self.tanggalBuatAwal.selectedDate().toString("dd - MMMM - yyyy")) //mengubah/update teks info yang menampilkan tanggal terpilih di calender 1 sesuai tanggal terpilih
self.tanggalBuatAkhir.setMinimumDate(self.tanggalBuatAwal.selectedDate()) //mengubah minimal pemilihan calender 2. (minimal sama dengan tanggal terpilih di calender 1)
def tanggalBuatBerubahAkhir(self): //metode ‘tanggalBuatBerubahAkhir’
self.teksInfo2Buat.setText(self.tanggalBuatAkhir.selectedDate().toString("dd - MMMM - yyyy")) //mengubah/update teks info yang menampilkan tanggal terpilih di calender 2 sesuai tanggal terpilih
if __name__ == '__main__': //code yg akan di jalankan pertama kali
app = QtGui.QApplication(sys.argv) //mendefinisikan aplikasi
window = Window() //menjalankan clas ‘window’
window.show() //menampilkan window class ‘Window’
sys.exit(app.exec_()) //agar tidak langsung clos saat di jalankan
Nah itu dia temen - temen penjelasan code programnya.. Mohon maaf apabila ada penjelasan yang kurang jelas, atau bahkan ada kekeliruan... Mohon kasi pembenaran atau pendapat kalian di kolom komentar ya... Biar kita bisa belajar bersama..
Oke terimakasih dan sampai di sini dulu ya... Jangan lupa untuk membaca versi yang lain... Biar ilmunya nambah.. Hehe.. Temikasih sekali lagi dan sekian...
Wassalamualaikum wr. wb.
ConversionConversion EmoticonEmoticon