Jump to content

PySide

From FreeCAD Documentation
This page is a translated version of the page PySide and the translation is 100% complete.

Wprowadzenie

Biblioteka PySide jest wrapperem Pythona dla wieloplatformowego zestawu narzędzi graficznego interfejsu użytkownika (GUI) Qt. FreeCAD używa Qt jako swojego głównego zestawu narzędzi do GUI. Qt samo w sobie jest więcej niż tylko zestawem narzędzi do GUI, jest zbiorem bibliotek C++ dla wielu różnych celów. Na przykład można tworzyć sieci z komponentami biblioteki Qt, wszystko to dostępne w Pythonie poprzez PySide. Każdy interfejs graficzny, który można utworzyć w C++, można również tworzyć i modyfikować w Pythonie. Zaletą używania Pythona jest to, że interfejsy Qt można rozwijać i testować na żywo, ponieważ nie musimy kompilować plików źródłowych.

Zalecany sposób importu PySide (dowolnej wersji) we FreeCAD to:

from PySide import QtCore, QtGui, QtWidgets

Wersje Qt oraz PySide

  • Wersja 1.0 Qt została wydana w połowie lat 90.
  • Wersja 4.0 Qt została wydana w 2005 r. a seria 4.x została oficjalnie wycofana w 2015 r.
    • Wrapper Python dla Qt4.x nazywa się PySide
  • Wersja 5.0 Qt została wydana w 2012 r. a seria 5.x została oficjalnie wycofana w 2020 r.
    • Wrapper Pythona dla Qt5.x nazywa się PySide2
  • Wersja 6.0 Qt została wydana w 2020 r., jest to obecna seria wydań
    • Wrapper Pythona dla Qt6.x nazywa się PySide6

Przykłady stworzone z PySide. Po lewej: proste okno dialogowe. Po prawej: bardziej złożone okno dialogowe z wykresami.

Przewiń na górę strony

FreeCAD i PySide

Oryginalna idea stojąca za FreeCAD polegała na połączeniu Cas.CADE (jądro geometryczne), Qt (zestaw narzędzi GUI) i Pythona w celu stworzenia darmowego parametrycznego programu CAD 3D z wbudowanym silnikiem skryptowym. Było to na początku lat 2000., czyli przed pojawieniem się PySide, dlatego przez pierwszą dekadę istnienia FreeCAD używano innego wrappera – PyQt. PySide powstało, aby rozwiązać problemy licencyjne związane z PyQt, a przejście FreeCAD na PySide nastąpiło w 2013 roku (commit 1dc122dc9a).

Jeśli chciałbyś wiedzieć z jakiej wersji Qt korzysta twoja instalacja FreeCAD, okno Informacje o FreeCAD zawiera listę wersji z uwzględnieniem Qt.

Aby uzyskać więcej informacji, zobacz strony:

Podczas instalacji programu FreeCAD zostanie zainstalowane zarówno Qt, jak i odpowiednie PySide jako część pakietu. Jeśli samodzielnie kompilujesz program, musisz upewnić się, że pasujące do siebie wersje obu bibliotek są zainstalowane, aby FreeCAD działał poprawnie. Oczywiście PySide będzie działać tylko wtedy, gdy obecne jest Qt.

Przewiń na górę strony

Kompatybilność wielu wersji

Główna różnica między bibliotekami PySide a późniejszymi PySide2 i PySide6 polega na przestrzeniach nazw. PySide (Qt4) udostępnia główne przestrzenie nazw QtGui i QtCore, natomiast PySide2 (Qt5) i PySide6 (Qt6) wprowadziły dodatkową przestrzeń nazw QtWidgets, w której obecnie znajdują się wszystkie widgety; wcześniej były one umieszczone w przestrzeni nazw QtGui.

Podejście FreeCAD do obsługi różnych wersji Qt/PySide polega na nazywaniu ich wszystkich PySide, co tak naprawdę należy rozumieć jako PySideX. Nie ma znaczenia, która wersja Qt/PySide jest zainstalowana, wszystkie są importowane jako PySide.

Shim obsługuje różnice między wersjami. Ten shim PySide jest zlokalizowany w ścieżce Ext/ instalacji programu FreeCAD skompilowanego dla Qt5/Qt6.

/usr/share/freecad/Ext/PySide

Moduł ten po prostu importuje niezbędne klasy z PySide2/6 i umieszcza je w przestrzeni nazw PySide. To podejście zostało wybrane ze względu na jego możliwość zapewnienia wstecznej kompatybilności z perspektywy Qt4.

PySide2.QtCore -> PySide.QtCore
PySide2.QtGui -> PySide.QtGui
PySide2.QtWidgets -> PySide.QtWidgets
PySide2.QtSvg -> PySide.QtSvg
PySide2.QtUiTools -> PySide.QtUiTools

Z tego powodu, klasy PySide2.QtWidgets są również umieszczone w przestrzeni nazw PySide.QtGui.

PySide2.QtWidgets.QCheckBox -> PySide.QtGui.QCheckBox

Ale obecnie zalecanym sposobem jest użycie nowoczesnej przestrzeni nazw.

from PySide import QtCore, QtGui, QtWidgets

my_check_box = QtWidgets.QCheckBox()

Przewiń na górę strony

Przykłady użycia PySide

Przykłady PySide są podzielone na 3 części, różniące się stopniem zaawansowania w zakresie PySide, Pythona i wewnętrznych mechanizmów FreeCAD. Pierwsza strona zawiera przegląd PySide; druga i trzecia strona to w większości przykłady kodu na różnych poziomach.

Oczekuje się, że te przykłady będą pomocne na początek, a następnie użytkownik może korzystać z innych zasobów dostępnych online lub z oficjalnej dokumentacji.

Przewiń na górę strony

Dokumentacja

Istnieją pewne różnice w obsłudze widżetów między różnymi wersjami. Programiści powinni być świadomi tych niezgodności i sprawdzić oficjalną dokumentację, jeśli coś nie działa zgodnie z oczekiwaniami na danej platformie. Chociaż zdarza się to rzadko, czasami może być konieczne tworzenie wersjonowanych wywołań poprzez instrukcje warunkowe if.

Dokumentacja PySide odnosi się do klas w stylu Pythona; jednak ponieważ Qt jest pierwotnie biblioteką C++, te same informacje powinny być dostępne w odpowiedniej dokumentacji C++.

Przewiń na górę strony