PySide/de

PyQt ist ein Python-Modul, das Python-Anwendungen das erstellen, zugreifen und modifizieren von Qt-Anwendungen ermöglicht. Sie können es zum Beispiel verwenden, um Ihre eigenen Qt-Programme in Python zu erstellen, oder zum Beispiel auf die Schnittstelle einer laufenden qt-Anwendung; wie FreeCAD; zuzugreifen und diese zu modifizieren.

Durch die Verwendung des PyQt-Modul innerhalb FreeCAD, haben Sie die volle Kontrolle über seine Schnittstelle. Sie, können zum Beispiel:


 * Ihre eigenen Panels, Widgets und Symbolleisten hinzufügen
 * In bestehenden Panels Elemente hinzufügen oder ausblenden
 * Verbindungen zwischen all diesen Elementen ändern, umleiten oder neu einfügen

PyQt verfügt über eine umfangreiche API documentation, und es gibt viele Tutorials im Netz, Ihnen beibringen, wie es funktioniert.

Wenn Sie an der FreeCAD-Schnittstelle arbeiten wollen, ist das allererste das Sie tun müssen, schaffen Sie einen Verweis auf das FreeCAD Hauptfenster:

import sys from PyQt4 import QtGui app = QtGui.qApp mw = app.activeWindow

Dann können Sie zum Beispiel durch alle Widgets der Schnittstelle(Oberfläche) navigieren:

for child in mw.children: print 'widget name = ', child.objectName, ', widget type = ', child

Die Widgets in einer Qt-Schnittstelle sind in der Regel in "Container"-Widgets verschachtelt, so dass die Kinder unseres Hauptfensters, ebenfalls noch weitere Kinder enthalten können. Je nach Widget-Typ gibt es eine Menge Dinge, die Sie tun können. Überprüfen Sie die API-Dokumentation um zu sehen, was alles möglich ist.

Hinzufügen eines neuen Widget, beispielsweise ein dockWidget(das in einem der FreeCAD-panels angezeigt wird) ist einfach:

myWidget = QtGui.QDockWidget mw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myWidget)

Sie könnten dann auch direkt etwas zu Ihrem Widget hinzufügen:

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

Aber die bevorzugte Methode besteht darin, ein Benutzeroberflächen-Objekt zu schaffen, das die ganze Einstellung Ihres Widgets sofort in einem erledigt. Der große Vorteil besteht darin, dass solch ein UI-Objekt mit dem Qt Designer-Programm grafisch erstellt werden kann. Ein typisches Objekt von Qt Designer generiert, sieht dann wie folgt aus:

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 self.label = QtGui.QLabel(myWidget) # creates a label self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size self.label.setObjectName("label") # sets its name, so it can be found by name 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))

Um es zu benutzen, brauchen es Sie nur wie folgt, auf Ihr frisch erstelltes Widget anzuwenden:

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