Language:

Search

Tutorial PyQt5 Pemrograman Python Dengan Gui

  • Share this:
post-title

Gila ya parno korona, berita yang orang tiba-tiba mati lah, parno parah bikin semua di lockdown, sampai gabut parah, di rumah juga ngapain, terus dampak ekonomi ke beberapa masyarakat, tapi memang Tuhan menyertakan kemudahan di balik kesulitan, prinsip yang banyak dipakai orang bisnis, mencari peluang di tengah-tengah kesulitan.

Contohnya kayak temen gue yang dari jual CCTV kesusahan, sampai-sampai pada merumahkan pegawainya, kemudian banting stir jadi jualan termometer thermal yang lagi pada laris manis di pakai dimana-mana, jual dispenser sabun, sampai thermal kamera scanner, ikut tender lah, jadi subkon lah, sampai di sewain, kayaknya cuan gede.

Tapi memang untuk memulai usaha dibutuhkan modal, salah satunya modal duit,gak ada duit ya modal kepercayaan minjem duit kek, cari investor kek atau apa aja, intinya harus pinter-pinter cari peluang.

Gue ? terus terang untuk modal duit gue nggak ada, paling cuma jual vitamin atau suplemen di tokopedia, hasilnya kurang, gue juga nyambi kerjaan di kantor McD terus mikir bakal bikin produk apa gitu akhirnya gue melajari sesuatu, karena gabut parah di lockdown jangan sampai gak ada manfaatnya, jadi belajar apa aja deh, buat naikin value.

Oke, sesuai judul ya, tutorial PyQt5 framework desktop apps dari python, sejarahnya gimana, Qt itu apa bisa banyak di cari tulisannya di google,  ini gue dapet karena gue banyak-banyak searching,  dan nemu info kalau ini lebih stable lebih nyaman di banding tkinter atau wxpython.

Gue anggep, pembaca harus sudah paham python dan terinstall python minimal 3.7 ya, untuk tutorial dasar python yang gratis menarik dan udah di pahami ada di petanikode.com langsung cari disana, jadi disini langsung ke tahap install pyqt5, oh iya saya pakai windows, jadi dari command prompt install pakai pip, jadinya pip install pyqt5 

Kalau di ubuntu atau sejenisnya, pakai perintah :

sudo apt-get install -y python3-pip
sudo apt-get install build-essential libssl-dev libffi-dev python-dev

Terus install qt frameworknya sudo apt-get install python3-pyqt5 gampang kan...

Jika sudah, tinggal download qt framework dari qt.io atau di https://build-system.fman.io/qt-designer-download 

Nah, yang paling utama adalah modul dari qt itu sendiri, yaitu from PyQt5.QtWidgets import QApplication, QWidget dan from PyQt5.QtGui import QIcon dan jangan lupakan import sys ya..oh iya beda banget loh kalau kita bikin program melalui qtdesigner, cuma ini kita mulai dari pemahaman codingnya ya.

Seperti biasa, apapun codingnya, orang selalu mulai dari hello world : 

 

#!/usr/bin/python

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QIcon

class App(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'Hello World'
        self.left = 200
        self.top = 100
        self.width = 200
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.label = QLabel("Hello World", self)
        self.label.move(60,80)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
    


Hahaha, saya masih pakai notepad++ dari dulu hingga kini, nyaman aja, belom pernah pakai VSCode, jadi selalu diawali #!/usr/bin/python, oke saya jelaskan, di qt kita langsung pakai class ya, maka dari itu saya sudah jelaskan diatas bahwa sudah harus paham basic python, source di atas save dengan nama file misal a.py lalu jalankan, dan akan muncul seperti dibawah ini :

Di sana kita mulai dari label, kalau di qtdesigner dia bawaan widgets, nanti di widgest itu isinya bakal buat nambahin text boxes, button, text fields sampai checkbox, nah kita bikin self.label.move(60,80).

Nah, next step kita bikin button, widget itu yang bakal nongol di monitor, termasuk button ini nama widget nya QPushButton from PyQt5.QtWidgets import QApplication, QWidget, QPushButton terus tambahin lagi button=QPushButton("Click", self) ini yang bakal bikin button bertuliskan click terus kita set window button=QPushButton("Click", self) dan kita rubah posisi button.move(100,70).

Tapi diatas itu kalau di klik gak bakal kenapa-napa, jadi di butuhkan signal dan slots,tapi di pyqt ada sendiri, jadinya from PyQt5.QtCore import pyqtSlot, jadi kalau kita klik itu tombol, dia bakal ngirim signal  dan tugas slot ngambil signal itu button.clicked.connect(self.onClick) jadi dia ngeklik nangkep signal trus di sambungin ke slot pake metode onClick tadi, disini kita bikin slotnya.

 

@pyqtSlot()
def onClick(self):
    print('Button click!')
    


nah, disitu nanti pas di terminal atau command prompt bakal ada nongol output disetiap button di klik pakai method onClick tadi, method bisa di kasih nama apa aja ya, yang penting konek ke signal, oh iya, signal dan slot bisa di pakai di semua widgets

Widgets 

PyQT banyak sediain widget selain button karena widget ini bisa obyek apa aja yang nongol di window, kalau di qtdesigner bisa drag and drop, beberapa ini widget yang umum di pakai :

  • QLabel
  • QComboBox
  • QCheckBox
  • QGroupBox
  • QRadioButton
  • QDial
  • QLineEdit (plain text, passwords)
  • QSpinBox
  • QSlider
  • QProgressBar
  • QPushButton
  • QCalendarWidget

Gak perlu diapalin, cukup di pahami aja, kalau program itu biasa ada label, combo,check,radio button,slider,progress bar dll, karena yang diatas ini masih beberapa, dan bakal banyak lagi nantinya, sekarang kita coba ya :

 

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(596, 449)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 111, 17))
        self.label.setObjectName("label")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(110, 4, 171, 31))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(10, 40, 271, 111))
        self.groupBox.setObjectName("groupBox")
        self.radioButton = QtWidgets.QRadioButton(self.groupBox)
        self.radioButton.setGeometry(QtCore.QRect(20, 40, 109, 21))
        self.radioButton.setObjectName("radioButton")
        self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox)
        self.radioButton_2.setGeometry(QtCore.QRect(20, 70, 109, 21))
        self.radioButton_2.setObjectName("radioButton_2")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(10, 160, 271, 31))
        self.lineEdit.setObjectName("lineEdit")
        self.spinBox = QtWidgets.QSpinBox(self.centralwidget)
        self.spinBox.setGeometry(QtCore.QRect(10, 200, 271, 31))
        self.spinBox.setProperty("value", 5)
        self.spinBox.setObjectName("spinBox")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 240, 271, 31))
        self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.horizontalSlider = QtWidgets.QSlider(self.centralwidget)
        self.horizontalSlider.setGeometry(QtCore.QRect(10, 280, 271, 20))
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setGeometry(QtCore.QRect(10, 310, 271, 23))
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_2.setGeometry(QtCore.QRect(290, 40, 291, 111))
        self.groupBox_2.setObjectName("groupBox_2")
        self.dial = QtWidgets.QDial(self.groupBox_2)
        self.dial.setGeometry(QtCore.QRect(20, 40, 50, 64))
        self.dial.setObjectName("dial")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(300, 10, 93, 21))
        self.checkBox.setObjectName("checkBox")
        self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
        self.calendarWidget.setGeometry(QtCore.QRect(290, 160, 288, 231))
        self.calendarWidget.setObjectName("calendarWidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(10, 350, 271, 33))
        self.pushButton.setObjectName("Klik Sini")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 596, 29))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.tulisanUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def tulisanUi(self, MainWindow):
        _maksud = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_maksud("MainWindow", "Contoh Widgets - Perjalanan Armin"))
        self.label.setText(_maksud("MainWindow", "Nonton Hiburan:"))
        self.comboBox.setItemText(0, _maksud("MainWindow", "Film"))
        self.comboBox.setItemText(1, _maksud("MainWindow", "Bokep"))
        self.comboBox.setItemText(2, _maksud("MainWindow", "Gibah"))
        self.groupBox.setTitle(_maksud("MainWindow", "GroupBox"))
        self.radioButton.setText(_maksud("MainWindow", "Tv"))
        self.radioButton_2.setText(_maksud("MainWindow", "Youtube"))
        self.lineEdit.setText(_maksud("MainWindow", "Text"))
        self.lineEdit_2.setText(_maksud("MainWindow", "password"))
        self.groupBox_2.setTitle(_maksud("MainWindow", "GroupBox"))
        self.checkBox.setText(_maksud("MainWindow", "Streaming"))
        self.pushButton.setText(_maksud("MainWindow", "PushButton"))

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())


    

Nah, diatas, setelah kita impor semua yang diperlukan, lalu kita bikin class, karena ada 2 function, function pertama yaitu untuk setupUI yang  isinya manggil widgets pakai self di tutup dengan Qtcore buat connect ke slot, yang selanjutnya, bikin function lagi untuk menjelaskan isi atau maksud daripada function pertama, seperti pada attribute self.comboBox yang paling awal di assign QtWidgets.QComboBox(self.centralwidget)
sehingga bisa juga di pakai untuk manggil isi class itu sendiri self.comboBox.setObjectName("comboBox") dan di function kedua self.comboBox bisa di set self.comboBox.setItemText(0, _maksud("MainWindow", "Film")) dan seterusnya.

Harusnya mudah dipahami, untuk yang sudah mengerti python, sampai disini dulu, semoga bisa memahami, kita akan coba di part 2 nanti.

Armin

Armin

IT Dev, SEO & Digital Marketing Specialist with 7+ years experience, Coder, Sys Admin, Designer, Blogger