Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

Tutorial PyQt5 dengan Contoh:Desain GUI menggunakan PyQt dengan Python

Apa itu PyQt?

PyQt adalah python binding dari widget-toolkit Qt sumber terbuka, yang juga berfungsi sebagai kerangka kerja pengembangan aplikasi lintas platform. Qt adalah framework C++ yang populer untuk menulis aplikasi GUI untuk semua platform desktop, seluler, dan tertanam utama (mendukung Linux, Windows, MacOS, Android, iOS, Raspberry Pi, dan lainnya).

PyQt adalah perangkat lunak gratis yang dikembangkan dan dikelola oleh Riverbank Computing, sebuah perusahaan yang berbasis di Inggris, sedangkan Qt dikembangkan oleh perusahaan Finlandia bernama The Qt Company.

Dalam tutorial PyQt5 ini, Anda akan mempelajari:

Fitur PyQT

Berikut adalah fitur penting dari PyQt:

Pelajari PyQt yang terdiri dari lebih dari enam ratus kelas yang mencakup berbagai fitur seperti

Fitur-fitur ini dapat digabungkan untuk membuat UI canggih serta aplikasi mandiri. Banyak perusahaan besar di semua industri menggunakan Qt. Beberapa contohnya adalah LG, Mercedes, AMD, Panasonic, Harman, dll.

Versi PyQt

PyQt tersedia dalam dua edisi, PyQt4 dan PyQt5. PyQt4 menyediakan kode lem untuk mengikat versi 4.x dan 5.x dari kerangka kerja Qt sementara PyQt5 menyediakan pengikatan hanya untuk versi 5.x. Akibatnya, PyQt5 tidak kompatibel dengan modul usang dari versi lama. Dalam tutorial GUI Qt ini, PyQt5 akan digunakan untuk demonstrasi contoh. Selain dua versi ini,

Riverbank Computing juga menyediakan PyQt3D—binding python untuk kerangka kerja Qt3D. Qt3D adalah kerangka kerja aplikasi yang digunakan untuk membuat sistem simulasi waktu nyata dengan rendering 2D/3D.

Cara menginstal PyQt5

Dalam tutorial PyQt5 ini, kita akan melihat dua cara menginstal PyQt:

Qt (diucapkan lucu) adalah sistem yang kompleks, dan basis kode PyQt berisi kode C++ dan Python yang dikompilasi di bawah tenda. Akibatnya, ini adalah proses yang rumit untuk membangun dan menginstalnya dari sumbernya dibandingkan dengan pustaka python lainnya. Namun, Anda dapat dengan mudah menginstal PyQt5 menggunakan roda.

Pemasangan dengan roda

Wheels adalah format kemasan dan distribusi Python standar baru. Sederhananya, roda adalah arsip ZIP dengan nama khusus dan .whl ekstensi file. Roda dapat diinstal menggunakan pip (pengelola paket Python), yang disertakan secara default di versi terbaru Python.

Jadi, jika Anda menginstal Python 3.4 atau lebih baru, Anda sudah memiliki pip. Namun, jika Anda menggunakan versi Python yang lebih lama, Anda harus mengunduh dan menginstal pip sebelum melanjutkan. Anda dapat mencari petunjuk untuk itu di tautan ini:https://pypi.org/project/pip/.

Untuk menginstal PyQt5,

Langkah 1) Buka Command prompt.
Buka Command Prompt atau PowerShell di mesin Windows Anda.

Langkah 2) Ketik berikut ini.

 pip install PyQt5

Langkah 3) Instalasi berhasil.
Langkah dalam tutorial PyQt5 ini akan mengunduh paket whl PyQt5 (sekitar 50 MB) dan menginstalnya di sistem Anda.

Atau, Anda juga dapat mengunduh biner Windows untuk versi python yang terinstal di komputer Anda.

Setelah selesai, lanjutkan ke bagian berikutnya dalam tutorial PyQt5 ini untuk menulis aplikasi GUI pertama Anda.

Konsep dan Program Dasar PyQt

Sekarang Anda telah berhasil menginstal PyQt5 di komputer Anda, Anda siap untuk menulis aplikasi desain GUI Python.

Mari kita mulai dengan aplikasi sederhana dalam tutorial PyQt5 ini yang akan menampilkan jendela kosong di layar Anda.

Jalankan python IDLE Anda dan ketik berikut ini:

Program 1

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle("Guru99")
    w.show()
    sys.exit(app.exec_())

Simpan sebagai app.py (nama tidak masalah) dan tekan F5 untuk menjalankan program. Atau, cukup klik dua kali file yang Anda simpan untuk meluncurkan aplikasi. Jika Anda telah melakukan semuanya dengan benar, jendela baru akan terbuka dengan judul Guru99 seperti yang ditunjukkan di bawah ini.

Besar! Bekerja. Tidak banyak, tetapi cukup untuk memahami dasar-dasarnya. Sekarang dalam tutorial PyQt ini, mari kita lihat secara detail apa yang dilakukan setiap baris dalam program Anda.

from PyQt5.QtWidgets import QApplication, QWidget

Pernyataan ini mengimpor semua modul yang Anda butuhkan untuk membuat GUI ke dalam namespace saat ini. Modul QtWidgets berisi semua widget utama yang akan Anda gunakan dalam tutorial Python Qt ini.

app = QApplication(sys.argv)

Di sini, Anda membuat objek dari kelas QApplication. Langkah ini merupakan keharusan untuk PyQt5; setiap aplikasi UI harus membuat instance QApplication, sebagai semacam titik masuk ke dalam aplikasi. Jika Anda tidak membuatnya, kesalahan akan ditampilkan.

sys.argv adalah daftar parameter baris perintah yang dapat Anda berikan ke aplikasi saat meluncurkannya melalui shell atau saat mengotomatiskan antarmuka.

Dalam contoh PyQt5 ini, Anda tidak memberikan argumen apa pun ke QApplications. Oleh karena itu, Anda juga dapat menggantinya dengan kode di bawah ini dan bahkan tidak perlu mengimpor modul sys.

app = QApplication([])
w = QWidget()

Selanjutnya, kita membuat objek dari kelas QWidget. QWidget adalah kelas dasar dari semua objek UI di Qt, dan hampir semua yang Anda lihat di aplikasi adalah widget. Itu termasuk dialog, teks, tombol, bilah, dan sebagainya. Fitur yang memungkinkan Anda mendesain antarmuka pengguna yang kompleks adalah widget dapat disarangkan, yaitu, Anda dapat memiliki widget di dalam widget, yang ada di dalam widget lain. Anda akan melihat ini beraksi di bagian berikutnya.

w.resize(300,300)

Metode pengubahan ukuran kelas QWidget memungkinkan Anda menyetel dimensi widget apa pun. Dalam hal ini, Anda telah mengubah ukuran jendela menjadi 300px kali 300px.

Di sini, Anda harus ingat bahwa widget dapat disatukan, widget terluar (yaitu, widget tanpa induk) disebut Window.

w.setWindowTitle("Guru99")

Metode setWindowTitle() memungkinkan Anda meneruskan string sebagai argumen yang akan mengatur judul jendela ke string yang Anda lewati. Dalam contoh PyQt5, bilah judul akan menampilkan Guru99.

w.show()

show() hanya menampilkan widget di layar monitor.

sys.exit(app.exec_())

Metode app.exec_() memulai loop peristiwa Qt/C++. Seperti yang Anda ketahui, PyQt sebagian besar ditulis dalam C++ dan menggunakan mekanisme loop peristiwa untuk mengimplementasikan eksekusi paralel. app.exec_() meneruskan kontrol ke Qt yang akan keluar dari aplikasi hanya ketika pengguna menutupnya dari GUI. Itulah sebabnya ctrl+c tidak akan keluar dari aplikasi seperti pada program python lainnya. Karena Qt memiliki kontrol atas aplikasi, kejadian python tidak diproses kecuali kami mengaturnya di dalam aplikasi. Juga, perhatikan bahwa metode exec memiliki garis bawah dalam namanya; ini karena exec() sudah menjadi kata kunci dalam python dan garis bawah menyelesaikan konflik penamaan.

Di luar jendela kosong

Di bagian sebelumnya, Anda melihat cara membuat widget dasar di Qt. Sekarang saatnya untuk membuat beberapa antarmuka yang lebih terlibat yang dengannya pengguna dapat benar-benar berinteraksi. Sekali lagi, jalankan IDLE Anda dan tulis yang berikut ini.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

def dialog():
    mbox = QMessageBox()

    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
            
    mbox.exec_()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle("Guru99")
    
    label = QLabel(w)
    label.setText("Behold the Guru, Guru99")
    label.move(100,130)
    label.show()

    btn = QPushButton(w)
    btn.setText('Beheld')
    btn.move(110,150)
    btn.show()
    btn.clicked.connect(dialog)

    
    w.show()
    sys.exit(app.exec_())

Simpan file sebagai appone.py atau apa pun yang Anda suka dan tekan F5 untuk menjalankan program. Jika Anda tidak melakukan kesalahan, IDLE akan membuka jendela baru dengan beberapa teks dan tombol seperti yang ditunjukkan di bawah ini.

  1. Setelah Anda mengklik tombol di jendela pertama, kotak pesan baru akan terbuka dengan teks yang telah Anda tulis.
  2. Sekarang Anda dapat mengeklik tombol Sembunyikan Detail/Tampilkan Detail untuk mengalihkan visibilitas teks tambahan.

Seperti yang Anda lihat, karena kami belum menetapkan judul jendela apa pun di kotak pesan, judul default disediakan oleh python itu sendiri.

Sekarang setelah berfungsi, mari kita lihat kode tambahan yang telah Anda tambahkan ke contoh PyQt5 sebelumnya.

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

Ini mengimpor beberapa widget lagi yang telah Anda gunakan dalam contoh PyQt5, yaitu QLabel, QPushButton, dan QMessageBox.

def dialog():
    mbox = QMessageBox()

    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
            
    mbox.exec_()

Di sini, Anda telah menetapkan metode bernama dialog yang membuat widget kotak pesan dan menyetel beberapa teks ke tombol dan bidang lainnya.

Metode dialog dipanggil dari blok utama program ketika sebuah tombol ditekan di widget tertentu (dalam hal ini, btn PushButton). Peristiwa klik yang dipicu pada tombol itu menyebabkan fungsi ini dijalankan. Fungsi seperti itu disebut slot di Qt, dan Anda akan mempelajari lebih lanjut tentang sinyal dan slot di paragraf mendatang.

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle("Guru99")

Ini adalah bagian utama aplikasi dan seperti pada contoh sebelumnya, Anda mulai dengan membuat instance QApplication diikuti dengan widget sederhana, yaitu instance QWidget.

label = QLabel(w)
    btn = QPushButton(w)

Anda telah menambahkan dua widget baru dalam aplikasi ini:QLabel dan QPushButton. QLabel digunakan untuk mencetak teks atau placeholder yang tidak dapat diedit di dalam widget, sedangkan QPushButton digunakan untuk membuat tombol yang dapat diklik.

Hal penting yang perlu diperhatikan di sini adalah ketika Anda membuat label dan objek btn, Anda meneruskan objek jendela (w) ke konstruktor QLabel dan QPushButton. Beginilah cara kerja bersarang di PyQt5. Untuk membuat widget di dalam widget lain, Anda meneruskan referensi widget induk ke konstruktor anak.

label.move(100,130)
btn.move(110,150)

move() digunakan untuk mengatur posisi widget sehubungan dengan widget induknya. Dalam kasus pertama, label akan dipindahkan 100 piksel dari kiri dan 130 piksel dari atas jendela.

Demikian pula, tombol akan ditempatkan 110px dari kiri dan 150px dari atas jendela. Contoh ini adalah cara kasar untuk mencapai tata letak dan umumnya tidak digunakan dalam produksi; itu hanya disertakan di sini untuk tujuan pembelajaran. Qt mendukung tata letak berbeda yang akan Anda lihat secara mendetail di bagian mendatang dari tutorial PyQt ini.

btn.clicked.connect(dialog)

Akhirnya, ini adalah contoh sinyal dan slot di Qt. Dalam aplikasi berbasis GUI, fungsi dijalankan berdasarkan tindakan yang dilakukan oleh pengguna, seperti mengarahkan kursor ke elemen atau mengklik tombol. Tindakan ini disebut peristiwa . Ingat bahwa metode app.exec_() mentransfer kontrol ke Qt event- lingkaran. Inilah gunanya loop peristiwa:untuk mendengarkan peristiwa dan melakukan tindakan sebagai tanggapan.

Setiap kali suatu peristiwa terjadi, seperti pengguna mengklik tombol, widget Qt yang sesuai memunculkan sinyal . Sinyal ini dapat dihubungkan ke fungsi python (seperti fungsi dialog dalam contoh ini) sehingga fungsi tersebut dijalankan saat sinyal dipicu. Fungsi ini disebut slot dalam istilah Qt.

Selanjutnya, sintaks dasar untuk memicu fungsi slot sebagai respons terhadap sinyal dari suatu peristiwa adalah sebagai berikut

 widget.signal.connect(slot)

Artinya, setiap kali sinyal dipicu oleh widget , slot connected yang terhubung fungsi akan dijalankan. Singkatnya, sinyal dan slot digunakan oleh Qt untuk berkomunikasi antar objek dan memfasilitasi penggunaan kembali komponen dan interaktivitas.

Sekarang setelah Anda mengetahui cara membuat sarang widget dan menerapkan interaksi menggunakan sinyal dan slot, berikut adalah daftar widget yang berguna dan kelas lain yang dapat Anda gunakan di aplikasi PyQt Anda.

Komponen dan Widget

Ada banyak widget yang tersedia di PyQt untuk membuat aplikasi GUI. Namun, dengan PyQt5, ada perombakan kelas menjadi modul yang berbeda dan revisi dalam lisensi.

Oleh karena itu, sangat penting untuk memiliki pandangan tingkat tinggi tentang struktur PyQt5. Di bagian ini, Anda akan melihat bagaimana PyQt5 diatur secara internal dan mempelajari berbagai modul, pustaka, dan kelas API yang disediakan oleh PyQt5.

Struktur Direktori PyQt5

Ini adalah modul dasar yang digunakan oleh pengikatan Qt Python, khususnya PyQt5.

Widget PyQt5

Berikut adalah daftar widget yang paling sering digunakan di PyQt5

Tata Letak dan Tema

Pada contoh PyQt5 sebelumnya, Anda hanya menggunakan metode move() dan resize() untuk mengatur posisi widget di GUI Anda.

Namun, PyQt memiliki mesin manajemen tata letak yang kuat yang dapat digunakan untuk membuat antarmuka pengguna tingkat lanjut untuk aplikasi. Di bagian ini, Anda akan mempelajari tentang dua kelas penting yang digunakan di Qt untuk membuat dan mengelola tata letak.

  1. QBoxLayout
  2. QGridLayout

QBoxLayout

QBoxLayout digunakan untuk menyelaraskan widget anak tata letak dalam baris horizontal atau vertikal. Dua kelas minat yang diwarisi dari QBoxLayout adalah:

Misalnya, seperti inilah tampilan tiga tombol yang disejajarkan dengan QHBoxLayout.

import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":

    app = QApplication([])
    w = QWidget()
    w.setWindowTitle("Musketeers")

    btn1 = QPushButton("Athos")
    btn2 = QPushButton("Porthos")
    btn3 = QPushButton("Aramis")

    hbox = QHBoxLayout(w)

    hbox.addWidget(btn1)
    hbox.addWidget(btn2)
    hbox.addWidget(btn3)

    w.show()

    sys.exit(app.exec_())

Dan beginilah tampilannya di QVBoxLayout.

import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":

    app = QApplication([])
    w = QWidget()
    w.setWindowTitle("Musketeers")

    btn1 = QPushButton("Athos")
    btn2 = QPushButton("Porthos")
    btn3 = QPushButton("Aramis")

    vb = QVBoxLayout(w)

    vb.addWidget(btn1)
    vb.addWidget(btn2)
    vb.addWidget(btn3)

    w.show()

    sys.exit(app.exec_())

Satu-satunya fungsi yang memerlukan penjelasan apa pun pada saat ini adalah metode addWidget(). Ini digunakan untuk memasukkan widget ke dalam tata letak HBox atau VBox. Ini juga digunakan dalam tata letak lain di mana dibutuhkan sejumlah parameter yang berbeda seperti yang akan Anda lihat di bagian berikutnya. Widget akan muncul di dalam tata letak sesuai urutan saat Anda memasukkannya.

QGridLayout

QGridLayout digunakan untuk membuat antarmuka di mana widget diletakkan dalam bentuk kisi (seperti matriks atau larik 2D). Untuk menyisipkan elemen dalam tata letak kisi, Anda dapat menggunakan representasi matriks untuk menentukan jumlah baris dan kolom dalam kisi serta posisi elemen tersebut.

Misalnya, untuk membuat kisi 3*3 (yaitu, kisi dengan tiga baris dan tiga kolom), Anda akan menulis kode berikut:

Import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":
    app = QApplication([])

    w = QWidget()

    grid = QGridLayout(w)

    for i in range(3):
        for j in range(3):
            grid.addWidget(QPushButton("Button"),i,j)


    w.show()
    sys.exit(app.exec_())

Ini akan menjadi output:

Metode addWidget() Dalam tata letak kisi, gunakan argumen berikut:

Untuk memahaminya dengan lebih baik, Anda dapat memasukkan setiap widget secara manual seperti yang ditunjukkan di bawah ini

import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":
    app = QApplication([])

    w = QWidget()

    grid = QGridLayout(w)
    grid.addWidget(QPushButton("Button one"),0,0)
    grid.addWidget(QPushButton("Button two"),0,1)
    grid.addWidget(QPushButton("Button three"),1,0)
    grid.addWidget(QPushButton("Button four"),1,1)


    w.show()
    sys.exit(app.exec_())

Inilah yang akan terlihat seperti kisi-kisi:

Anda juga dapat meneruskan parameter rowspan dan colspan ke addWidget() untuk menjangkau lebih dari satu baris atau kolom.

Misalnya,

grid.addWidget(QPushButton("Button five"),2,0,1,0)

Ini akan membuat tombol yang membentang di kedua kolom.

Tema

PyQt5 hadir dengan beberapa tema bawaan yang dapat Anda gunakan di aplikasi Anda. setStyle() metode yang dipanggil pada instance QApplication digunakan untuk menyetel tema tertentu ke aplikasi Anda.

Misalnya, menambahkan baris kode berikut akan mengubah tema aplikasi Anda dari default ke Fusion

app.setStyle("Fusion")

Beginilah tampilan contoh sebelumnya di Fusion Theme

Fungsi lain yang berguna untuk memberi tema pada aplikasi Anda adalah metode setPalette(). Berikut kode untuk mengubah warna widget yang berbeda menggunakan setPalette().

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPalette

if __name__ == "__main__":
    app = QApplication([])
    app.setStyle("Fusion")
    
    qp = QPalette()
    qp.setColor(QPalette.ButtonText, Qt.black)
    qp.setColor(QPalette.Window, Qt.black)
    qp.setColor(QPalette.Button, Qt.gray)
    app.setPalette(qp)

    w = QWidget()

    grid = QGridLayout(w)
    grid.addWidget(QPushButton("Button one"),0,0)
    grid.addWidget(QPushButton("Button two"),0,1)
    grid.addWidget(QPushButton("Button three"),1,0)
    grid.addWidget(QPushButton("Button four"),1,1)


    w.show()
    sys.exit(app.exec_())

Inilah hasilnya.

Untuk menggunakan metode setPalette(), Anda harus mendefinisikan palet terlebih dahulu. Ini dilakukan dengan membuat objek dari kelas QPalette.

 qp = QPalette()

Perhatikan bahwa kelas QPalette milik modul QtGui dan Anda harus mengimpornya agar ini berfungsi. Setelah Anda membuat objek QPalette, gunakan metode setColor() untuk meneruskan nama widget yang warnanya ingin Anda ubah dan warna yang ingin Anda atur.

 qp.setColor(QPalette.Window, Qt.black)

Ini akan mengubah warna jendela menjadi hitam. Setelah Anda menentukan skema warna, gunakan fungsi setPalette() untuk menerapkan palet ke aplikasi Anda.

app.setPalette(qp)

Hanya itu yang perlu Anda lakukan jika ingin membuat beberapa tema dasar untuk aplikasi Anda. PyQt juga memungkinkan Anda menggunakan stylesheet untuk menentukan tampilan widget Anda. Jika Anda terbiasa dengan CSS, Anda dapat dengan mudah menentukan gaya lanjutan untuk aplikasi Anda menggunakan Qt Style Sheets.

Ringkasan


Python

  1. Tutorial Koleksi C# dengan Contoh
  2. Python String count() dengan CONTOH
  3. Format String Python() Jelaskan dengan CONTOH
  4. Metode Python String find() dengan Contoh
  5. Fungsi Python Lambda dengan CONTOH
  6. Python round() fungsi dengan CONTOH
  7. Python map() berfungsi dengan CONTOH
  8. Python Timeit() dengan Contoh
  9. Penghitung Python dalam Koleksi dengan Contoh
  10. type() dan isinstance() dengan Python dengan Contoh