Ostatnio brałem udział w rozmowach na temat tworzenia szablonu Quickly dla aplikacji Qt i QtQuick Ubuntu. Chodzi o to, aby tworzenie aplikacji Qt od koncepcji do pakietu było tak łatwe, jak teraz dzięki GTK, na której oparty jest szablon aplikacji Ubuntu Quickly.
Intencją jest nadal używanie Pythona jako podstawowego języka programowania, a pierwsze pytanie, które przychodzi na myśl, brzmi: które wiązania Pythona powinniśmy używać PyQt lub PySide ?
Chciałbym usłyszeć od ludzi doświadczonych w obu technologiach, jakie są zalety i wady każdego z nich, jak dobrze każdy jest utrzymany, jak dobrze mapowany jest interfejs API Qt na powiązania itp.
Dzięki!
Odpowiedzi:
Zarówno PyQt4, jak i PySide mają bardzo podobne odwzorowania do API Qt. Istnieją jednak pewne różnice, o których moje opinie są opisane poniżej:
Konserwacja
Oba są dobrze utrzymane. PySide wydaje obecnie o wiele więcej regularnych wydań: Myślę, że jest ściślej związany z Qt niż PyQt4, a ponieważ nowy projekt ma w tej chwili bardziej aktywną społeczność. To jednak tylko moje wrażenie i może się mylić.
PyQt4 ma dostępną opcję komercyjnego wsparcia (nie wiem, czy dotyczy to PySide, czy nie).
Licencja
PyQt4 jest wydany na licencji komercyjnej lub GPL ; PySide jest wydany na licencji LGPL . W przypadku zastosowań komercyjnych jest to znacząca różnica.
Wersje API i Python
PyQt4 obsługuje dwa różne interfejsy API. Wersja API 1 jest domyślna dla aplikacji python 2.x, a wersja API 2 jest domyślna dla aplikacji python 3.x.
PySide obsługuje tylko jeden interfejs API, który jest w przybliżeniu równoważny z interfejsem API PyQt4 w wersji 2. Interfejs API w wersji 2 (lub PySide API) jest znacznie przyjemniejszy w obsłudze niż interfejs API w PyQt4 w wersji 1. W API w wersji 1 masz dużo kodu, który rzuca python ciągi do
QtCore.QString
si ponownie. W wersji API 2 (i PySide) po prostu używasz ciągów Pythona. Poniżej znajdziesz prosty sposób przełączania między PyQt4 i PySide, jeśli chcesz grać z obydwoma.Większość kodu, który piszę, wydaje się działać równie dobrze w PyQt4 i PySide. Historycznie zawsze używałem PyQt4 dla graficznych interfejsów Python, ale większość nowych rzeczy, które piszę, teraz korzystają z PySide (głównie ze względu na bardziej elastyczne licencjonowanie). Z pewnością polecam wypróbowanie obu i zobacz, jak je znajdziesz. Jeśli używasz QtVariant.py (poniżej), przełączanie się między nimi jest banalne, a kiedy podejmiesz decyzję, będzie tylko jeden plik, który wymaga aktualizacji.
Dokumentacja
Dokumentacja dla PyQt4 i PySide jest generowana automatycznie z głównej dokumentacji Qt . Moim zdaniem dokumentacja PySide stanowi lepszą reprezentację tego, czego faktycznie używasz, ale w praktyce zwykle i tak używam dokumentacji Qt (dość łatwo mentalnie przetłumaczyć dokumentację C ++ na python).
Biblioteki zewnętrzne
Jeśli korzystasz z bibliotek zewnętrznych, niektóre nie działają jeszcze z PySide. Szczerze mówiąc, nie ma wielu osób, które muszą współpracować z PySide, ale kilka lat temu napisałem kod wykorzystujący skręcone (z reaktorem Qt) i matplotlib, co zmusiło mnie do rezygnacji z używania PyQt4 zamiast PySide . Myślę, że jest całkiem prawdopodobne, że biblioteki te zostaną zaktualizowane do obsługi obu, ale nie sprawdziłem.
Uczynienie kodu działającym z PyQt4 lub PySide
Zakładając, że używasz języka Python 2.x, możesz dość łatwo dostosować kod do PySide i PyQt4, tworząc plik QtVariant.py i używając:
lub cokolwiek. Plik QtVariant.py, którego używam, wygląda następująco:
źródło
return QtUiTools.QUiLoader().load(uifile)
, biorąc ścieżkę pliku bez żadnej płyty QFile.