Menginstal PyQt5 di Linux
Untuk menginstal PyQt5 di Ubuntu versi terbaru, jalankan perintah di bawah ini:
$ sudo apt install python3-pyqt5Jika Anda menggunakan distribusi Linux lainnya, cari istilah "Pyqt5" di manajer paket dan instal dari sana. Atau, Anda dapat menginstal PyQt5 dari manajer paket pip menggunakan perintah di bawah ini:
$ pip instal pyqt5Perhatikan bahwa di beberapa distribusi, Anda mungkin harus menggunakan perintah pip3 untuk menginstal PyQt5 dengan benar.
Kode Lengkap
Saya memposting kode lengkap sebelumnya sehingga Anda dapat lebih memahami konteks untuk masing-masing cuplikan kode yang dijelaskan nanti di artikel. Jika Anda terbiasa dengan Python dan PyQt5, Anda bisa merujuk ke kode di bawah ini dan lewati penjelasannya.
#!/usr/bin/env python3sistem impor
dari PyQt5.QtWidgets mengimpor QWidget, QApplication, QVBoxLayout, QHBoxLayout
dari PyQt5.QtWidgets mengimpor QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
dari PyQt5.QtGui mengimpor QKeySequence
dari PyQt5 impor Qt
Jendela kelas (QWidget):
def __init__(sendiri):
super().__init__()
diri.file_path = Tidak ada
diri.open_new_file_shortcut = QSshortcut(QKeySequence('Ctrl+O'), sendiri)
diri.buka_new_file_shortcut.diaktifkan.menghubungkan (diri sendiri).buka_file_baru)
diri.save_current_file_shortcut = QShortcut(QKeySequence('Ctrl+S'), sendiri)
diri.save_current_file_shortcut.diaktifkan.menghubungkan (diri sendiri).save_current_file)
vbox = QVBoxLayout()
teks = "File Tanpa Judul"
diri.judul = QLabel(teks)
diri.judul.setWordWrap(Benar)
diri.judul.setAlignment(Qt.Qt.SejajarkanPusat)
kotak v.tambahkan Widget (diri sendiri).judul)
diri.setTata letak (vbox)
diri.scrollable_text_area = QTextEdit()
kotak v.tambahkan Widget (diri sendiri).scrollable_text_area)
def open_new_file(sendiri):
diri.file_path, filter_type = QFileDialog.getOpenFileName(sendiri, "Buka file baru",
"", "Semua data (*)")
jika diri sendiri.file_path:
dengan terbuka (diri sendiri).file_path, "r") sebagai f:
file_isi = f.Baca()
diri.judul.setTeks(sendiri.file_path)
diri.scrollable_text_area.setText(file_contents)
lain:
diri.invalid_path_alert_message()
def save_current_file(sendiri):
jika tidak sendiri.file_path:
new_file_path, filter_type = QFileDialog.getSaveFileName(self, "Simpan file ini
sebagai… ", "", "Semua file (*)")
jika new_file_path:
diri.file_path = new_file_path
lain:
diri.invalid_path_alert_message()
kembali Salah
file_contents = diri sendiri.scrollable_text_area.toPlainText()
dengan terbuka (diri sendiri).file_path, "w") sebagai f:
f.tulis(file_contents)
diri.judul.setTeks(sendiri.file_path)
def closeEvent(diri, acara):
kotak pesan = QMessageBox()
title = "Keluar Aplikasi?"
pesan = "PERINGATAN !!\n\nJika Anda keluar tanpa menyimpan, perubahan apa pun yang dibuat pada file
akan hilang.\n\nSimpan file sebelum keluar?"
balasan = kotak pesan.pertanyaan (diri, judul, pesan, kotak pesan.Ya | kotak pesan.Tidak |
kotak pesan.Batal, Kotak Pesan.Membatalkan)
jika membalas == kotak pesan.Iya:
return_value = diri sendiri.save_current_file()
jika return_value == Salah:
peristiwa.mengabaikan()
balasan elif == kotak pesan.Tidak:
peristiwa.menerima()
lain:
peristiwa.mengabaikan()
def invalid_path_alert_message(sendiri):
kotak pesan = QMessageBox()
kotak pesan.setWindowTitle("File tidak valid")
kotak pesan.setText("Nama file atau jalur yang dipilih tidak valid. Silakan pilih
berkas yang valid.")
kotak pesan.eksekutif()
jika __name__ == '__main__':
aplikasi = QAplikasi(sys.argv)
w = Jendela()
w.tampilkan Dimaksimalkan()
sistem.keluar (aplikasi.eksekutif_())
Penjelasan
Bagian pertama dari kode hanya mengimpor modul yang akan digunakan di seluruh sampel:
sistem impordari PyQt5.QtWidgets mengimpor QWidget, QApplication, QVBoxLayout, QHBoxLayout
dari PyQt5.QtWidgets mengimpor QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
dari PyQt5.QtGui mengimpor QKeySequence
dari PyQt5 impor Qt
Di bagian selanjutnya, kelas baru yang disebut "Jendela" dibuat yang mewarisi dari kelas "QWidget". Kelas QWidget menyediakan komponen grafis yang umum digunakan di Qt. Dengan menggunakan "super" Anda dapat memastikan bahwa objek Qt induk dikembalikan.
Jendela kelas (QWidget):def __init__(sendiri):
super().__init__()
Beberapa variabel didefinisikan di bagian selanjutnya. Jalur file diatur ke "Tidak Ada" secara default dan pintasan untuk membuka file menggunakan
diri.open_new_file_shortcut = QSshortcut(QKeySequence('Ctrl+O'), sendiri)
diri.buka_new_file_shortcut.diaktifkan.menghubungkan (diri sendiri).buka_file_baru)
diri.save_current_file_shortcut = QShortcut(QKeySequence('Ctrl+S'), sendiri)
diri.save_current_file_shortcut.diaktifkan.menghubungkan (diri sendiri).save_current_file)
Menggunakan kelas QVBoxLayout, tata letak baru dibuat di mana widget anak akan ditambahkan. Label rata tengah diatur untuk nama file default menggunakan kelas QLabel.
vbox = QVBoxLayout()teks = "File Tanpa Judul"
diri.judul = QLabel(teks)
diri.judul.setWordWrap(Benar)
diri.judul.setAlignment(Qt.Qt.SejajarkanPusat)
kotak v.tambahkan Widget (diri sendiri).judul)
diri.setTata letak (vbox)
Selanjutnya, area teks ditambahkan ke tata letak menggunakan objek QTextEdit. Widget QTextEdit akan memberi Anda area yang dapat diedit dan dapat digulir untuk digunakan. Widget ini mendukung salin, tempel, potong, batalkan, ulangi, pilih semua, dll. pintasan keyboard. Anda juga dapat menggunakan menu konteks klik kanan di dalam area teks.
diri.scrollable_text_area = QTextEdit()kotak v.tambahkan Widget (diri sendiri).scrollable_text_area)
Metode "open_new_fie" dipanggil ketika pengguna selesai
diri.file_path, filter_type = QFileDialog.getOpenFileName(sendiri, "Buka file baru", "",
"Semua data (*)")
jika diri sendiri.file_path:
dengan terbuka (diri sendiri).file_path, "r") sebagai f:
file_isi = f.Baca()
diri.judul.setTeks(sendiri.file_path)
diri.scrollable_text_area.setText(file_contents)
lain:
diri.invalid_path_alert_message()
Metode "save_current_file" dipanggil setiap kali pengguna selesai
jika tidak sendiri.file_path:
new_file_path, filter_type = QFileDialog.getSaveFileName(self, "Simpan file ini
sebagai… ", "", "Semua file (*)")
jika new_file_path:
diri.file_path = new_file_path
lain:
diri.invalid_path_alert_message()
kembali Salah
file_contents = diri sendiri.scrollable_text_area.toPlainText()
dengan terbuka (diri sendiri).file_path, "w") sebagai f:
f.tulis(file_contents)
diri.judul.setTeks(sendiri.file_path)
Metode "closeEvent" adalah bagian dari API penanganan peristiwa PyQt5. Metode ini dipanggil setiap kali pengguna mencoba menutup jendela menggunakan tombol silang atau dengan menekan
kotak pesan = QMessageBox()
title = "Keluar Aplikasi?"
pesan = "PERINGATAN !!\n\nJika Anda keluar tanpa menyimpan, setiap perubahan yang dibuat pada file akan
tersesat.\n\nSimpan file sebelum keluar?"
balasan = kotak pesan.pertanyaan (diri, judul, pesan, kotak pesan.Ya | kotak pesan.Tidak |
kotak pesan.Batal, Kotak Pesan.Membatalkan)
jika membalas == kotak pesan.Iya:
return_value = diri sendiri.save_current_file()
jika return_value == Salah:
peristiwa.mengabaikan()
balasan elif == kotak pesan.Tidak:
peristiwa.menerima()
lain:
peristiwa.mengabaikan()
Kotak peringatan "file tidak valid" tidak memiliki lonceng dan peluit. Itu hanya menyampaikan pesan bahwa jalur file tidak dapat ditentukan.
def invalid_path_alert_message(sendiri):kotak pesan = QMessageBox()
kotak pesan.setWindowTitle("File tidak valid")
kotak pesan.setText("Nama file atau jalur yang dipilih tidak valid. Silakan pilih file yang valid.")
kotak pesan.eksekutif()
Terakhir, loop aplikasi utama untuk penanganan event dan menggambar widget dimulai dengan menggunakan ".exec_()” metode.
jika __name__ == '__main__':aplikasi = QAplikasi(sys.argv)
w = Jendela()
w.tampilkan Dimaksimalkan()
sistem.keluar (aplikasi.eksekutif_())
Menjalankan Aplikasi
Cukup simpan kode lengkap ke file teks, atur ekstensi file ke “.py", tandai file yang dapat dieksekusi dan jalankan untuk meluncurkan aplikasi. Misalnya, jika nama file adalah “simple_text_editor.py", Anda perlu menjalankan dua perintah berikut:
$ chmod +x simple_text_editor.py$ ./simple_text_editor.py
Hal yang Dapat Anda Lakukan untuk Meningkatkan Kode
Kode yang dijelaskan di atas berfungsi dengan baik untuk editor teks sederhana. Namun, ini mungkin tidak berguna untuk tujuan praktis karena tidak memiliki banyak fitur yang biasa terlihat di editor teks yang bagus. Anda dapat meningkatkan kode dengan menambahkan fitur baru seperti nomor baris, penyorotan baris, penyorotan sintaks, banyak tab, penyimpanan sesi, bilah alat, menu tarik-turun, deteksi perubahan buffer, dll.
Kesimpulan
Artikel ini terutama berfokus pada penyediaan landasan awal untuk membuat aplikasi PyQt. Jika Anda menemukan kesalahan dalam kode atau ingin menyarankan sesuatu, umpan balik dipersilahkan.