BelajarPython - Assalamualaikum wr. wb.
Jumpa lagi sahabat python.. Pada kesempatan kali ini saya akan mengajak kalian membuat aplikasi screenshoot nih.. Seperti apa? Langsung saja di simak ya...
Aplikasi ini saya posting dengan berbagai versi.. Dengan penambahan fitur di tiap versinya.. Jika kalian ingin melihat semua versi aplikasi ini, KLIK DISINI ya...
Kali ini, saya akan memberikan versi ke 4. Dimana pada versi ini saya akan menambahkan fitur selection screenshoot.. Dimaan kita bisa menentukan lebar dan ukuran area yang ingin kita potret... Seperti aplikasi snipping tools di windows..
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 sahabat python.. Pada kesempatan kali ini saya akan mengajak kalian membuat aplikasi screenshoot nih.. Seperti apa? Langsung saja di simak ya...
Pengenalan aplikasi yang akan kita buat.
Aplikasi yang kita buat kali ini adalah aplikasi screenshoot yang sudah tidak asing lagi.. Dimana aplikasi ini berfungsi untuk memotret layar PC kalian untuk di jadikan sebagai file gambar...Aplikasi ini saya posting dengan berbagai versi.. Dengan penambahan fitur di tiap versinya.. Jika kalian ingin melihat semua versi aplikasi ini, KLIK DISINI ya...
Kali ini, saya akan memberikan versi ke 4. Dimana pada versi ini saya akan menambahkan fitur selection screenshoot.. Dimaan kita bisa menentukan lebar dan ukuran area yang ingin kita potret... Seperti aplikasi snipping tools di windows..
Rincian Lengkap Screenshoot PySide Versi 5.0
Aplikasi ini menggunakan library PySide.. Jadi, untuk menjalankannya, harus install dulu (KLIK DISINI untuk install).... Dan berikut rincian lengkap versi ini..Nama | : mn-Screenshoot 5.0 |
Versi | : 5.0 || selanjutnya. |
Platform | : Python 3.x || Install. |
Modul | : PySide || Install. |
Baris Code | : +- 265 baris. |
Penambahan | : +-128 baris. |
Terdiri dari | : 2 class dan 24 metode. |
Fitur | : Selection screenshoot. |
Kelemahan | : tidak bisa corat coret pada hasil screenshoot. |
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 Screenshoot versi 5.0
Nah lalu seperti apa code program versi ini ? Oke, Berikut saya berikan code program nya ya...from PySide import QtCore, QtGui class AreaKanvas(QtGui.QWidget): def __init__(self, parent=None, gambar=None): super(AreaKanvas, self).__init__(parent) self.parent = parent self.rectTerakhir = None self.setAttribute(QtCore.Qt.WA_StaticContents) self.diKlik = False self.diPindah = False self.myPenWidth = 1 self.myPenColor = QtCore.Qt.blue self.image = QtGui.QImage() self.lastPoint = QtCore.QPoint() screen = QtGui.QDesktopWidget().screenGeometry() self.setFixedSize(screen.width(), screen.height()) self.showFullScreen() self.gambar = gambar self.masukanGambar(gambar) self.showFullScreen() def resizeEvent(self, event): if self.width() > self.image.width() or self.height() > self.image.height(): newWidth = max(self.width() + 128, self.image.width()) newHeight = max(self.height() + 128, self.image.height()) self.resizeImage(self.image, QtCore.QSize(newWidth, newHeight)) self.update() super(AreaKanvas, self).resizeEvent(event) def resizeImage(self, image, newSize): if image.size() == newSize: return newImage = QtGui.QImage(newSize, QtGui.QImage.Format_RGB32) newImage.fill(QtGui.qRgb(255, 25, 255)) painter = QtGui.QPainter(newImage) painter.drawImage(QtCore.QPoint(0, 0), image) self.image = newImage def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: self.lastPoint = event.pos() self.diKlik = True self.awalX = event.pos().x() self.awalY = event.pos().y() def mouseMoveEvent(self, event): if (event.buttons() & QtCore.Qt.LeftButton) and self.diKlik: self.diPindah = True self.masukanGambar(self.gambar) self.drawLineTo(event.pos()) self.update() def mouseReleaseEvent(self, event): if event.button() == QtCore.Qt.LeftButton and self.diKlik and self.diPindah: self.diKlik = False self.diPindah = False self.akhirX = event.pos().x() self.akhirY = event.pos().y() self.kirimArea() self.close() def paintEvent(self, event): painter = QtGui.QPainter(self) painter.drawImage(QtCore.QPoint(0, 0), self.image) def drawLineTo(self, endPoint): painter = QtGui.QPainter(self.image) painter.setPen(QtGui.QPen(self.myPenColor, self.myPenWidth, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin)) if self.rectTerakhir : painter.eraseRect(self.rectTerakhir) rectangle = QtCore.QRectF(self.awalX, self.awalY, endPoint.x()-self.awalX, endPoint.y()-self.awalY) poligon = QtGui.QPolygonF(rectangle) painter.drawPolyline(poligon) def kirimArea(self): if self.awalX > self.akhirX: if self.awalY > self.akhirY: self.parent.tangkapArea(self.akhirX+1, self.akhirY+1, self.awalX - self.akhirX -1, self.awalY - self.akhirY-1) else: self.parent.tangkapArea(self.akhirX+1, self.awalY+1, self.awalX - self.akhirX-1, self.akhirY - self.awalY-1) else: if self.awalY > self.akhirY: self.parent.tangkapArea(self.awalX+1, self.akhirY+1, self.akhirX - self.awalX-1, self.awalY - self.akhirY-1) else: self.parent.tangkapArea(self.awalX+1, self.awalY+1, self.akhirX - self.awalX-1, self.akhirY - self.awalY-1) def masukanGambar(self, gambar): painter = QtGui.QPainter(self.image) painter.setPen(QtGui.QPen(self.myPenColor, self.myPenWidth, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin)) screen = QtGui.QDesktopWidget().screenGeometry() painter.drawPixmap(0, 0, gambar) class Screenshot(QtGui.QWidget): def __init__(self): super(Screenshot, self).__init__() self.buatTombol() self.tempatHasil = QtGui.QLabel() self.tempatHasil.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.tempatHasil.setAlignment(QtCore.Qt.AlignCenter) self.mainLayout = QtGui.QVBoxLayout() self.setScroll() self.buaPengaturan() self.mainLayout.addLayout(self.layoutTombol) self.setLayout(self.mainLayout) self.jeda.setValue(1) self.sudahDisimpan = True self.setWindowTitle("Screenshos -> mn-belajarpython.blogspot.co.id") self.resize(300, 30) self.mainLayout.setContentsMargins(0, 0, 0, 0) def setScroll(self): # mengatur scroll self.scrollArea = QtGui.QScrollArea() self.scrollArea.setWidget(self.tempatHasil) self.scrollArea.setBackgroundRole(QtGui.QPalette.Mid) self.scrollArea.setAlignment(QtCore.Qt.AlignCenter) self.mainLayout.addWidget(self.scrollArea) self.scrollArea.setMinimumSize(700, 400) self.scrollArea.hide() screen = QtGui.QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2) def screenshootBaru(self): if self.sembunyikan.isChecked(): self.hide() self.window.setDisabled(True) QtCore.QTimer.singleShot(self.jeda.value() * 1000, self.tangkapLayar) self.sudahDisimpan = False def saveScreenshot(self): format = 'png' initialPath = QtCore.QDir.currentPath() + "/untitled." + format fileName,_ = QtGui.QFileDialog.getSaveFileName(self, "Save As", initialPath, "%s Files (*.%s);;All Files (*)" % (format.upper(), format)) if fileName: self.hasil.save(fileName, format) self.sudahDisimpan =False def tangkapLayar(self): QtGui.qApp.beep() self.hasil = None self.hasil = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId()) self.salinan = self.hasil self.updateGambar() self.window.setDisabled(False) if self.sembunyikan.isChecked(): self.show() self.simpan.setEnabled(True) self.pilih.setEnabled(True) def updateCheckBox(self): if self.jeda.value() == 0: self.sembunyikan.setDisabled(True) else: self.sembunyikan.setDisabled(False) def buaPengaturan(self): self.jeda = QtGui.QSpinBox() self.jeda.setSuffix("s") self.jeda.setMaximum(9) self.jeda.setFixedSize(40,20) self.jeda.valueChanged.connect(self.updateCheckBox) self.jedaLabel = QtGui.QLabel("Tunda :") self.sembunyikan = QtGui.QCheckBox("Sembunyikan") layoutPengaturan = QtGui.QHBoxLayout() layoutPengaturan.addWidget(self.jedaLabel) layoutPengaturan.addWidget(self.jeda) layoutPengaturan.addWidget(self.sembunyikan) self.layoutTombol.addLayout(layoutPengaturan) self.sembunyikan.setChecked(True) def buatTombol(self): self.window = self.perintahTombol("Tangkap", self.screenshootBaru) self.simpan = self.perintahTombol("Simpan",self.saveScreenshot) self.pilih = self.perintahTombol("Potong", self.pilihSebagian) self.layoutTombol = QtGui.QHBoxLayout() self.layoutTombol.addStretch() self.layoutTombol.addWidget(self.window) self.layoutTombol.addWidget(self.pilih) self.layoutTombol.addWidget(self.simpan) self.layoutTombol.setContentsMargins(4,0,4,4) self.simpan.setEnabled(False) self.pilih.setEnabled(False) def perintahTombol(self, text, perintah): button = QtGui.QPushButton(text) button.clicked.connect(perintah) button.setFixedSize(60, 20) return button def updateGambar(self): self.tempatHasil.setMinimumSize(self.hasil.size()) self.tempatHasil.setPixmap(self.hasil) self.scrollArea.show() def pilihSebagian(self): self.showFullScreen() self.tempatPilih = AreaKanvas(self, gambar=self.salinan) self.tempatPilih.show() def tangkapArea(self, x, y, lebar, tinggi): QtGui.qApp.beep() self.showNormal() self.hasil = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId(), x, y, lebar, tinggi) self.updateGambar() def keyPressEvent(self, keyevent): event = keyevent.key() if event == QtCore.Qt.Key_Escape: self.showNormal() self.b.close() self.show() def closeEvent(self, a): if not self.sudahDisimpan : tombol1 = QtGui.QMessageBox.StandardButton.Yes tombol2 = QtGui.QMessageBox.StandardButton.No pertanyaan = "apakah anda ingin menyimpan hasil screenshoot nya ?" response = QtGui.QMessageBox.question(self, "Konfirmasi", pertanyaan, tombol1, tombol2) if response == QtGui.QMessageBox.Yes: self.saveScreenshot() self.destroy() if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) screenshot = Screenshot() screenshot.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 Screenshoot PySide versi 5.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 //mengimport class ‘QtCore’ dan ‘QtGui’ dari PySIde
class AreaKanvas(QtGui.QWidget): //membuat class baru (AreaKanvas)
def __init__(self, parent=None, gambar=None): //membuat konstruktor dengan 2 parameter
super(AreaKanvas, self).__init__(parent) //memanggil construktor parent
self.parent = parent //menampung nilai variabel parameter
self.rectTerakhir = None //inisialisasi variabel rectTerakhir
self.setAttribute(QtCore.Qt.WA_StaticContents) //setting atribut
self.diKlik = False //inisialisasi variabel menentukan sudah klik di window atau belum
self.diPindah = False //inisialisasi variabel menentukan sudah di drop pada window atau belum
self.myPenWidth = 1 //inisialisasi tebal pensil
self.myPenColor = QtCore.Qt.blue //inisialisasi warna pensil
self.image = QtGui.QImage() //membuat image (tempat gambar)
self.lastPoint = QtCore.QPoint() //inisialisasi variabel untuk di isi nilai posisi kursor setelah selesai di drag
screen = QtGui.QDesktopWidget().screenGeometry() /mendapatkan ukuran layar PC
self.setFixedSize(screen.width(), screen.height()) //mengubah ukuran window sesuai ukuran layar PC (full screen)
self.showFullScreen() //menjalankan metode ‘showFullScreen’
self.gambar = gambar //menampung nilai variabel ‘gambar’
self.masukanGambar(gambar) //menjalankan metode ‘masukkanGambar’ dengan parameter nilai variabel ‘gambar’
self.showFullScreen() //menjalankan metode ‘showFullScreen’
def resizeEvent(self, event): //metode yang akan di jalankan ketika window berubah ukuran
if self.width() > self.image.width() or self.height() > self.image.height(): //mengecek apakah lebah window lebih besar dari lebar ‘foto’ atau tinggi window lebih tinggi dari tinggi foto
newWidth = max(self.width() + 128, self.image.width()) //mendapatkan ukuran terbesar antara lebar window dan lebar foto
newHeight = max(self.height() + 128, self.image.height()) //mendapatkan ukuran terbesar antara tinggi window dan tinggi foto
self.resizeImage(self.image, QtCore.QSize(newWidth, newHeight)) //mengubah ukuran foto (memanggil metode risizeImage)
self.update() //memperbarui window
super(AreaKanvas, self).resizeEvent(event) //memanggil metode kelas parent dari class ini
def resizeImage(self, image, newSize): //metode ‘resizeImage’
if image.size() == newSize: //mengecek apakah ukuran baru sama dengan ukuran foto
return //mengembalikan kosongan
newImage = QtGui.QImage(newSize, QtGui.QImage.Format_RGB32) //mengubah ukuran tempat foto
newImage.fill(QtGui.qRgb(255, 25, 255)) //menghapus semua foto
painter = QtGui.QPainter(newImage) //inisialisasi tempat foto (lagi)
painter.drawImage(QtCore.QPoint(0, 0), image) //memasukkan foto lagi
self.image = newImage //menampung foto (tempat foto)
def mousePressEvent(self, event): //metode yang akan di jalankan ketika mouse di klik
if event.button() == QtCore.Qt.LeftButton: //memastikan apakah yang di klik adalah klik kiri
self.lastPoint = event.pos() //mengubah nilai ‘lastPoint’ menjadi posisi mouse saat di klik
self.diKlik = True //mengubah nilai varibel ‘diKlik’ menjadi ‘True’ menandakan sudah di klik
self.awalX = event.pos().x() //mendapatkan posisi koordinat x mouse saaat pertama di klik
self.awalY = event.pos().y() //mendapatkan posisi koordinat y mouse saaat pertama di klik
def mouseMoveEvent(self, event): //metode yang akan di jalankan ketika mouse di pindah
if (event.buttons() & QtCore.Qt.LeftButton) and self.diKlik: //memastikan mouse bergerak dengan tetap menahan klik kiri (drag)
self.diPindah = True //mengubah nilai variabel ‘diPindah’ menandakan sudah di drag
self.masukanGambar(self.gambar) //memasukkan gambar kembali
self.drawLineTo(event.pos()) //menjalankan metode ‘drawLineTo’ (menggambar garis)
self.update() //memperbarui tampilan
def mouseReleaseEvent(self, event): //metode yang di jalankan ketika melepas klik dari mous
if event.button() == QtCore.Qt.LeftButton and self.diKlik and self.diPindah: //memastikan yang di klik adalah klik kiri dan variabel ‘diKlik’ dan ‘diPindah’ bernilai True (sudah pernah di klik dan drag)
self.diKlik = False //mengubah nilai diKlik menjadi False (menandakan proses klik sudah selesai)
self.diPindah = False //mengubah nilai diPindah menjadi False (menandakan proses drag sudah selesai)
self.akhirX = event.pos().x() //mendapatkan koordinat x mouse terakhir ketika di lepas
self.akhirY = event.pos().y() //mendapatkan koordinat y mouse terakhir ketika di lepas
self.kirimArea() //menjalankan metode ‘kirimArea’
self.close() //menutup window
def paintEvent(self, event): //metode yang akan di jalankan otomatis ketika proses drag and drop dan memasukkan gambar
painter = QtGui.QPainter(self) //membuat painter
painter.drawImage(QtCore.QPoint(0, 0), self.image) //menggambar foto
def drawLineTo(self, endPoint): //metode ‘drawLine’
painter = QtGui.QPainter(self.image) //membuat image baru (tempat foto)
painter.setPen(QtGui.QPen(self.myPenColor, self.myPenWidth, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin)) //inisialisasi pensil dengan beberapa settingan
if self.rectTerakhir : //memastikan ‘rectTerakhir’ tidak kosong
painter.eraseRect(self.rectTerakhir) //menhapus dengan area/lokasi di variabel ‘rectTerakhir
rectangle = QtCore.QRectF(self.awalX, self.awalY, endPoint.x()-self.awalX, endPoint.y()-self.awalY) //inisialisasi posisi rectangle dengan ukuran dan lokasi sesuai drag and drop mouse
poligon = QtGui.QPolygonF(rectangle) //insisialisasi rectangle
painter.drawPolyline(poligon) //menggambar rectangle ke window
def kirimArea(self): //metode ‘kirimArea’
if self.awalX > self.akhirX: //mengecek posisi koordinat ‘X’ saat di klik lebih besar dari saat dilepas
if self.awalY > self.akhirY: //mengecek posisi koordinat ‘Y’ saat di klik lebih besar dari saat dilepas
self.parent.tangkapArea(self.akhirX+1, self.akhirY+1, self.awalX - self.akhirX -1, self.awalY - self.akhirY-1) //menjalankan metode (tangkapArea) di class parent (Screenshot) dengan memasukkan 4 parameter (yaitu lokasi saat di drag dan drop)
else: //Jiks koordinat ‘Y’ saat di klik tidak lebih besar dari saat dilepas
self.parent.tangkapArea(self.akhirX+1, self.awalY+1, self.awalX - self.akhirX-1, self.akhirY - self.awalY-1) //menjalankan metode (tangkapArea) di class parent (Screenshot) dengan memasukkan 4 parameter (yaitu lokasi saat di drag dan drop)
else: //jika koordinat ‘X’ saat di klik tidak lebih besar dari saat dilepas
if self.awalY > self.akhirY: //mengecek posisi koordinat ‘Y’ saat di klik lebih besar dari saat dilepas
self.parent.tangkapArea(self.awalX+1, self.akhirY+1, self.akhirX - self.awalX-1, self.awalY - self.akhirY-1) //menjalankan metode (tangkapArea) di class parent (Screenshot) dengan memasukkan 4 parameter (yaitu lokasi saat di drag dan drop)
else: //jika koordinat ‘Y’ saat di klik tidak lebih besar dari saat dilepas
self.parent.tangkapArea(self.awalX+1, self.awalY+1, self.akhirX - self.awalX-1, self.akhirY - self.awalY-1) //menjalankan metode (tangkapArea) di class parent (Screenshot) dengan memasukkan 4 parameter (yaitu lokasi saat di drag dan drop)
def masukanGambar(self, gambar): //metode ‘masukkanGambar’
painter = QtGui.QPainter(self.image) //insialisasi tempat gambar lagi
painter.setPen(QtGui.QPen(self.myPenColor, self.myPenWidth, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin)) //insialisasi pensil dengan beberapa settingan
screen = QtGui.QDesktopWidget().screenGeometry() //mendapatkan ukuran layar PC
Painter.drawPixmap(0, 0, gambar) //memasukkan gambar ke window
class Screenshot(QtGui.QWidget): //membuat class. Dengan mewarisi (inheritence) class ‘QWidget’
def __init__(self): //membuat construktor
super(Screenshot, self).__init__() //memanggil kelas parent
self.buatTombol() //menjalanka metode ‘buatTombol’
self.tempatHasil = QtGui.QLabel() //membuat label (tempatHasil) sebagai tempat gambar hasil screenshoot
self.tempatHasil.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) //membuat ukuran (tempatHasil) mengikuti besar foto
self.tempatHasil.setAlignment(QtCore.Qt.AlignCenter) //membuat tempat foto agar berada di tengah window
self.mainLayout = QtGui.QVBoxLayout() //membuat layout utama
self.setScroll() //menjalankanmetode ‘setScroll’
self.mainLayout.addLayout(self.layoutTombol) //digunaakan untuk memasukkan ‘layoutTombol’ ke layout utama (mainLayout)
self.setLayout(self.mainLayout) //memasukkan layout utama (mainLayout) ke dalam window
self.jeda.setValue(1) //mengubah nilai kolom (jeda) menjadi 1 sebagai nilai default
self.sudahDisimpan = True //inisialisasi variabel untuk memastikan hasil screenshoot telah di simpan. (True=sudah disimpan. False = Belum) nilai default true. Karena belum screenshoot
self.setWindowTitle("Screenshos -> mn-belajarpython.blogspot.co.id") //mengubah judul window
self.resize(300, 30) //mengubah ukuran window
self.mainLayout.setContentsMargins(0, 0, 0, 0) //menghilangkan margin window
def setScroll(self): //metode ‘setScroll’
# mengatur scroll //hanya komentar
self.scrollArea = QtGui.QScrollArea() //mendefinisikan area scroll
self.scrollArea.setWidget(self.tempatHasil) //memasukkan ‘tempatHasil’ sebagai tempat yang akan di scroll
self.scrollArea.setBackgroundRole(QtGui.QPalette.Mid) //menggubah warna background scroll
self.scrollArea.setAlignment(QtCore.Qt.AlignCenter) //agar ‘tempatHasil’ berada di tengah
self.mainLayout.addWidget(self.scrollArea) //memasukkan tempat scroll (scrollArea) ke dalam layout utama
self.scrollArea.setMinimumSize(700, 400) //minimal ukuran area scroll
self.scrollArea.hide() //menyembunyikan tempat scroll (scrollArea) karena belum di screenshoot
screen = QtGui.QDesktopWidget().screenGeometry() //mendapatkan ukuran layar PC
size = self.geometry() //mendpatkan ukuran window
self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2) //membuat window tampil ditengah layar PC saat pertama di jalankan
def screenshootBaru(self): //metode ‘screenshootBaru’
if self.sembunyikan.isChecked(): //memastikan checkbox ‘sembunyikan’ tercentang
self.hide() //menyembunyikan window aplikasi (screenshoot) jika checkbox ‘sembunyi’ tercentang
self.window.setDisabled(True) //mematikan tombol ‘tangkap’ (penangkap layar) selama proses hitung mundur untuk memotret layar
QtCore.QTimer.singleShot(self.jeda.value() * 1000, self.tangkapLayar) //menjalankan metode ‘tangkapLayar’ setelah menghitung mundur sebanyak angka yang ada di kolom ‘jeda’
self.sudahDisimpan = False //mengubah nilai variabel ‘sudahDisimpan’ menjadi False setelah selesai screenshoot baru
def saveScreenshot(self): //metode ‘saveScreenshot’
format = 'png' //ekstensi pennyimpanan
initialPath = QtCore.QDir.currentPath() + "/untitled." + format //inisialisasi lokasi penyimpanan hasil screenshoot (sesuai lokasi file python sebagai default)
fileName,_ = QtGui.QFileDialog.getSaveFileName(self, "Save As",
initialPath,
"%s Files (*.%s);;All Files (*)" % (format.upper(), format)) //membuka file dialog pemlih folder tempat menyimpan foto
if fileName: //memastikan user memilih folder (tidak klik cancel)
self.hasil.save(fileName, format) //menyimpan file foto (screenshoot) di lokasi yang sudah di pilih
self.sudahDisimpan =False //mengubah nilai ‘sudahDisimpan’ menjadi ‘False’ yang menandakan sudah disimpan
def tangkapLayar(self): //metode tangkap layar
QtGui.qApp.beep() //membunyikan bunyi (bell) default sistem operasi
self.hasil = None //mendefinisikan variabel ‘hasil’ sebagai penyimpan hasil tangkapan layar
self.hasil = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId()) //mengambil gambar dari layar window PC
self.salinan = self.hasil //menyalin/menyimpan foto hasil screenshoot
self.updateGambar() //menjalankan metode ‘updateGambar’
self.window.setDisabled(False) //menghidupkan kembali tombol’tangkap’ karena proses screen telah selesai
if self.sembunyikan.isChecked(): //memastikan checkbox ‘sembunyikan’ tercentang
self.show() //menampilkan window aplikasi (screenshoot) jika checkbox ‘sembunyi’ tercentang
self.simpan.setEnabled(True) //mengaktifkan tombol ‘simpan’ (setelah memotret layar)
def updateCheckBox(self): //metode ‘updateCheckBox’
if self.jeda.value() == 0: //mengecek apakah nilai combobox ‘jeda’ bernilai 0
self.sembunyikan.setDisabled(True) //mematikan checkbox ‘sembunyi’ jika kolom input ‘checkbox’ jeda bernilai 0
else: //jika kolom jeda tidak bernilai nol
self.sembunyikan.setDisabled(False) //menghidupkan checkbox ‘sebunyi’ jika kolom input ‘checkbox’ jeda TIDAK bernilai 0
def buaPengaturan(self): //metode ‘buatPengaturan’
self.jeda = QtGui.QSpinBox() //membuat kolom input jeda (harus angka)
self.jeda.setSuffix("s") //huruf tanda setelah inputan. Yang menandakan detik/second
self.jeda.setMaximum(9) //maksimal inputan kolom jeda sebesar 9
self.jeda.setFixedSize(40,20) //mengubah ukuran kolom input ‘jeda’
self.jeda.valueChanged.connect(self.updateCheckBox) //menjalankan metode ‘updateCheckBox’ jika ada perubahan nilai di kolom input ‘jeda’
self.jedaLabel = QtGui.QLabel("Tunda :") //membuat label ‘tunda :’
self.sembunyikan = QtGui.QCheckBox("Sembunyikan") //menbuat checkbox “Sembunyikan”
layoutPengaturan = QtGui.QHBoxLayout() //membuat layout pengaturan
layoutPengaturan.addWidget(self.jedaLabel) //memasukkan label ‘Tunda :’ kedalam ‘layoutPengaturan’
layoutPengaturan.addWidget(self.jeda) //memasukkan kolom input jeda ke dalam ‘layoutPengaturan’
layoutPengaturan.addWidget(self.sembunyikan) //memasukkan checkbox ‘Sembunyikan” ke dalam layout Pengaturan
self.layoutTombol.addLayout(layoutPengaturan) //memasukkan ‘layoutPengaturan’ ke dalam ‘layoutTombol’
self.sembunyikan.setChecked(True) //membuat checkbox ‘sembunyikan’ tecentang (sebagai default saat pertama kali di jalankan)
def buatTombol(self): //metode ‘buatTombol’
self.window = self.perintahTombol("Tangkap", self.screenshootBaru) //digunakan untuk menjalankan metode ‘perintahTombol’ untuk membuat tombol parameter 1 sebagai nama dan parameter 2 sebagai perintah
self.simpan = self.perintahTombol("Simpan",self.saveScreenshot) //digunakan untuk menjalankan metode ‘perintahTombol’ untuk membuat tombol parameter 1 sebagai nama dan parameter 2 sebagai perintah
self.pilih = self.perintahTombol("Potong", self.pilihSebagian) //digunakan untuk menjalankan metode ‘perintahTombol’ untuk membuat tombol parameter 1 sebagai nama dan parameter 2 sebagai perintah
self.layoutTombol = QtGui.QHBoxLayout() //membuat layout tombol
self.layoutTombol.addStretch() //menambahkan stretch yang akan membesar/mengecil jika window di perbesar atau di perkecil
self.layoutTombol.addWidget(self.window) //memasukkan tombol di dalam variabel ‘window’
self.layoutTombol.addWidget(self.pilih) //memasukkan tombol pilih/potong ke ‘layoutTombol’
self.layoutTombol.addWidget(self.simpan) //memasukkan tombol ‘simpan’ ke dalam ‘layoutTombol’
self.layoutTombol.setContentsMargins(4,0,4,4) //mengatur margin layout tombol
self.simpan.setEnabled(False) //mematikan tombol ‘simpan’ sebagai default (karena belum memotret layar)
self.pilih.setEnabled(False) //mematikan tombol ‘Potong’ sebagai default saat baru di jalankan
def perintahTombol(self, text, perintah): //metode ‘perintahTombol’ (pembuat tombol)
button = QtGui.QPushButton(text) //membuat tombol dengan teks yang ada di variabel parameter (text)
button.clicked.connect(perintah) //menghubungkan tombol dengan perintah yang di masukkan di variabel parameter (perintah)
button.setFixedSize(60, 20) //mengubah ukuran tombol
return button //mengembalikan tombol yang telah di buat
def updateGambar(self): //metode ‘updateGamber’
self.tempatHasil.setMinimumSize(self.hasil.size()) //mengubah ukuran minimum ‘tempatHasil’ sesuai ukuran gambar
self.tempatHasil.setPixmap(self.hasil) //memasukkan gambar ke dalam ‘tempatHasil’
self.scrollArea.show() //menampilkan ‘scrollArea’ karena sudah melakukan screenshoot. Dimana sebelumnya telah di sembunyikan di awal
19
def pilihSebagian(self): //metode ‘pilihSebagian’
self.showFullScreen() //membuat tampilan aplikasi menjadi fullscreen
self.tempatPilih = AreaKanvas(self, gambar=self.salinan) //menjalankan class ‘AreaKanvas’ denga memasukkan gambar yang telah di screenshoot
self.tempatPilih.show() //menampilkan window class ‘AreKanvas’
def tangkapArea(self, x, y, lebar, tinggi): //metod ‘TangkapArea’
QtGui.qApp.beep() //membunyikan bell peringatan default os
self.showNormal() //menormalkan ukuran window
self.hasil = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId(), x, y, lebar, tinggi) //melakukan screenshoot lagi sesuai ukuran yang telah di drag and drop user
self.updateGambar() //menjalankan metod ‘updateGambar’
def keyPressEvent(self, keyevent): //metode yang akan di jalankan ketikan user klik tombol pada keyboard atau mouse
event = keyevent.key() //menampung penekanan tombol pada keyboard
if event == QtCore.Qt.Key_Escape: //mengecek apakah yang di tekan adalah tmbol ‘esc’
self.showNormal() //menormalkan ukuran window jik tekan ‘esc’
self.b.close() //menutup window ‘PilihArea’
self.show() //menampilkan window (Screenshot)
def closeEvent(self, a): //metode yang akan di jalankan secara otomatis ketika aplikasi (screenshoot) ini di tutup
if not self.sudahDisimpan : //mengecek apakah hasil screenshoot belum disimpan (apkah bernilai False)
tombol1 = QtGui.QMessageBox.StandardButton.Yes //tombol yes
tombol2 = QtGui.QMessageBox.StandardButton.No //tombol no
pertanyaan = "apakah anda ingin menyimpan hasil screenshoot nya ?" //membuat teks pertanyaan
response = QtGui.QMessageBox.question(self, "Konfirmasi", pertanyaan, tombol1, tombol2) //menampilkan kotak konfirmasi dengan memasukkan 2 tombol di atas dan teks pertanyaan
if response == QtGui.QMessageBox.Yes: //memastikan user klik tombol ‘yes’
self.saveScreenshot() //menjalankan metode ‘saveScreenshoot’ jika user klik ‘yes’
self.destroy() //menghancurkan/menutup window aplikasi (screenshoot) ini
if __name__ == '__main__': //code yang akan dijalankan pertama
import sys //mengimport class sys dari python
app = QtGui.QApplication(sys.argv) //mendefinisikan class ‘Qapplication’ dari PySide
screenshot = Screenshot() //menjalankan class ‘Screenshoot’
screenshot.show() //menampilkan window ‘Screenshoot’
sys.exit(app.exec_()) //agar window tidak langsung close saat di jalankan
Nah itu dia temen - temen penjelasan code programnya.. Mohon maaf apabila ada penjelasan yang kurang jelas, atau bahkan ada kekeliruan... Mohon kasi pembenaran atau pendapat kalian di kolom komentar ya... Biar kita bisa belajar bersama..
Oke terimakasih dan sampai di sini dulu ya... Jangan lupa untuk membaca versi yang lain... Biar ilmunya nambah.. Hehe.. Temikasih sekali lagi dan sekian...
Wassalamualaikum wr. wb.
ConversionConversion EmoticonEmoticon