PySide/it: Difference between revisions

From FreeCAD Documentation
(Created page with "Di solito, il metodo preferito consiste nel creare un oggetto UI (interfaccia utente) che faccia tutta la configurazione del proprio widget in una sola volta. Il grande vantag...")
(Created page with "La documentazione di PySide fa riferimento alle classi in stile Python; tuttavia, poiché Qt è originariamente una libreria C++, le stesse informazioni dovrebbero essere disp...")
 
(78 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages/>
{{Note|PySide|Di recente, FreeCAD è stato modificato internamente per usare [http://qt-project.org/wiki/PySide PySide] al posto di PyQt. Questo cambiamento è stato fatto soprattutto per risolvere una questione di licenze, PySide ha una licenza LGPL che è più compatibile con FreeeCAD. A parte questo, PySide funziona esattamente come PyQt, e in genere in FreeCAD si può utilizzare indifferentemente uno dei due, come si preferisce. Se si decide di utilizzare PySide, basta sostituire tutti i "PyQt" con "PySide" nel codice di esempio sottostante. Vedere le
[http://qt-project.org/wiki/Differences_Between_PySide_and_PyQt Differenze tra PySide e PyQt]}}


{{docnav/it
[http://en.wikipedia.org/wiki/PyQt PyQt] è un modulo di Python che consente alle applicazioni in Python di creare, accedere e modificare le applicazioni [http://en.wikipedia.org/wiki/Qt_(toolkit) Qt]. Può essere utilizzato, per esempio, per creare i programmi Qt in Python oppure per accedere e modificare l'interfaccia di un'applicazione Qt in esecuzione, come FreeCAD.
|[[Pivy/it|Pivy]]
|[[Interface_creation/it|Creare l'interfaccia]]
}}


{{TOCright}}
Quindi, usando il modulo PyQt all'interno di FreeCAD, si ha il controllo completo della sua interfaccia. È possibile ad esempio:
* Aggiungere propri pannelli, widget e barre degli strumenti
* Aggiungere o nascondere gli elementi nei pannelli già esistenti
* Modificare, reindirizzare o aggiungere connessioni tra tutti questi elementi


==Introduzione==
PyQt ha una ampia [http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/classes.html documentazione API], e in rete ci sono molti tutorial che spiegano come funziona.


La libreria [[PySide/it|PySide]] dà accesso al toolkit Qt dell'interfaccia utente grafica multipiattaforma (GUI) di [[Python/it|Python]]. Qt è una raccolta di librerie C++, ma con l'aiuto di PySide, gli stessi componenti possono essere usati da [[Python/it|Python]]. Ogni interfaccia grafica che può essere creata in C++, può anche essere creata e modificata in Python. Un vantaggio dell'utilizzo di Python è che le interfacce Qt possono essere sviluppate e testate dal vivo, poiché non è necessario compilare i file sorgente.
Se si desidera lavorare sull'interfaccia di FreeCAD, la prima cosa da fare è creare un riferimento alla finestra principale di FreeCAD:

Quando si installa FreeCAD, si dovrebbe ottenere sia Qt che PySide come parte del pacchetto. Se si sta [[Compiling/it|compilando]], si deve verificare che queste due librerie siano installate affinché FreeCAD funzioni correttamente. Naturalmente, PySide funzionerà solo se è presente Qt.

In passato, FreeCAD utilizzava PyQt, un'altra associazione Qt per Python, ma nel 2013 ([https://github.com/FreeCAD/FreeCAD/commit/1dc122dc9a commit 1dc122dc9a]) il progetto è migrato a PySide perché ha una [[licence/it|licenza]] più permissiva.

Per ulteriori informazioni, vedere:
* [https://it.wikipedia.org/wiki/PySide Wikipedia:PySide]
* [https://wiki.qt.io/Differences_Between_PySide_and_PyQt Differenze tra PySide e PyQt]

[[File:PySideScreenSnapshot1.jpg]] [[File:PySideScreenSnapshot2.jpg]]
{{Caption|Esempi creati con PySide. A sinistra: una semplice finestra di dialogo. A destra: una finestra di dialogo più complessa con grafici.}}

==PySide in FreeCAD con Qt5==

FreeCAD è stato sviluppato per essere utilizzato con Python 2 e Qt4. Poiché queste due librerie sono diventate obsolete, FreeCAD è passato a Python 3 e Qt5. Nella maggior parte dei casi questa transizione è stata eseguita senza la necessità di interrompere la compatibilità con le versioni precedenti.

Normalmente, il modulo {{incode|PySide}} fornisce il supporto per Qt4, mentre {{incode|PySide2}} fornisce il supporto per Qt5. Tuttavia, in FreeCAD non è necessario utilizzare {{incode|PySide2}} direttamente, poiché è incluso uno speciale modulo {{incode|PySide}} per gestire Qt5.

Questo modulo {{incode|PySide}} si trova nella directory {{incode|Ext/}} di un'installazione di FreeCAD compilata per Qt5.
{{Code|code=
{{Code|code=
/usr/share/freecad/Ext/PySide
import sys
from PySide import QtGui ,QtCore
app = QtGui.qApp
mw = app.activeWindow()
}}
}}

In seguito, è possibile ad esempio sfogliare tutti i widget dell'interfaccia:
Questo modulo importa solo le classi necessarie da {{incode|PySide2}} e le inserisce nel namespace {{incode|PySide}}. Ciò significa che nella maggior parte dei casi lo stesso codice può essere utilizzato sia con Qt4 che con Qt5, purché utilizziamo il singolo modulo {{incode|PySide}}.
{{Code|code=
{{Code|code=
PySide2.QtCore -> PySide.QtCore
for child in mw.children():
PySide2.QtGui -> PySide.QtGui
print 'widget name = ', child.objectName(), ', widget type = ', child
PySide2.QtSvg -> PySide.QtSvg
PySide2.QtUiTools -> PySide.QtUiTools
}}
}}
Di solito, in una interfaccia Qt, i widget sono annidati in widget "contenitori", in questo modo i figli della finestra principale possono contenere altri figli. Secondo il tipo di widget, si possono fare un sacco di cose. Controllare la documentazione delle API per vedere quello che è possibile fare.


L'unico aspetto insolito è che le classi {{incode|PySide2.QtWidgets}} sono posizionate nel namespace {{incode|PySide.QtGui}}.
Per aggiungere un nuovo widget, ad esempio un dockWidget (che può essere posizionato in uno dei pannelli laterali di FreeCAD), fare semplicemente:
{{Code|code=
{{Code|code=
PySide2.QtWidgets.QCheckBox -> PySide.QtGui.QCheckBox
myWidget = QtGui.QDockWidget()
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myWidget)
}}
}}
{{Top}}
In seguito, si può continuare e aggiungere altre cose direttamente al proprio widget:
==Esempi di utilizzo di PySide==
{{Code|code=
myWidget.setObjectName("my Nice New Widget")
myWidget.resize(QtCore.QSize(300,100)) # sets size of the widget
label = QtGui.QLabel("Hello World", myWidget) # creates a label
label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size
label.setObjectName("myLabel") # sets its name, so it can be found by name
}}
Di solito, il metodo preferito consiste nel creare un oggetto UI (interfaccia utente) che faccia tutta la configurazione del proprio widget in una sola volta. Il grande vantaggio è che tale oggetto dell'interfaccia utente può essere [[Dialog creation/it|creato graficamente]] con il programma Qt Designer. Un tipico oggetto generato da Qt Designer si presenta come questo:
{{Code|code=
class myWidget_Ui(object):
def setupUi(self, myWidget):
myWidget.setObjectName("my Nice New Widget")
myWidget.resize(QtCore.QSize(300,100).expandedTo(myWidget.minimumSizeHint())) # sets size of the widget


* [[PySide_Beginner_Examples/it|Esempi di livello base di PySide]], Hello World, avvisi, inserire un testo, inserire un numero.
self.label = QtGui.QLabel(myWidget) # creates a label
* [[PySide_Intermediate_Examples/it|Esempi di livello medio di PySide]], dimensionare le finestre, nascondere i widget, i menu popup, la posizione del mouse, gli eventi del mouse.
self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size
* [[PySide_Advanced_Examples/it|Esempi di livello avanzato di PySide]], widget etc.
self.label.setObjectName("label") # sets its name, so it can be found by name


Gli esempi di PySide sono divisi in 3 parti, differenziate per livello di esposizione a PySide, Python e alle parti incorporate in FreeCAD. La prima pagina contiene una panoramica e le basi della materia, fornisce una descrizione di PySide e di come è organizzato, mentre la seconda e la terza pagina contengono soprattutto degli esempi di codice di diversi livelli.
def retranslateUi(self, draftToolbar): # built-in QT function that manages translations of widgets
myWidget.setWindowTitle(QtGui.QApplication.translate("myWidget", "My Widget", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("myWidget", "Welcome to my new widget!", None, QtGui.QApplication.UnicodeUTF8))
}}
To use it, you just need to apply it to your freshly created widget like this:
{{Code|code=
app = QtGui.qApp
FCmw = app.activeWindow()
myNewFreeCADWidget = QtGui.QDockWidget() # create a new dckwidget
myNewFreeCADWidget.ui = myWidget_Ui() # load the Ui script
myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window
}}
{{docnav|Pivy|Scripted objects}}


Si ritiene che questi esempi siano utili per iniziare, dopodiché l'utente potrà consultare altre risorse online o la documentazione ufficiale.
[[Category:Poweruser Documentation]]
{{Top}}
==Documentazione==


Ci sono alcune differenze nella gestione dei widget in Qt4 (PySide) e Qt5 (PySide2). Il programmatore dovrebbe essere consapevole di queste incompatibilità e dovrebbe consultare la documentazione ufficiale se qualcosa non sembra funzionare come previsto su una data piattaforma. Tuttavia, Qt4 è considerato obsoleto, quindi la maggior parte dello sviluppo dovrebbe mirare a Qt5 e Python 3.
{{clear}}

<languages/>
La documentazione di PySide fa riferimento alle classi in stile Python; tuttavia, poiché Qt è originariamente una libreria C++, le stesse informazioni dovrebbero essere disponibili nel riferimento C++ corrispondente.
* [https://doc.qt.io/qtforpython/modules.html Moduli Qt] disponibile da PySide2 (Qt5).
* [https://doc.qt.io/qt-5/modules-cpp.html Tutte le classi Qt per modulo] in Qt5 per C++.
* [https://deptinfo-ensip.univ-poitiers.fr/ENS/pyside-docs/index.html Moduli Qt] disponibile da PySide (Qt4).
{{Top}}

{{docnav/it
|[[Pivy/it|Pivy]]
|[[Interface_creation/it|Creare l'interfaccia]]
}}

{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]

Latest revision as of 13:33, 11 December 2022

Introduzione

La libreria PySide dà accesso al toolkit Qt dell'interfaccia utente grafica multipiattaforma (GUI) di Python. Qt è una raccolta di librerie C++, ma con l'aiuto di PySide, gli stessi componenti possono essere usati da Python. Ogni interfaccia grafica che può essere creata in C++, può anche essere creata e modificata in Python. Un vantaggio dell'utilizzo di Python è che le interfacce Qt possono essere sviluppate e testate dal vivo, poiché non è necessario compilare i file sorgente.

Quando si installa FreeCAD, si dovrebbe ottenere sia Qt che PySide come parte del pacchetto. Se si sta compilando, si deve verificare che queste due librerie siano installate affinché FreeCAD funzioni correttamente. Naturalmente, PySide funzionerà solo se è presente Qt.

In passato, FreeCAD utilizzava PyQt, un'altra associazione Qt per Python, ma nel 2013 (commit 1dc122dc9a) il progetto è migrato a PySide perché ha una licenza più permissiva.

Per ulteriori informazioni, vedere:

Esempi creati con PySide. A sinistra: una semplice finestra di dialogo. A destra: una finestra di dialogo più complessa con grafici.

PySide in FreeCAD con Qt5

FreeCAD è stato sviluppato per essere utilizzato con Python 2 e Qt4. Poiché queste due librerie sono diventate obsolete, FreeCAD è passato a Python 3 e Qt5. Nella maggior parte dei casi questa transizione è stata eseguita senza la necessità di interrompere la compatibilità con le versioni precedenti.

Normalmente, il modulo PySide fornisce il supporto per Qt4, mentre PySide2 fornisce il supporto per Qt5. Tuttavia, in FreeCAD non è necessario utilizzare PySide2 direttamente, poiché è incluso uno speciale modulo PySide per gestire Qt5.

Questo modulo PySide si trova nella directory Ext/ di un'installazione di FreeCAD compilata per Qt5.

/usr/share/freecad/Ext/PySide

Questo modulo importa solo le classi necessarie da PySide2 e le inserisce nel namespace PySide. Ciò significa che nella maggior parte dei casi lo stesso codice può essere utilizzato sia con Qt4 che con Qt5, purché utilizziamo il singolo modulo PySide.

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

L'unico aspetto insolito è che le classi PySide2.QtWidgets sono posizionate nel namespace PySide.QtGui.

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

Inizio

Esempi di utilizzo di PySide

Gli esempi di PySide sono divisi in 3 parti, differenziate per livello di esposizione a PySide, Python e alle parti incorporate in FreeCAD. La prima pagina contiene una panoramica e le basi della materia, fornisce una descrizione di PySide e di come è organizzato, mentre la seconda e la terza pagina contengono soprattutto degli esempi di codice di diversi livelli.

Si ritiene che questi esempi siano utili per iniziare, dopodiché l'utente potrà consultare altre risorse online o la documentazione ufficiale.

Inizio

Documentazione

Ci sono alcune differenze nella gestione dei widget in Qt4 (PySide) e Qt5 (PySide2). Il programmatore dovrebbe essere consapevole di queste incompatibilità e dovrebbe consultare la documentazione ufficiale se qualcosa non sembra funzionare come previsto su una data piattaforma. Tuttavia, Qt4 è considerato obsoleto, quindi la maggior parte dello sviluppo dovrebbe mirare a Qt5 e Python 3.

La documentazione di PySide fa riferimento alle classi in stile Python; tuttavia, poiché Qt è originariamente una libreria C++, le stesse informazioni dovrebbero essere disponibili nel riferimento C++ corrispondente.

Inizio