PyQt5'i ilk öğrenmeye başladığımda Google'da aradığım şeylerin büyük çoğunluğunun cevabı C++ ile yazılmış Qt dokümantasyonundan geliyordu. Python için bir satır kod bulmak bazen saatler alıyordu. Bu biraz can sıkıcı, ama zamanla alışıyorsunuz.
Neden PyQt5 diye sorulursa: Tkinter ile başlamıştım ama Tkinter'ın görünümü 2001'de kalmış gibi. PySide6 daha modern, lisans açısından da daha esnek, ama o sırada PyQt5 üzerine daha fazla kaynak vardı. Wxpython'a da baktım, bir daha bakmadım.
Sinyal-Slot Mekanizması
Qt'nin en güçlü özelliği bence sinyal-slot sistemi. Event-driven programlama için çok temiz bir yaklaşım. Ama ilk gördüğünüzde neden bu şekilde çalıştığını anlamak zaman alıyor.
button.clicked.connect(self.on_button_clicked)Başta garip geliyor. Ama bir süre sonra bu sistemin ne kadar temiz olduğunu anlıyorsunuz. Sinyaller ve slotlar arasında doğrudan bağlantı kurabiliyorsunuz, birden fazla slot bağlayabiliyorsunuz, hatta sinyalleri sinyallere bağlayabiliyorsunuz.
Threading Meselesi
PyQt5'te UI thread'i dışında UI güncellemesi yapamıyorsunuz. Bunu anlamadan önce uygulamamın çalışırken donmasına neden oldu. Arka planda bir işlem çalışırken ekranı güncellemek istiyorsanız QThread kullanmanız gerekiyor:
class Worker(QThread):\n progress = pyqtSignal(int)\n finished = pyqtSignal(str)\n\n def run(self):\n for i in range(100):\n time.sleep(0.05)\n self.progress.emit(i)\n self.finished.emit('Tamamlandi')Mantığı oturduktan sonra oldukça temiz bir çözüm.
PyInstaller ile Dağıtım
Uygulamayı .exe'ye çevirmek için PyInstaller kullandım.
pyinstaller --onefile --windowed main.pyAma gerçek hayat bu kadar basit değil. Bazı bağımlılıklar hidden import olarak eklenmesi gerekiyor. Antivirüsler bazen false positive veriyor. Bir .spec dosyası oluşturup her şeyi oradan yönetmek daha stabil.
Sonuç
PyQt5 güçlü bir araç. Kendi bilgisayarında çalışan, internet gerektirmeyen araçlar yapmak için hâlâ en iyi seçeneklerden biri.