Memasang PyQt5 di Linux
Untuk memasang PyQt5 dalam versi terbaru Ubuntu, jalankan arahan di bawah:
$ sudo apt pasangkan python3-pyqt5Sekiranya anda menggunakan sebaran Linux lain, cari istilah "Pyqt5" di pengurus pakej dan pasangkan dari sana. Sebagai alternatif, anda boleh memasang PyQt5 dari pengurus pakej pip menggunakan arahan di bawah:
$ pip memasang pyqt5Perhatikan bahawa dalam beberapa pengedaran, anda mungkin harus menggunakan perintah pip3 untuk memasang PyQt5 dengan betul.
Kod Penuh
Saya mengeposkan kod penuh terlebih dahulu supaya anda dapat memahami konteks untuk coretan kod individu yang dijelaskan kemudian dalam artikel. Sekiranya anda biasa dengan Python dan PyQt5, anda hanya boleh merujuk kepada kod di bawah ini dan melangkau penjelasannya.
#!/ usr / bin / env python3import sys
dari PyQt5.QtWidgets mengimport QWidget, QApplication, QVBoxLayout, QHBoxLayout
dari PyQt5.QtWidgets mengimport QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
dari PyQt5.QtGui mengimport QKeySequence
dari PyQt5 import Qt
tetingkap kelas (QWidget):
def __init __ (diri):
super ().__di dalamnya__()
diri.file_path = Tiada
diri.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), diri)
diri.buka_new_file_shortcut.diaktifkan.menyambung (diri.buka_baru_file)
diri.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), diri)
diri.save_current_file_shortcut.diaktifkan.menyambung (diri.save_current_file)
vbox = QVBoxLayout ()
teks = "Fail Tanpa Judul"
diri.tajuk = QLabel (teks)
diri.tajuk.setWordWrap (Betul)
diri.tajuk.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (diri.tajuk)
diri.setLayout (vbox)
diri.scrollable_text_area = QTextEdit ()
vbox.addWidget (diri.scrollable_text_area)
def open_new_file (diri):
diri.file_path, filter_type = QFileDialog.getOpenFileName (diri, "Buka fail baru",
"", "Semua fail (*)")
sekiranya diri.file_path:
dengan terbuka (diri.file_path, "r") sebagai f:
fail_contents = f.baca ()
diri.tajuk.setText (diri.fail_path)
diri.scrollable_text_area.setText (fail_contents)
lain:
diri.tidak sah_path_alert_message ()
def save_current_file (diri):
jika bukan diri.file_path:
new_file_path, filter_type = QFileDialog.getSaveFileName (diri, "Simpan fail ini
sebagai… "," "," Semua fail (*) ")
jika_file_path baru:
diri.file_path = new_file_path
lain:
diri.tidak sah_path_alert_message ()
kembali Palsu
file_contents = diri.scrollable_text_area.kePlainTeks ()
dengan terbuka (diri.file_path, "w") sebagai f:
f.tulis (kandungan_kod)
diri.tajuk.setText (diri.fail_path)
def closeEvent (diri, acara):
messageBox = QMessageBox ()
tajuk = "Berhenti Permohonan?"
mesej = "AMARAN !!\ n \ nJika anda berhenti tanpa menyimpan, perubahan yang dibuat pada fail
akan hilang.\ n \ nSimpan fail sebelum berhenti?"
balas = messageBox.soalan (diri, tajuk, mesej, messageBox.Ya | Kotak mesej.Tidak |
Kotak mesej.Batalkan, messageBox.Batal)
jika membalas == messageBox.Ya:
return_value = diri.save_current_file ()
jika return_value == Salah:
peristiwa.abai()
balasan elif == messageBox.Tidak:
peristiwa.terima ()
lain:
peristiwa.abai()
def valid_path_alert_message (diri):
messageBox = QMessageBox ()
Kotak mesej.setWindowTitle ("Fail tidak sah")
Kotak mesej.setText ("Nama fail atau jalan yang dipilih tidak sah. Sila pilih a
fail yang sah.")
Kotak mesej.exec ()
jika __nama__ == '__main__':
app = QApplication (sys.berhujah)
w = Tingkap ()
w.tayanganMaksimum ()
sys.keluar (aplikasi.exec_ ())
Penjelasan
Bahagian pertama kod hanya mengimport modul yang akan digunakan di seluruh sampel:
import sysdari PyQt5.QtWidgets mengimport QWidget, QApplication, QVBoxLayout, QHBoxLayout
dari PyQt5.QtWidgets mengimport QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
dari PyQt5.QtGui mengimport QKeySequence
dari PyQt5 import Qt
Di bahagian seterusnya, kelas baru yang disebut "Window" dibuat yang mewarisi dari kelas "QWidget". Kelas QWidget menyediakan komponen grafik yang biasa digunakan di Qt. Dengan menggunakan "super" anda dapat memastikan bahawa objek Qt induk dikembalikan.
tetingkap kelas (QWidget):def __init __ (diri):
super ().__di dalamnya__()
Beberapa pemboleh ubah ditakrifkan di bahagian seterusnya. Laluan fail ditetapkan ke "Tidak ada" secara lalai dan jalan pintas untuk membuka fail menggunakan
diri.open_new_file_shortcut = QShortcut (QKeySequence ('Ctrl + O'), diri)
diri.buka_new_file_shortcut.diaktifkan.menyambung (diri.buka_baru_file)
diri.save_current_file_shortcut = QShortcut (QKeySequence ('Ctrl + S'), diri)
diri.save_current_file_shortcut.diaktifkan.menyambung (diri.save_current_file)
Menggunakan kelas QVBoxLayout, susun atur baru dibuat untuk widget anak yang akan ditambahkan. Label sejajar tengah ditetapkan untuk nama fail lalai menggunakan kelas QLabel.
vbox = QVBoxLayout ()teks = "Fail Tanpa Judul"
diri.tajuk = QLabel (teks)
diri.tajuk.setWordWrap (Betul)
diri.tajuk.setAlignment (Qt.Qt.AlignCenter)
vbox.addWidget (diri.tajuk)
diri.setLayout (vbox)
Seterusnya, kawasan teks ditambahkan ke susun atur menggunakan objek QTextEdit. Widget QTextEdit akan memberi anda kawasan yang boleh diedit dan boleh ditatal untuk dikerjakan. Widget ini menyokong salinan khas, tampal, potong, buat asal, buat semula, pilih-semua dll. pintasan papan kekunci. Anda juga dapat menggunakan menu konteks klik kanan dalam kawasan teks.
diri.scrollable_text_area = QTextEdit ()vbox.addWidget (diri.scrollable_text_area)
Kaedah "open_new_fie" dipanggil apabila pengguna selesai
diri.file_path, filter_type = QFileDialog.getOpenFileName (diri, "Buka fail baru", "",
"Semua fail (*)")
sekiranya diri.file_path:
dengan terbuka (diri.file_path, "r") sebagai f:
fail_contents = f.baca ()
diri.tajuk.setText (diri.fail_path)
diri.scrollable_text_area.setText (fail_contents)
lain:
diri.tidak sah_path_alert_message ()
Kaedah "save_current_file" dipanggil setiap kali pengguna selesai
jika bukan diri.file_path:
new_file_path, filter_type = QFileDialog.getSaveFileName (diri, "Simpan fail ini
sebagai… "," "," Semua fail (*) ")
jika_file_path baru:
diri.file_path = new_file_path
lain:
diri.tidak sah_path_alert_message ()
kembali Palsu
file_contents = diri.scrollable_text_area.kePlainTeks ()
dengan terbuka (diri.file_path, "w") sebagai f:
f.tulis (kandungan_kod)
diri.tajuk.setText (diri.fail_path)
Kaedah "closeEvent" adalah sebahagian daripada API pengendalian acara PyQt5. Kaedah ini dipanggil setiap kali pengguna cuba menutup tetingkap menggunakan butang silang atau dengan menekan
messageBox = QMessageBox ()
tajuk = "Berhenti Permohonan?"
mesej = "AMARAN !!\ n \ nJika anda berhenti tanpa menyimpan, perubahan yang dibuat pada fail akan berlaku
hilang.\ n \ nSimpan fail sebelum berhenti?"
balas = messageBox.soalan (diri, tajuk, mesej, messageBox.Ya | Kotak mesej.Tidak |
Kotak mesej.Batalkan, messageBox.Batal)
jika membalas == messageBox.Ya:
return_value = diri.save_current_file ()
jika return_value == Salah:
peristiwa.abai()
balasan elif == messageBox.Tidak:
peristiwa.terima ()
lain:
peristiwa.abai()
Kotak amaran "fail tidak sah" tidak mempunyai loceng dan wisel. Ini hanya menyampaikan mesej bahawa jalan fail tidak dapat ditentukan.
def valid_path_alert_message (diri):messageBox = QMessageBox ()
Kotak mesej.setWindowTitle ("Fail tidak sah")
Kotak mesej.setText ("Nama fail atau jalan yang dipilih tidak sah. Sila pilih fail yang sah.")
Kotak mesej.exec ()
Terakhir, gelung aplikasi utama untuk pengendalian acara dan menggambar widget dimulakan dengan menggunakan ".kaedah exec_ () ”.
jika __nama__ == '__main__':app = QApplication (sys.berhujah)
w = Tingkap ()
w.tayanganMaksimum ()
sys.keluar (aplikasi.exec_ ())
Menjalankan Aplikasi
Cukup simpan kod penuh ke fail teks, tetapkan peluasan fail ke ".py ”, tandakan fail yang boleh dilaksanakan dan jalankan untuk melancarkan aplikasi. Contohnya, jika nama file adalah “simple_text_editor.py ”, anda perlu menjalankan dua perintah berikut:
$ chmod + x simple_text_editor.py$ ./ simple_text_editor.py
Perkara yang Boleh Anda Lakukan untuk Memperbaiki Kod
Kod yang dijelaskan di atas berfungsi dengan baik untuk penyunting teks tanpa tulang. Walau bagaimanapun, ia mungkin tidak berguna untuk tujuan praktikal kerana ia tidak mempunyai banyak ciri yang biasa dilihat pada editor teks yang baik. Anda boleh meningkatkan kod dengan menambahkan ciri baru seperti nombor baris, penyorotan baris, penyorotan sintaks, beberapa tab, penjimatan sesi, bar alat, menu lungsur, pengesanan perubahan penyangga dll.
Kesimpulannya
Artikel ini memfokuskan terutamanya pada penyediaan permulaan untuk membuat aplikasi PyQt. Sekiranya anda menemui kesilapan dalam kod atau ingin mencadangkan sesuatu, maklum balas diterima.