Baru-baru ini saya terlibat dalam percakapan tentang membuat templat Cepat untuk aplikasi Qt dan QtQuick Ubuntu. Idenya adalah untuk membuatnya mudah untuk mengembangkan aplikasi Qt dari konsep ke paket seperti sekarang dengan GTK, yang menjadi dasar templat aplikasi Cepat Ubuntu.
Tujuannya masih menggunakan Python sebagai bahasa pemrograman dasar, dan pertanyaan pertama yang muncul di benak saya adalah: binding Python mana yang harus kita gunakan PyQt atau PySide ?
Saya ingin mendengar dari orang-orang yang berpengalaman dalam kedua teknologi apa pro dan kontra dari masing-masing, seberapa baik setiap perawatan, seberapa baik pemetaan Qt API terhadap binding, dll.
Terima kasih!
Jawaban:
Baik PyQt4 dan PySide memiliki pemetaan yang sangat mirip dengan Qt API. Namun, ada beberapa perbedaan, pendapat saya yang dijelaskan di bawah ini:
Pemeliharaan
Keduanya terpelihara dengan baik. PySide menghasilkan lebih banyak rilis reguler saat ini: Saya pikir ini lebih terkait erat dengan Qt daripada PyQt4 dan sebagai proyek yang lebih baru memiliki komunitas yang lebih aktif saat ini. Namun, itu hanya kesan saya dan mungkin salah.
PyQt4 memiliki opsi dukungan komersial yang tersedia (saya tidak tahu apakah ini berlaku untuk PySide atau tidak).
Lisensi
PyQt4 dirilis di bawah lisensi komersial atau GPL ; PySide dirilis di bawah LGPL . Untuk aplikasi komersial, ini adalah perbedaan yang signifikan.
Versi API dan Python
PyQt4 mendukung dua API yang berbeda. API versi 1 adalah default untuk aplikasi python 2.x dan API versi 2 adalah default untuk aplikasi python 3.x.
PySide hanya mendukung satu API, yang kira-kira setara dengan API versi PyQt4 2. API versi 2 (atau API PySide) jauh lebih baik untuk digunakan daripada versi API PyQt4 1. Dalam API versi 1 Anda memiliki banyak kode yang menggunakan python string ke
QtCore.QString
s dan kembali lagi. Di API versi 2 (dan PySide) Anda cukup menggunakan string python. Lihat di bawah untuk cara sederhana beralih antara PyQt4 dan PySide jika Anda ingin bermain dengan keduanya.Sebagian besar kode yang saya tulis tampaknya berfungsi sama baiknya di PyQt4 dan PySide. Secara historis, saya selalu menggunakan PyQt4 untuk python GUI tetapi kebanyakan hal baru yang saya tulis sekarang menggunakan PySide (terutama karena lisensi yang lebih fleksibel). Saya pasti akan merekomendasikan Anda mencoba keduanya dan melihat bagaimana Anda menemukannya. Jika Anda menggunakan QtVariant.py (di bawah), beralih di antara mereka adalah sepele dan ketika Anda membuat keputusan hanya akan ada satu file yang perlu diperbarui.
Dokumentasi
Dokumentasi untuk PyQt4 dan PySide dihasilkan secara otomatis dari dokumentasi Qt utama . Menurut pendapat saya, dokumentasi PySide adalah representasi yang lebih baik dari apa yang sebenarnya Anda gunakan, tetapi dalam praktiknya saya cenderung hanya menggunakan dokumentasi Qt (sangat mudah untuk secara mental menerjemahkan dokumentasi C ++ ke python).
Perpustakaan Eksternal
Jika Anda menggunakan perpustakaan eksternal, beberapa belum bekerja dengan PySide. Tidak banyak yang Anda perlu bekerja dengan PySide untuk jujur, tetapi beberapa tahun yang lalu saya menulis beberapa kode yang menggunakan bengkok (dengan reaktor Qt) dan matplotlib dan yang memaksa saya menggunakan PyQt4 daripada PySide . Saya pikir sangat mungkin bahwa perpustakaan ini akan diperbarui untuk mendukung keduanya sekarang, tetapi saya belum memeriksanya.
Membuat Kode berfungsi baik dengan PyQt4 atau PySide
Dengan asumsi Anda menggunakan python 2.x, Anda dapat dengan mudah membuat kode Anda kompatibel dengan PySide dan PyQt4 dengan membuat QtVariant.py dan menggunakan:
atau terserah. QtVariant.py yang saya gunakan terlihat seperti ini:
sumber
return QtUiTools.QUiLoader().load(uifile)
, mengambil filepath tanpa boilerplate QFile itu.