PyQt5 - Panduan Cepat

PyQt adalah toolkit widget GUI. Ini adalah antarmuka Python untukQt, salah satu pustaka GUI lintas platform yang paling kuat dan populer. PyQt dikembangkan oleh RiverBank Computing Ltd. Versi terbaru PyQt dapat diunduh dari situs resminya - riverbankcomputing.com

PyQt API adalah sekumpulan modul yang berisi sejumlah besar kelas dan fungsi. SementaraQtCore modul berisi fungsionalitas non-GUI untuk bekerja dengan file dan direktori dll., QtGuimodul berisi semua kontrol grafis. Selain itu, ada modul untuk bekerja dengan XML(QtXml), SVG (QtSvg), dan SQL (QtSql), dll.

Daftar modul yang sering digunakan diberikan di bawah ini -

  • QtCore - Kelas inti non-GUI yang digunakan oleh modul lain

  • QtGui - Komponen antarmuka pengguna grafis

  • QtMultimedia - Kelas untuk pemrograman multimedia tingkat rendah

  • QtNetwork - Kelas untuk pemrograman jaringan

  • QtOpenGL - Kelas dukungan OpenGL

  • QtScript - Kelas untuk mengevaluasi Qt Scripts

  • QtSql - Kelas untuk integrasi database menggunakan SQL

  • QtSvg - Kelas untuk menampilkan konten file SVG

  • QtWebKit - Kelas untuk merender dan mengedit HTML

  • QtXml - Kelas untuk menangani XML

  • QtWidgets - Kelas untuk membuat UI bergaya desktop klasik

  • QtDesigner - Kelas untuk memperluas Qt Designer

Lingkungan Pendukung

PyQt kompatibel dengan semua sistem operasi populer termasuk Windows, Linux, dan Mac OS. Ini adalah lisensi ganda, tersedia di bawah GPL serta lisensi komersial. Versi stabil terbaru adalahPyQt5-5.13.2.

Windows

Roda untuk arsitektur 32-bit atau 64-bit disediakan yang kompatibel dengan Python versi 3.5 atau yang lebih baru. Cara yang disarankan untuk memasang menggunakanPIP utilitas -

pip3 install PyQt5

Untuk menginstal alat pengembangan seperti Qt Designer untuk mendukung roda PyQt5, berikut adalah perintahnya -

pip3 install pyqt5-tools

Anda juga dapat membangun PyQt5 di Linux / macOS dari kode sumber www.riverbankcomputing.com/static/Downloads/PyQt5

PyQt5 API tidak otomatis kompatibel dengan versi sebelumnya. Karenanya, kode Python yang melibatkan modul PyQt4 harus ditingkatkan secara manual dengan membuat perubahan yang relevan. Dalam bab ini, perbedaan utama antara PyQt4 dan PyQt5 telah didaftarkan.

PyQt5 tidak didukung pada versi Python sebelum v2.6.

PyQt5 tidak mendukung metode connect () kelas QObject untuk koneksi antara sinyal dan slot. Karenanya penggunaan tidak dapat lagi diimplementasikan -

QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)

Hanya sintaks berikut yang ditentukan -

widget.signal.connect(slot_function)

Kelas yang didefinisikan dalam modul QtGui sebelumnya telah didistribusikan di QtGui, QtPrintSupport sebuah QtWidgets modul.

Di kelas QFileDialog baru, The getOpenFileNameAndFilter() metode diganti dengan getOpenFileName(), getOpenFileNamesAndFilter() oleh getOpenFileNames() dan getSaveFileNameAndFilter() oleh getSaveFileName(). Tanda tangan yang lebih lama dari metode ini juga telah berubah.

PyQt5 tidak memiliki ketentuan untuk mendefinisikan kelas yang disubkelas dari lebih dari satu kelas Qt.

pyuic5 utilitas (untuk menghasilkan kode Python dari file XML Desainer) tidak mendukung tanda --pyqt3-wrapper.

pyrcc5tidak mendukung flag -py2 dan -py3. Keluaran pyrcc5 kompatibel dengan semua versi Python v2.6 dan seterusnya.

PyQt5 selalu memanggil sip.setdestroyonexit() secara otomatis dan memanggil destruktor C ++ dari semua instance terbungkus yang dimilikinya.

Membuat aplikasi GUI sederhana menggunakan PyQt melibatkan langkah-langkah berikut -

  • Impor modul QtCore, QtGui dan QtWidgets dari paket PyQt5.

  • Buat objek aplikasi kelas QApplication.

  • Objek QWidget membuat jendela tingkat atas. Tambahkan objek QLabel di dalamnya.

  • Setel keterangan label sebagai "halo dunia".

  • Tentukan ukuran dan posisi jendela dengan metode setGeometry ().

  • Masuk ke mainloop aplikasi dengan app.exec_() metode.

Berikut adalah kode untuk menjalankan program Hello World di PyQt -

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def window():
   app = QApplication(sys.argv)
   w = QWidget()
   b = QLabel(w)
   b.setText("Hello World!")
   w.setGeometry(100,100,200,50)
   b.move(50,20)
   w.setWindowTitle("PyQt5")
   w.show()
   sys.exit(app.exec_())
if __name__ == '__main__':
   window()

Kode di atas menghasilkan keluaran sebagai berikut -

Dimungkinkan juga untuk mengembangkan solusi berorientasi objek dari kode di atas.

  • Impor modul QtCore, QtGui dan QtWidgets dari paket PyQt5.

  • Buat objek aplikasi kelas QApplication.

  • Deklarasikan kelas jendela berdasarkan kelas QWidget

  • Tambahkan objek QLabel dan setel judul label sebagai "hello world".

  • Tentukan ukuran dan posisi jendela dengan metode setGeometry ().

  • Masuk ke mainloop aplikasi dengan app.exec_() metode.

Berikut ini adalah kode lengkap dari solusi berorientasi objek -

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class window(QWidget):
   def __init__(self, parent = None):
      super(window, self).__init__(parent)
      self.resize(200,50)
      self.setWindowTitle("PyQt5")
      self.label = QLabel(self)
      self.label.setText("Hello World")
      font = QFont()
      font.setFamily("Arial")
      font.setPointSize(16)
      self.label.setFont(font)
      self.label.move(50,20)
def main():
   app = QApplication(sys.argv)
   ex = window()
   ex.show()
   sys.exit(app.exec_())
if __name__ == '__main__':
   main()

PyQt APIadalah kumpulan besar kelas dan metode. Kelas-kelas ini didefinisikan di lebih dari 20 modul.

Berikut adalah beberapa modul yang sering digunakan -

Sr.No. Modul & Deskripsi
1

QtCore

Kelas inti non-GUI yang digunakan oleh modul lain

2

QtGui

Komponen antarmuka pengguna grafis

3

QtMultimedia

Kelas untuk pemrograman multimedia tingkat rendah

4

QtNetwork

Kelas untuk pemrograman jaringan

5

QtOpenGL

Kelas dukungan OpenGL

6

QtScript

Kelas untuk mengevaluasi Skrip Qt

7

QtSql

Kelas untuk integrasi database menggunakan SQL

8

QtSvg

Kelas untuk menampilkan konten file SVG

9

QtWebKit

Kelas untuk merender dan mengedit HTML

10

QtXml

Kelas untuk menangani XML

11

QtWidgets

Kelas untuk membuat UI bergaya desktop klasik.

12

QtDesigner

Kelas untuk memperluas Qt Designer

13

QtAssistant

Dukungan untuk bantuan online

Alat pengembangan PyQt5 adalah kumpulan utilitas yang berguna untuk pengembangan Qt. Berikut ini adalah daftar pilihan utilitas tersebut -

Sr.No. Nama & Deskripsi Alat
1

assistant

Alat dokumentasi Asisten Qt

2

pyqt5designer

Alat tata letak GUI Qt Designer

3

linguist

Alat terjemahan Qt Linguist

4

lrelease

kompilasi file ts ke file qm

5

pylupdate5

ekstrak string terjemahan dan buat atau perbarui file ts

6

qmake

Alat pembuatan perangkat lunak Qt

7

pyqt5qmlscene

Penampil file QML

8

pyqmlviewer

Penampil file QML

9

pyrcc5

Kompiler file sumber daya Qt

10

pyuic5

Qt User Interface Compiler untuk menghasilkan kode dari file ui

11

pyqmltestrunner

menjalankan tes unit pada kode QML

12

qdbus

alat baris perintah untuk mencantumkan layanan D-Bus

13

QDoc

generator dokumentasi untuk proyek perangkat lunak.

14

Qhelpgenerator

membuat dan melihat file bantuan Qt.

15

qmlimportscanner

parsing dan laporan impor QML

PyQt API berisi lebih dari 400 kelas. ItuQObjectclass berada di puncak hierarki class. Ini adalah kelas dasar dari semua objek Qt. Selain itu,QPaintDevice kelas adalah kelas dasar untuk semua objek yang bisa dicat.

QApplicationclass mengelola pengaturan utama dan aliran kontrol aplikasi GUI. Ini berisi loop acara utama di mana acara yang dihasilkan oleh elemen jendela dan sumber lain diproses dan dikirim. Ini juga menangani pengaturan seluruh sistem dan seluruh aplikasi.

QWidget kelas, diturunkan dari QObject dan kelas QPaintDevice adalah kelas dasar untuk semua objek antarmuka pengguna. QDialog dan QFramekelas juga diturunkan dari kelas QWidget. Mereka memiliki sistem sub-kelas mereka sendiri.

Berikut adalah daftar pilihan widget yang sering digunakan

Sr.No. Widget & Deskripsi
1

QLabel

Digunakan untuk menampilkan teks atau gambar

2

QLineEdit

Memungkinkan pengguna memasukkan satu baris teks

3

QTextEdit

Memungkinkan pengguna untuk memasukkan teks multi-baris

4

QPushButton

Tombol perintah untuk meminta tindakan

5

QRadioButton

Memungkinkan untuk memilih satu dari beberapa opsi

6

QCheckBox

Memungkinkan pilihan lebih dari satu opsi

7

QSpinBox

Memungkinkan untuk menambah / mengurangi nilai integer

8

QScrollBar

Memungkinkan untuk mengakses konten widget di luar bukaan tampilan

9

QSlider

Memungkinkan untuk mengubah nilai terikat secara linier.

10

QComboBox

Menyediakan daftar dropdown item untuk dipilih

11

QMenuBar

Bilah horizontal yang menahan objek QMenu

12

QStatusBar

Biasanya di bagian bawah QMainWindow, memberikan informasi status.

13

QToolBar

Biasanya di atas QMainWindow atau floating. Berisi tombol tindakan

14

QListView

Menyediakan daftar item yang dapat dipilih di ListMode atau IconMode

15

QPixmap

Representasi gambar di luar layar untuk ditampilkan pada objek QLabel atau QPushButton

16

QDialog

Modal atau modeless window yang dapat mengembalikan informasi ke jendela induk

Jendela tingkat atas aplikasi berbasis GUI yang khas dibuat oleh QMainWindowobjek widget. Beberapa widget seperti yang tercantum di atas mengambil tempat yang ditentukan di jendela utama ini, sementara yang lain ditempatkan di area widget pusat menggunakan berbagai pengelola tata letak.

Diagram berikut menunjukkan kerangka kerja QMainWindow -

Penginstal PyQt dilengkapi dengan alat pembuat GUI yang disebut Qt Designer. Menggunakan antarmuka seret dan lepas yang sederhana, antarmuka GUI dapat dibuat dengan cepat tanpa harus menulis kode. Namun, ini bukan IDE seperti Visual Studio. Karenanya, Qt Designer tidak memiliki fasilitas untuk men-debug dan membangun aplikasi.

Mulai aplikasi Qt Designer yang merupakan bagian dari alat pengembangan dan diinstal di folder skrip lingkungan virtual.

Mulailah mendesain antarmuka GUI dengan memilih File → Menu baru.

Anda kemudian dapat menarik dan melepas widget yang diperlukan dari kotak widget di panel kiri. Anda juga dapat memberikan nilai pada properti widget yang diletakkan di formulir.

Formulir yang dirancang disimpan sebagai demo.ui. File ui ini berisi representasi XML widget dan propertinya dalam desain. Desain ini diterjemahkan ke dalam padanan Python dengan menggunakan utilitas baris perintah pyuic5. Utilitas ini adalah pembungkus untuk modul uic dari toolkit Qt. Penggunaan pyuic5 adalah sebagai berikut -

pyuic5 -x demo.ui -o demo.py

Dalam perintah di atas, -x switch menambahkan sejumlah kecil kode tambahan ke skrip Python yang dihasilkan (dari XML) sehingga menjadi aplikasi mandiri yang dapat dijalankan sendiri.

if __name__ == "__main__":
   import sys
   app = QtGui.QApplication(sys.argv)
   Dialog = QtGui.QDialog()
   ui = Ui_Dialog()
   ui.setupUi(Dialog)
   Dialog.show()
   sys.exit(app.exec_())

Skrip python yang dihasilkan dieksekusi untuk menampilkan kotak dialog berikut -

python demo.py

Pengguna dapat memasukkan data di bidang masukan tetapi mengklik tombol Tambah tidak akan menghasilkan tindakan apa pun karena tidak terkait dengan fungsi apa pun. Bereaksi terhadap respons yang dibuat pengguna disebut sebagaievent handling.

Tidak seperti aplikasi mode konsol, yang dijalankan secara berurutan, aplikasi berbasis GUI digerakkan oleh peristiwa. Fungsi atau metode dijalankan sebagai respons atas tindakan pengguna seperti mengklik tombol, memilih item dari koleksi atau klik mouse, dll., Disebutevents.

Widget yang digunakan untuk membangun antarmuka GUI bertindak sebagai sumber acara tersebut. Setiap widget PyQt, yang diturunkan dari kelas QObject, dirancang untuk memancarkan‘signal’sebagai tanggapan atas satu atau lebih peristiwa. Sinyal itu sendiri tidak melakukan tindakan apa pun. Sebaliknya, ini 'terhubung' ke a‘slot’. Slotnya bisa apa sajacallable Python function.

Menggunakan Editor Sinyal / Slot Qt Designer

Pertama desain formulir sederhana dengan kontrol LineEdit dan tombol tekan.

Diinginkan jika tombol ditekan, isi kotak teks harus dihapus. Widget QLineEdit memiliki metode clear () untuk tujuan ini. Karenanya, tombolnyaclicked sinyal harus disambungkan clear() metode kotak teks.

Untuk memulai, pilih Edit sinyal / slot dari menu Edit (atau tekan F4). Kemudian sorot tombol dengan mouse dan seret kursor ke kotak teks

Saat mouse dilepaskan, dialog yang menunjukkan sinyal tombol dan metode slot akan ditampilkan. Pilih sinyal yang diklik dan metode clear ()

Jendela Signal / Slot Editor di kanan bawah akan menunjukkan hasilnya -

Simpan kode ui dan Build dan Python dari file ui seperti yang ditunjukkan pada kode di bawah ini -

pyuic5 -x signalslot.ui -o signalslot.py

Kode Python yang dihasilkan akan memiliki koneksi antara sinyal dan slot dengan pernyataan berikut -

self.pushButton.clicked.connect(self.lineEdit.clear)

Jalankan signallot.py dan masukkan beberapa teks di LineEdit. Teks akan dihapus jika tombol ditekan.

Membangun Koneksi Slot Sinyal

Alih-alih menggunakan Designer, Anda dapat langsung membuat koneksi slot sinyal dengan mengikuti sintaks -

widget.signal.connect(slot_function)

Misalkan jika suatu fungsi dipanggil ketika sebuah tombol diklik. Di sini, sinyal yang diklik harus dihubungkan ke fungsi yang dapat dipanggil. Itu dapat dicapai dengan salah satu teknik berikut -

button.clicked.connect(slot_function)

Contoh

Dalam contoh berikut, dua objek QPushButton (b1 dan b2) ditambahkan di jendela QDialog. Kami ingin memanggil fungsi b1_clicked () dan b2_clicked () saat mengklik b1 dan b2 masing-masing.

Ketika b1 diklik, sinyal yang diklik () terhubung ke fungsi b1_clicked () -

b1.clicked.connect(b1_clicked())

Ketika b2 diklik, sinyal yang diklik () terhubung ke fungsi b2_clicked ().

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

def window():
   app = QApplication(sys.argv)
   win = QDialog()
   b1 = QPushButton(win)
   b1.setText("Button1")
   b1.move(50,20)
   b1.clicked.connect(b1_clicked)
   
   b2 = QPushButton(win)
   b2.setText("Button2")
   b2.move(50,50)
   b2.clicked.connect(b2_clicked)
   
   win.setGeometry(100,100,200,100)

   win.setWindowTitle("PyQt5")
   win.show()
   sys.exit(app.exec_())

def b1_clicked():
   print ("Button 1 clicked")

def b2_clicked():
   print ("Button 2 clicked")

if __name__ == '__main__':
   window()

Kode di atas menghasilkan keluaran sebagai berikut -

Keluaran

Button 1 clicked
Button 2 clicked

Widget GUI dapat ditempatkan di dalam jendela kontainer dengan menentukan koordinat absolutnya yang diukur dalam piksel. Koordinat relatif terhadap dimensi jendela yang ditentukan oleh metode setGeometry ().

setGeometry () sintaks

QWidget.setGeometry(xpos, ypos, width, height)

Dalam potongan kode berikut, jendela tingkat atas berukuran 300 kali 200 piksel ditampilkan pada posisi (10, 10) di monitor.

import sys
from PyQt4 import QtGui

def window():
   app = QtGui.QApplication(sys.argv)
   w = QtGui.QWidget()
	
   b = QtGui.QPushButton(w)
   b.setText("Hello World!")
   b.move(50,20)
	
   w.setGeometry(10,10,300,200)
   w.setWindowTitle(“PyQt”)
   w.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   window()

SEBUAH PushButton widget ditambahkan di jendela dan ditempatkan pada posisi 50 piksel ke arah kanan dan 20 piksel di bawah posisi kiri atas jendela.

Namun, Penentuan Posisi Mutlak ini tidak cocok karena alasan berikut -

  • Posisi widget tidak berubah meskipun jendela diubah ukurannya.

  • Penampilannya mungkin tidak seragam pada perangkat layar berbeda dengan resolusi berbeda.

  • Modifikasi dalam tata letak sulit karena mungkin perlu mendesain ulang seluruh formulir.

PyQt API menyediakan kelas tata letak untuk pengelolaan yang lebih elegan dari pemosisian widget di dalam penampung. Keunggulan manajer Tata Letak dibandingkan pemosisian absolut adalah -

  • Widget di dalam jendela secara otomatis diubah ukurannya.

  • Memastikan tampilan seragam pada perangkat layar dengan resolusi berbeda.

  • Menambahkan atau menghapus widget secara dinamis dapat dilakukan tanpa harus mendesain ulang.

Toolkit Qt mendefinisikan berbagai tata letak yang dapat digunakan dengan utilitas Qt Designer.

Berikut adalah daftar Kelas yang akan kita bahas satu per satu pada bab ini.

Sr.No. Kelas & Deskripsi
1 QBoxLayout

Kelas QBoxLayout menyusun widget secara vertikal atau horizontal. Kelas turunannya adalah QVBoxLayout (untuk mengatur widget secara vertikal) dan QHBoxLayout (untuk mengatur widget secara horizontal).

2 QGridLayout

Objek kelas GridLayout disajikan dengan kisi sel yang disusun dalam baris dan kolom. Kelas berisi metode addWidget (). Widget apa pun dapat ditambahkan dengan menentukan jumlah baris dan kolom sel.

3 QFormLayout

QFormLayout adalah cara mudah untuk membuat bentuk dua kolom, di mana setiap baris terdiri dari bidang input yang terkait dengan label. Sebagai konvensi, kolom kiri berisi label dan kolom kanan berisi kolom input.

Berikut adalah daftar Widget yang akan kita bahas satu per satu pada bab ini.

Sr Tidak Widget & Deskripsi
1 QLabel

Objek QLabel bertindak sebagai placeholder untuk menampilkan teks atau gambar yang tidak dapat diedit, atau film animasi GIF. Ini juga dapat digunakan sebagai kunci mnemonik untuk widget lain.

2 QLineEdit

Objek QLineEdit adalah kolom input yang paling umum digunakan. Ini menyediakan kotak di mana satu baris teks dapat dimasukkan. Untuk memasukkan teks multi-baris, objek QTextEdit diperlukan.

3 QPushButton

Dalam PyQt API, objek kelas QPushButton menampilkan tombol yang jika diklik dapat diprogram untuk memanggil fungsi tertentu.

4 QRadioButton

Objek kelas QRadioButton menampilkan tombol yang dapat dipilih dengan label teks. Pengguna dapat memilih salah satu dari banyak opsi yang disajikan di formulir. Kelas ini diturunkan dari kelas QAbstractButton.

5 QCheckBox

Kotak persegi panjang sebelum label teks muncul saat objek QCheckBox ditambahkan ke jendela induk. Sama seperti QRadioButton, ini juga merupakan tombol yang dapat dipilih.

6 QComboBox

Objek QComboBox menampilkan daftar dropdown item untuk dipilih. Dibutuhkan ruang layar minimum pada formulir yang diperlukan untuk menampilkan hanya item yang saat ini dipilih.

7 QSpinBox

Objek QSpinBox menyajikan pengguna dengan kotak teks yang menampilkan bilangan bulat dengan tombol atas / bawah di sebelah kanannya.

8 Sinyal & Widget QSlider

Objek kelas QSlider menyajikan pengguna dengan alur di mana pegangan dapat dipindahkan. Ini adalah widget klasik untuk mengontrol nilai yang dibatasi.

9 QMenuBar, QMenu & QAction

QMenuBar horizontal tepat di bawah bilah judul objek QMainWindow disediakan untuk menampilkan objek QMenu.

10 QToolBar

Widget QToolBar adalah panel bergerak yang terdiri dari tombol teks, tombol dengan ikon, atau widget lainnya.

11 QInputDialog

Ini adalah dialog yang telah dikonfigurasi dengan bidang teks dan dua tombol, OK dan Batal. Jendela induk mengumpulkan input di kotak teks setelah pengguna mengklik tombol Ok atau menekan Enter.

12 QFontDialog

Dialog lain yang umum digunakan, widget pemilih font adalah tampilan visual kelas QDialog. Hasil dari dialog ini adalah objek Qfont, yang dapat digunakan oleh jendela induk.

13 QFileDialog

Widget ini adalah dialog pemilih file. Ini memungkinkan pengguna untuk menavigasi melalui sistem file dan memilih file untuk dibuka atau disimpan. Dialog dipanggil baik melalui fungsi statis atau dengan memanggil fungsi exec_ () pada objek dialog.

14 QTab

Jika formulir memiliki terlalu banyak bidang untuk ditampilkan secara bersamaan, mereka dapat diatur di halaman berbeda yang ditempatkan di bawah setiap tab dari Widget Tab. QTabWidget menyediakan bilah tab dan area halaman.

15 QStacked

Fungsi QStackedWidget mirip dengan QTabWidget. Ini juga membantu dalam penggunaan area klien jendela secara efisien.

16 QSplitter

Ini adalah pengelola tata letak tingkat lanjut lainnya yang memungkinkan ukuran widget anak diubah secara dinamis dengan menyeret batas di antara widget tersebut. Kontrol Splitter menyediakan pegangan yang bisa diseret untuk mengubah ukuran kontrol.

17 QDock

Jendela yang dapat dipasang ke dok adalah jendela bawah yang dapat tetap dalam keadaan mengambang atau dapat dipasang ke jendela utama pada posisi yang ditentukan. Objek jendela utama kelas QMainWindow memiliki area yang dikhususkan untuk jendela yang dapat dipasang ke dok.

18 QStatusBar

Objek QMainWindow menyimpan bilah horizontal di bagian bawah sebagai bilah status. Ini digunakan untuk menampilkan informasi status permanen atau kontekstual.

19 QList

Kelas QListWidget adalah antarmuka berbasis item untuk menambah atau menghapus item dari daftar. Setiap item dalam daftar adalah objek QListWidgetItem. ListWidget dapat diatur menjadi multiselectable.

20 QScrollBar

Kontrol scrollbar memungkinkan pengguna mengakses bagian dokumen yang berada di luar area yang dapat dilihat. Ini memberikan indikator visual ke posisi saat ini.

21 QCalendar

Widget QCalendar adalah kontrol pemilih tanggal yang berguna. Ini memberikan tampilan berbasis bulan. Pengguna dapat memilih tanggal dengan menggunakan mouse atau keyboard, default tanggal hari ini.

SEBUAH QDialogwidget menyajikan jendela tingkat atas yang sebagian besar digunakan untuk mengumpulkan respons dari pengguna. Ini dapat dikonfigurasi menjadiModal (di mana ia memblokir jendela induknya) atau Modeless (jendela dialog dapat dilewati).

PyQt API memiliki sejumlah widget Dialog yang telah dikonfigurasi sebelumnya seperti InputDialog, FileDialog, FontDialog, dll.

Contoh

Dalam contoh berikut, WindowModalityatribut jendela Dialog memutuskan apakah itu modal atau modeless. Tombol mana pun pada dialog dapat disetel menjadi default. Dialog dibuang olehQDialog.reject() metode saat pengguna menekan tombol Escape.

Sebuah Tombol Tekan pada jendela QWidget tingkat atas, ketika diklik, menghasilkan jendela Dialog. Kotak dialog tidak memiliki kontrol meminimalkan dan memaksimalkan pada bilah judulnya.

Pengguna tidak dapat membuang kotak dialog ini di latar belakang karena WindowModality diatur ke ApplicationModal.

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

def window():
   app = QApplication(sys.argv)
   w = QWidget()
   btn = QPushButton(w)
   btn.setText("Hello World!")
   btn.move(100,50)
   btn.clicked.connect(showdialog)
   w.setWindowTitle("PyQt Dialog demo")
   w.show()
   sys.exit(app.exec_())

def showdialog():
   dlg = QDialog()
   b1 = QPushButton("ok",dlg)
   b1.move(50,50)
   dlg.setWindowTitle("Dialog") 9. PyQt5 — QDialog Class
   dlg.setWindowModality(Qt.ApplicationModal)
   dlg.exec_()

if __name__ == '__main__':
   window()

Kode di atas menghasilkan keluaran sebagai berikut. Klik tombol di jendela utama dan kotak dialog muncul -

QMessageBoxadalah dialog modal yang umum digunakan untuk menampilkan beberapa pesan informasional dan secara opsional meminta pengguna untuk menanggapi dengan mengklik salah satu tombol standar di atasnya. Setiap tombol standar memiliki teks standar, peran dan mengembalikan angka heksadesimal yang telah ditentukan.

Metode dan enumerasi penting yang terkait dengan kelas QMessageBox diberikan dalam tabel berikut -

Sr.No. Metode & Deskripsi
1

setIcon()

Menampilkan ikon standar yang sesuai dengan tingkat keparahan pesan

  • Question
  • Information
  • Warning
  • Critical
2

setText()

Mengatur teks pesan utama untuk ditampilkan

3

setInformativeText()

Menampilkan informasi tambahan

4

setDetailText()

Dialog menampilkan tombol Detail. Teks ini muncul saat mengkliknya

5

setTitle()

Menampilkan judul dialog kustom

6

setStandardButtons()

Daftar tombol standar yang akan ditampilkan. Setiap tombol dikaitkan dengan

QMessageBox.Ok 0x00000400

QMessageBox. Buka 0x00002000

QMessageBox. Simpan 0x00000800

QMessageBox. Batalkan 0x00400000

QMessageBox.Close 0x00200000

QMessageBox. Ya 0x00004000

QMessageBox. Tidak 0x00010000

QMessageBox.Abort 0x00040000

QMessageBox.Retry 0x00080000

QMessageBox. Abaikan 0x00100000

7

setDefaultButton()

Setel tombol sebagai default. Ini memancarkan sinyal yang diklik jika Enter ditekan

8

setEscapeButton()

Menyetel tombol agar diperlakukan seperti diklik jika tombol escape ditekan

Contoh

Dalam contoh berikut, sinyal klik tombol di jendela tingkat atas, fungsi terhubung menampilkan dialog kotak pesan.

msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setText("This is a message box")
msg.setInformativeText("This is additional information")
msg.setWindowTitle("MessageBox demo")
msg.setDetailedText("The details are as follows:")

fungsi setStandardButton () menampilkan tombol yang diinginkan.

msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

Sinyal buttonClicked () terhubung ke fungsi slot, yang mengidentifikasi judul sumber sinyal.

msg.buttonClicked.connect(msgbtn)

Kode lengkap untuk contoh tersebut adalah sebagai berikut -

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

def window():
   app = QApplication(sys.argv)
   w = QWidget()
   b = QPushButton(w)
   b.setText("Show message!")
   
   b.move(100,50)
   b.clicked.connect(showdialog)
   w.setWindowTitle("PyQt MessageBox demo")
   w.show()
   sys.exit(app.exec_())

def showdialog():
   msg = QMessageBox()
   msg.setIcon(QMessageBox.Information)
   
   msg.setText("This is a message box")
   msg.setInformativeText("This is additional information")
   msg.setWindowTitle("MessageBox demo")
   msg.setDetailedText("The details are as follows:")
   msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
   msg.buttonClicked.connect(msgbtn)

   retval = msg.exec_()

def msgbtn(i):
   print ("Button pressed is:",i.text())

if __name__ == '__main__':
   window()

Kode di atas menghasilkan keluaran sebagai berikut. Kotak Pesan muncul ketika tombol jendela utama diklik -

Jika Anda mengklik tombol Ok atau Batal di MessageBox, output berikut dihasilkan di konsol -

Button pressed is: OK
Button pressed is: Cancel

Aplikasi GUI yang khas mungkin memiliki banyak jendela. Widget bertab dan bertumpuk memungkinkan untuk mengaktifkan satu jendela seperti itu dalam satu waktu. Namun, seringkali pendekatan ini tidak berguna karena tampilan jendela lain disembunyikan.

Salah satu cara untuk menampilkan banyak jendela secara bersamaan adalah dengan membuatnya sebagai jendela independen. Ini disebut sebagai SDI(single Document Interface). Ini membutuhkan lebih banyak sumber daya memori karena setiap jendela mungkin memiliki sistem menu, bilah alat, dll.

MDI (Multiple Document Interface)aplikasi mengkonsumsi sumber daya memori yang lebih sedikit. Sub jendela diletakkan di dalam wadah utama dengan hubungan satu sama lain. Widget penampung dipanggilQMdiArea.

Widget QMdiArea umumnya menempati widget pusat objek QMainWondow. Jendela anak di area ini adalah contohQMdiSubWindowkelas. Dimungkinkan untuk menyetel QWidget apa pun sebagai widget internal objek subWindow. Sub-jendela di area MDI dapat diatur dalam gaya bertingkat atau ubin.

Tabel berikut mencantumkan metode penting kelas QMdiArea dan kelas QMdiSubWindow -

Sr.No. Metode & Deskripsi
1

addSubWindow()

Menambahkan widget sebagai subwindow baru di area MDI

2

removeSubWindow()

Menghapus widget yang merupakan widget internal subwindow

3

setActiveSubWindow()

Mengaktifkan subwindow

4

cascadeSubWindows()

Atur subwindows di MDiArea secara bertingkat

5

tileSubWindows()

Atur subwindows di MDiArea dengan gaya ubin

6

closeActiveSubWindow()

Menutup subwindow aktif

7

subWindowList()

Mengembalikan daftar subwindows di MDI Area

8

setWidget()

Menyetel QWidget sebagai widget internal dari instance QMdiSubwindow

Objek QMdiArea memancarkan sinyal subWindowActivated () sedangkan sinyal windowStateChanged () dipancarkan oleh objek QMdisubWindow.

Contoh

Dalam contoh berikut, jendela tingkat atas yang terdiri dari QMainWindow memiliki menu dan MdiArea.

self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
bar = self.menuBar()
file = bar.addMenu("File")

file.addAction("New")
file.addAction("cascade")
file.addAction("Tiled")

Sinyal Triggered () dari menu terhubung ke fungsi windowaction ().

file.triggered[QAction].connect(self.windowaction)

Tindakan baru menu menambahkan subwindow di area MDI dengan judul yang memiliki nomor tambahan.

MainWindow.count = MainWindow.count+1
sub = QMdiSubWindow()
sub.setWidget(QTextEdit())
sub.setWindowTitle("subwindow"+str(MainWindow.count))
self.mdi.addSubWindow(sub)
sub.show()

Tombol bertingkat dan ubin dari menu mengatur subwindows yang saat ini ditampilkan masing-masing dalam mode bertingkat dan berubin.

Kode lengkapnya adalah sebagai berikut -

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

class MainWindow(QMainWindow):
   count = 0

   def __init__(self, parent = None):
      super(MainWindow, self).__init__(parent)
      self.mdi = QMdiArea()
      self.setCentralWidget(self.mdi)
      bar = self.menuBar()

      file = bar.addMenu("File")
      file.addAction("New")
      file.addAction("cascade")
      file.addAction("Tiled")
      file.triggered[QAction].connect(self.windowaction)
      self.setWindowTitle("MDI demo")

   def windowaction(self, q):
      print ("triggered")
   
      if q.text() == "New":
         MainWindow.count = MainWindow.count+1
         sub = QMdiSubWindow()
         sub.setWidget(QTextEdit())
         sub.setWindowTitle("subwindow"+str(MainWindow.count))
         self.mdi.addSubWindow(sub)
         sub.show()

      if q.text() == "cascade":
         self.mdi.cascadeSubWindows()

      if q.text() == "Tiled":
         self.mdi.tileSubWindows()

def main():
   app = QApplication(sys.argv)
   ex = MainWindow()
   ex.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

Jalankan kode di atas dan tiga jendela dalam formasi bertingkat dan ubin -

Penyediaan drag and dropsangat intuitif bagi pengguna. Itu ditemukan di banyak aplikasi desktop di mana pengguna dapat menyalin atau memindahkan objek dari satu jendela ke jendela lainnya.

Transfer data seret dan lepas berbasis MIME didasarkan pada QDrag kelas. QMimeDataobjek mengaitkan data dengan tipe MIME yang sesuai. Itu disimpan di clipboard dan kemudian digunakan dalam proses seret dan lepas.

Fungsi kelas QMimeData berikut memungkinkan tipe MIME untuk dideteksi dan digunakan dengan nyaman.

Penguji Getter Setter Jenis MIME
hasText () teks() setText () teks / biasa
hasHtml () html () setHtml () teks / html
hasUrls () url () setUrls () teks / daftar uri
hasImage () imageData () setImageData () gambar / *
hasColor () colorData () setColorData () aplikasi / x-warna

Banyak objek QWidget mendukung aktivitas seret dan lepas. Mereka yang memungkinkan datanya diseret memiliki setDragEnabled () yang harus disetel ke true. Di sisi lain, widget harus merespons peristiwa seret dan lepas untuk menyimpan data yang diseret ke dalamnya.

  • DragEnterEvent menyediakan acara yang dikirim ke widget target saat tindakan menyeret memasukkannya.

  • DragMoveEvent digunakan saat aksi seret dan lepas sedang berlangsung.

  • DragLeaveEvent dibuat saat tindakan seret dan lepas meninggalkan widget.

  • DropEvent, di sisi lain, terjadi saat penurunan selesai. Tindakan yang diusulkan acara tersebut dapat diterima atau ditolak secara bersyarat.

Contoh

Dalam kode berikut, file DragEnterEventmemverifikasi apakah data MIME acara berisi teks. Jika ya, tindakan yang diusulkan acara diterima dan teks ditambahkan sebagai item baru di ComboBox.

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

class combo(QComboBox):
   def __init__(self, title, parent):
      super(combo, self).__init__( parent)
      self.setAcceptDrops(True)

   def dragEnterEvent(self, e):
      print (e)

      if e.mimeData().hasText():
         e.accept()
      else:
         e.ignore()

   def dropEvent(self, e):
      self.addItem(e.mimeData().text())

class Example(QWidget):
   def __init__(self):
      super(Example, self).__init__()

      self.initUI()

   def initUI(self):
      lo = QFormLayout()
      lo.addRow(QLabel("Type some text in textbox and drag it into combo box"))
   
      edit = QLineEdit()
      edit.setDragEnabled(True)
      com = combo("Button", self)
      lo.addRow(edit,com)
      self.setLayout(lo)
      self.setWindowTitle('Simple drag and drop')
def main():
   app = QApplication(sys.argv)
   ex = Example()
   ex.show()
   app.exec_()

if __name__ == '__main__':
   main()

Kode di atas menghasilkan keluaran sebagai berikut -

Pustaka PyQt5 berisi QtSqlmodul. Ini adalah sistem kelas yang rumit untuk berkomunikasi dengan banyak database berbasis SQL. NyaQSqlDatabasemenyediakan akses melalui objek Connection. Berikut adalah daftar driver SQL yang tersedia saat ini -

Sr.No. Jenis & Deskripsi Driver
1

QDB2

IBM DB2

2

QIBASE

Pengemudi Borland InterBase

3

QMYSQL

Driver MySQL

4

QOCI

Driver Antarmuka Panggilan Oracle

5

QODBC

Driver ODBC (termasuk Microsoft SQL Server)

6

QPSQL

Driver PostgreSQL

7

QSQLITE

SQLite versi 3 atau lebih tinggi

8

QSQLITE2

SQLite versi 2

Contoh

Untuk bab ini, koneksi dengan database SQLite dibuat menggunakan metode statis -

db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sports.db')

Metode lain dari kelas QSqlDatabase adalah sebagai berikut -

Sr.No. Metode & Deskripsi
1

setDatabaseName()

Menetapkan nama database yang dicari koneksi

2

setHostName()

Menetapkan nama host tempat database diinstal

3

setUserName()

Menentukan nama pengguna untuk koneksi

4

setPassword()

Setel kata sandi objek koneksi jika ada

5

commit()

Melakukan transaksi dan mengembalikan nilai true jika berhasil

6

rollback()

Mengembalikan transaksi database

7

close()

Tutup koneksi

QSqlQuerykelas memiliki fungsionalitas untuk menjalankan dan memanipulasi perintah SQL. Baik jenis kueri SQL DDL dan DML dapat dijalankan. Langkah pertama adalah membuat database SQlite menggunakan pernyataan berikut -

db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sportsdatabase.db')

Selanjutnya, dapatkan objek Query dengan QSqlQuery() metode dan memanggil metode yang paling penting exec_ (), yang mengambil argumen string yang berisi pernyataan SQL untuk dieksekusi.

query = QtSql.QSqlQuery()
query.exec_("create table sportsmen(id int primary key, " "firstname varchar(20), lastname varchar(20))")

Skrip berikut membuat database SQLite sports.db dengan tabel olahragawan yang diisi dengan lima catatan.

import sys
from PyQt5.QtSql import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

def createDB():
   db = QSqlDatabase.addDatabase('QSQLITE')
   db.setDatabaseName('sportsdatabase.db')

   if not db.open():
      msg = QMessageBox()
      msg.setIcon(QMessageBox.Critical)
      msg.setText("Error in Database Creation")
      retval = msg.exec_()
      return False
   query = QSqlQuery()

   query.exec_("create table sportsmen(
      id int primary key, ""firstname varchar(20), lastname varchar(20))")

   query.exec_("insert into sportsmen values(101, 'Roger', 'Federer')")
   query.exec_("insert into sportsmen values(102, 'Christiano', 'Ronaldo')")
   query.exec_("insert into sportsmen values(103, 'Ussain', 'Bolt')")
   query.exec_("insert into sportsmen values(104, 'Sachin', 'Tendulkar')")
   query.exec_("insert into sportsmen values(105, 'Saina', 'Nehwal')")
   return True

if __name__ == '__main__':
   app = QApplication(sys.argv)
   createDB()

Untuk mengonfirmasi bahwa database SQLite dibuat dengan catatan di atas ditambahkan dalam tabel olahragawan di dalamnya, gunakan utilitas SQLite Gui yang disebut SQLiteStudio.

QSqlTableModelkelas di PyQt adalah antarmuka tingkat tinggi yang menyediakan model data yang dapat diedit untuk membaca dan menulis catatan dalam satu tabel. Model ini digunakan untuk mengisi fileQTableViewobyek. Ini menyajikan kepada pengguna tampilan yang dapat digulir dan diedit yang dapat diletakkan di jendela tingkat atas apa pun.

Objek QSqlTableModel dideklarasikan dengan cara berikut -

model = QtSql.QSqlTableModel()

Strategi pengeditannya dapat diatur ke salah satu dari berikut ini -

QSqlTableModel.OnFieldChange Semua perubahan akan segera diterapkan
QSqlTableModel.OnRowChange Perubahan akan diterapkan saat pengguna memilih baris yang berbeda
QSqlTableModel.OnManualSubmit Semua perubahan akan di-cache sampai submitAll () atau revertAll () dipanggil

Contoh

Dalam contoh berikut, tabel olahragawan digunakan sebagai model dan strateginya ditetapkan sebagai -

model.setTable('sportsmen') 
model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
   model.select()

Kelas QTableView adalah bagian dari kerangka Model / View di PyQt. Objek QTableView dibuat sebagai berikut -

view = QtGui.QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view

Objek QTableView dan dua widget QPushButton ini ditambahkan ke jendela QDialog tingkat atas. Sinyal clicked () dari tombol add terhubung ke addrow () yang melakukan insertRow () pada tabel model.

button.clicked.connect(addrow)
def addrow():
   print model.rowCount()
   ret = model.insertRows(model.rowCount(), 1)
   print ret

Slot yang terkait dengan tombol hapus menjalankan fungsi lambda yang menghapus baris, yang dipilih oleh pengguna.

btn1.clicked.connect(lambda: model.removeRow(view1.currentIndex().row()))

Kode lengkapnya adalah sebagai berikut -

import sys
from PyQt5.QtSql import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

def initializeModel(model):
   model.setTable('sportsmen')
   model.setEditStrategy(QSqlTableModel.OnFieldChange)
   model.select()
   model.setHeaderData(0, Qt.Horizontal, "ID")
   model.setHeaderData(1, Qt.Horizontal, "First name")
   model.setHeaderData(2, Qt.Horizontal, "Last name")

def createView(title, model):
   view = QTableView()
   view.setModel(model)
   view.setWindowTitle(title)
   return view

def addrow():
   print (model.rowCount())
   ret = model.insertRows(model.rowCount(), 1)
   print (ret)

def findrow(i):
   delrow = i.row()

if __name__ == '__main__':
   app = QApplication(sys.argv)
   db = QSqlDatabase.addDatabase('QSQLITE')
   db.setDatabaseName('sportsdatabase.db')
   model = QSqlTableModel()
   delrow = -1
   initializeModel(model)

   view1 = createView("Table Model (View 1)", model)
   view1.clicked.connect(findrow)

   dlg = QDialog()
   layout = QVBoxLayout()
   layout.addWidget(view1)

   button = QPushButton("Add a row")
   button.clicked.connect(addrow)
   layout.addWidget(button)

   btn1 = QPushButton("del a row")
   btn1.clicked.connect(lambda: model.removeRow(view1.currentIndex().row()))
   layout.addWidget(btn1)

   dlg.setLayout(layout)
   dlg.setWindowTitle("Database Demo")
   dlg.show()
   sys.exit(app.exec_())

Kode di atas menghasilkan keluaran sebagai berikut -

Coba tambahkan dan hapus beberapa catatan dan kembali ke SQLiteStudio untuk mengonfirmasi transaksi.

Semua QWidgetkelas-kelas di PyQt adalah sub-kelas dari kelas QPaintDevice. SEBUAHQPaintDeviceadalah abstraksi dari ruang dua dimensi yang dapat digambar menggunakan QPainter. Dimensi perangkat cat diukur dalam piksel mulai dari sudut kiri atas.

QPainterkelas melakukan pengecatan tingkat rendah pada widget dan perangkat lain yang dapat dicat seperti printer. Biasanya, ini digunakan dalam acara cat widget. ItuQPaintEvent terjadi setiap kali tampilan widget diperbarui.

Pelukis diaktifkan dengan memanggil begin() metode, sedangkan end()metode menonaktifkannya. Di antaranya, pola yang diinginkan dilukis dengan metode yang sesuai seperti yang tercantum dalam tabel berikut.

Sr.No. Metode & Deskripsi
1

begin()

Mulai mengecat pada perangkat target

2

drawArc()

Menggambar busur antara sudut awal dan akhir

3

drawEllipse()

Menggambar elips di dalam persegi panjang

4

drawLine()

Menarik garis dengan koordinat titik akhir yang ditentukan

5

drawPixmap()

Ekstrak pixmap dari file gambar dan menampilkannya pada posisi yang ditentukan

6

drwaPolygon()

Menggambar poligon menggunakan larik koordinat

7

drawRect()

Menggambar persegi panjang mulai dari koordinat kiri atas dengan lebar dan tinggi yang ditentukan

8

drawText()

Menampilkan teks pada koordinat tertentu

9

fillRect()

Mengisi persegi panjang dengan parameter QColor

10

setBrush()

Menetapkan gaya kuas untuk melukis

11

setPen()

Mengatur warna, ukuran dan gaya pena yang akan digunakan untuk menggambar

Contoh

Dalam kode berikut, berbagai metode metode menggambar PyQt digunakan.

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

class Example(QWidget):
   def __init__(self):
      super(Example, self).__init__()
      self.initUI()

   def initUI(self):
      self.text = "hello world"
      self.setGeometry(100,100, 400,300)
      self.setWindowTitle('Draw Demo')
      self.show()

   def paintEvent(self, event):
      qp = QPainter()
      qp.begin(self)
      qp.setPen(QColor(Qt.red))
      qp.setFont(QFont('Arial', 20))
      qp.drawText(10,50, "hello Python")
      qp.setPen(QColor(Qt.blue))
      qp.drawLine(10,100,100,100)
      qp.drawRect(10,150,150,100)
      qp.setPen(QColor(Qt.yellow))
      qp.drawEllipse(100,50,100,50)
      qp.drawPixmap(220,10,QPixmap("pythonlogo.png"))
      qp.fillRect(20,175,130,70,QBrush(Qt.SolidPattern))
      qp.end()

def main():
   app = QApplication(sys.argv)
   ex = Example()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

Kode di atas menghasilkan keluaran sebagai berikut -

Dalam bab ini, kita akan mempelajari Konstanta Gaya Kuas.

Konstanta Gaya Kuas

Diberikan di bawah ini adalah Konstanta Gaya Kuas -

Qt.NoBrush Tidak ada pola kuas
Qt.SolidPattern Warna seragam
Qt.Dense1Pattern Pola kuas yang sangat padat
Qt.HorPattern Garis horizontal
Qt.VerPattern Garis vertikal
Qt.CrossPattern Melintasi garis horizontal dan vertikal
Qt.BDiagPattern Garis diagonal mundur
Qt.FDiagPattern Maju garis diagonal
Qt.DiagCrossPattern Menyilangkan garis diagonal

Gaya QColor Standar

Diberikan di bawah ini adalah Gaya QColor Standar -

Qt.NoBrush Tidak ada pola kuas
Qt.SolidPattern Warna seragam
Qt.Dense1Pattern Pola kuas yang sangat padat
Qt.HorPattern Garis horizontal
Qt.VerPattern Garis vertikal
Qt.CrossPattern Melintasi garis horizontal dan vertikal
Qt.BDiagPattern Garis diagonal mundur
Qt.FDiagPattern Maju garis diagonal
Qt.DiagCrossPattern Menyilangkan garis diagonal

Objek QColor Standar

Diberikan di bawah ini adalah Objek QColor Standar -

Qt.white
Qt.black
Qt.red
Qt.darkRed
Qt. Hijau
Qt.darkGreen
Qt.blue
Qt.cyan
Qt.magenta
Qt. Kuning
Qt.darkYellow
Qt.gray

Itu QClipboardclass menyediakan akses ke papan klip di seluruh sistem yang menawarkan mekanisme sederhana untuk menyalin dan menempelkan data antar aplikasi. Tindakannya mirip denganQDrag kelas dan menggunakan tipe data serupa.

Kelas QApplication memiliki metode statis clipboard()yang mengembalikan referensi ke objek clipboard. Semua jenis MimeData dapat disalin ke atau ditempel dari papan klip.

Berikut adalah metode kelas clipboard yang umum digunakan -

Sr.No. Metode & Deskripsi
1

clear()

Menghapus konten papan klip

2

setImage()

Menyalin QImage ke clipboard

3

setMimeData()

Setel data MIME ke clipboard

4

setPixmap()

Menyalin objek Pixmap di clipboard

5

setText()

Menyalin QString di clipboard

6

text()

Mengambil teks dari clipboard

Sinyal yang terkait dengan objek clipboard adalah -

Sr.No. Metode & Deskripsi
1

dataChanged()

Setiap kali data papan klip berubah

Contoh

Dalam contoh berikut, dua objek TextEdit dan dua Pushbuttons ditambahkan ke jendela tingkat atas.

Untuk memulai dengan objek clipboard dibuat. Metode copy () objek textedit menyalin data ke clipboard sistem. Ketika tombol Tempel diklik, itu mengambil data papan klip dan menempelkannya di objek textedit lainnya.

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

class Example(QWidget):
   def __init__(self):
      super(Example, self).__init__()

      self.initUI()

   def initUI(self):
      hbox = QVBoxLayout()
      self.edit1=QTextEdit()
      hbox.addWidget(self.edit1)
      self.btn1=QPushButton("Copy")
      hbox.addWidget(self.btn1)
      self.edit2=QTextEdit()
      self.btn2=QPushButton("Paste")
      hbox.addWidget(self.edit2)
      hbox.addWidget(self.btn2)
      self.btn1.clicked.connect(self.copytext)
      self.btn2.clicked.connect(self.pastetext)
      self.setLayout(hbox)
      
      self.setGeometry(300, 300, 300, 200)
      self.setWindowTitle('Clipboard')
      self.show()
      
   def copytext(self):

      #clipboard.setText(self.edit1.copy())
      self.edit1.copy()
      print (clipboard.text())

      msg=QMessageBox()
      msg.setText(clipboard.text()+" copied on clipboard")
      msg.exec_()

   def pastetext(self):
      self.edit2.setText(clipboard.text())

app = QApplication(sys.argv)
clipboard=app.clipboard()
ex = Example()
ex.setWindowTitle("clipboard Example")
sys.exit(app.exec_())

Kode di atas menghasilkan keluaran sebagai berikut -

QPixmapclass menyediakan representasi gambar di luar layar. Ini dapat digunakan sebagai objek QPaintDevice atau dapat dimuat ke widget lain, biasanya label atau tombol.

Qt API memiliki kelas serupa lainnya QImage, yang dioptimalkan untuk I / O dan manipulasi piksel lainnya. Pixmap, di sisi lain, dioptimalkan untuk ditampilkan di layar. Kedua format dapat dipertukarkan.

Jenis file gambar yang dapat dibaca menjadi objek QPixmap adalah sebagai berikut -

BMP Bitmap Windows
GIF Graphic Interchange Format (opsional)
JPG Kelompok Ahli Fotografi Bersama
JPEG Kelompok Ahli Fotografi Bersama
PNG Grafik Jaringan Portabel
PBM Bitmap portabel
PGM Graymap portabel
PPM Pixmap portabel
XBM X11 Bitmap
XPM X11 Pixmap

Metode berikut berguna dalam menangani objek QPixmap -

Sr.No. Metode & Deskripsi
1

copy()

Menyalin data pixmap dari objek QRect

2

fromImage()

Mengonversi objek QImage menjadi QPixmap

3

grabWidget()

Membuat peta piksel dari widget yang diberikan

4

grabWindow()

Buat peta piksel data di jendela

5

Load()

Memuat file gambar sebagai pixmap

6

save()

Menyimpan objek QPixmap sebagai file

7

toImage

Mengonversi QPixmap menjadi QImage

Penggunaan paling umum dari QPixmap adalah untuk menampilkan gambar pada label / tombol.

Contoh

Contoh berikut menunjukkan gambar yang ditampilkan pada QLabel dengan menggunakan setPixmap() metode.

Kode lengkapnya adalah sebagai berikut -

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

def window():
   app = QApplication(sys.argv)
   win = QWidget()
   l1 = QLabel()
   l1.setPixmap(QPixmap("python.png"))

   vbox = QVBoxLayout()
   vbox.addWidget(l1)
   win.setLayout(vbox)
   win.setWindowTitle("QPixmap Demo")
   win.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   window()

Kode di atas menghasilkan keluaran sebagai berikut -