materi

Pertemuan 1: Pengantar GUI Modern, Arsitektur Qt Framework, dan Instalasi PySide6

Pengantar GUI Modern, Arsitektur Qt Framework, dan Instalasi PySide6

Modul perkuliahan perdana mata kuliah Pemrograman Dekstop yang membahas paradigma pemrograman antarmuka grafis modern (Graphical User Interface / GUI), evolusi dan arsitektur internal Qt Framework lintas platform, komparasi lisensi antara PyQt vs PySide6, serta implementasi siklus hidup aplikasi desktop berbasis Python.

1. Paradigma GUI vs Command-Line Interface (CLI)

Perbedaan fundamental antara antarmuka teks konvensional dengan antarmuka grafis terletak pada model kontrol eksekusi program:

  • Command-Line Interface (CLI): Alur program bersifat linier dan deterministik. Eksekusi berjalan dari atas ke bawah mengikuti baris kode instruksi, meminta masukan pengguna secara sekuensial (blocking call), dan berakhir ketika operasi komputasi tuntas.
  • Graphical User Interface (GUI): Alur eksekusi dikendalikan sepenuhnya oleh arsitektur berbasis kejadian (event-driven architecture / EDA). Aplikasi berjalan dalam suatu perulangan tak terbatas (infinite event loop) yang terus mendengarkan aksi eksternal pengguna (seperti klik mouse, input keyboard, gerakan kursor, atau perubahan ukuran jendela) dan mendistribusikan event tersebut ke komponen pengendali (event handlers) yang relevan.

2. Sejarah, Evolusi, dan Arsitektur Qt Framework

Qt (dilafalkan "cute") adalah kerangka kerja C++ komprehensif yang dirancang untuk membangun aplikasi berkinerja tinggi lintas platform (Windows, Linux, macOS, Android, hingga Embedded Systems).

  • Sejarah Ringkas: Diciptakan pertama kali oleh Haavard Nord dan Eirik Chambe-Eng pada tahun 1991 melalui Trolltech, diakuisisi oleh Nokia pada tahun 2008, dan kini dikembangkan secara mandiri di bawah naungan The Qt Company bersama komunitas open-source global.
  • Komparasi Binding Python: PyQt vs PySide6:
    1. PyQt (Riverbank Computing): Binding Python tertua untuk Qt. Menggunakan skema lisensi ganda: GNU General Public License (GPL v3) untuk proyek gratis dan lisensi komersial berbayar untuk aplikasi berbayar tertutup (proprietary).
    2. PySide6 (Qt for Python): Binding resmi (official) dari The Qt Company untuk Qt 6. Mengadopsi lisensi GNU Lesser General Public License (LGPL v3), yang memberikan fleksibilitas hukum bagi pengembang untuk membuat aplikasi komersial tertutup tanpa keharusan membuka kode sumber keseluruhan aplikasi selama pustaka Qt ditautkan secara dinamis (dynamically linked).

3. Siklus Hidup dan Anatomi Aplikasi Qt

Setiap aplikasi desktop berbasis PySide6 memiliki komponen inti pembangun sistem:

  1. QApplication: Objek pengendali global yang mengelola subsistem GUI, menangani parameter baris perintah sistem operasi, menginisialisasi konfigurasi tampilan, dan menjalankan perulangan event utama.
  2. Event Loop (app.exec() / app.exec_() ): Metode yang memblokir eksekusi baris berikutnya untuk memulai pemantauan antrean pesan event dari window manager sistem operasi.
  3. Pewarisan Kelas GUI (QMainWindow vs QWidget):
    • QWidget: Kelas dasar untuk semua elemen antarmuka visual di Qt. Widget tanpa induk (parent) akan otomatis ditampilkan sebagai jendela independen.
    • QMainWindow: Jendela aplikasi formal tingkat atas yang telah dilengkapi struktur standar aplikasi profesional seperti bilah menu (menu bar), bilah status (status bar), bilah alat (toolbar), serta area widget sentral (central widget).

4. Implementasi Kode Pengujian Lingkungan (PyQttest1.py)

Berikut adalah contoh struktur kode standar untuk memastikan pustaka GUI PySide6 terkonfigurasi dengan benar di lingkungan kerja:

python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget

class TestWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Uji Lingkungan Kerja PySide6 - Pemrograman Desktop")
        self.setFixedSize(480, 280)

        # Inisialisasi komponen visual
        layout = QVBoxLayout()
        self.label_info = QLabel("Pustaka GUI PySide6 Berhasil Terpasang!")
        self.label_info.setStyleSheet("font-size: 14px; font-weight: bold; color: #1e40af;")
        self.btn_aksi = QPushButton("Tutup Jendela")
        self.btn_aksi.clicked.connect(self.close)

        # Susun widget ke dalam layout
        layout.addWidget(self.label_info)
        layout.addWidget(self.btn_aksi)

        # Tetapkan kontainer sebagai central widget
        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = TestWindow()
    window.show()
    sys.exit(app.exec())

Modul ini membekali pemahaman mendasar mengenai instalasi pustaka, konfigurasi virtual environment Python, dan hierarki komponen grafis sebelum melangkah ke logika manipulasi sinyal dan penataan layout tingkat lanjut.

Attachments