PySide
PyQt är en python modul som tillåter python applikationer att skapa, komma åt och ändra Qt applikationer. Du kan använda den för till exempel att skapa dina egna Qt program i python, eller till att komma åt och ändra gränssnittet i en körande qt applikation, som FreeCAD.
Genom att använda PyQt modulen inifrån FreeCAD, så har du därför full kontroll över dess gränssnitt. Du kan till exempel:
- Lägga till dina egna paneler, widgetar och verktygslådor
- Lägga till eller gömma element i existerande paneler
- Ändra, omdirigera eller lägga till anslutningar mellan alla dessa element
PyQt har en extensiv API dokumentation, och det finns många övningar på nätet för att lära dig hur det fungerar.
Om du vill arbeta på FreeCAD gränssnittet, så är den första saken du ska göra att skapa en referens till FreeCAD's huvudfönster:
import sys from PyQt4 import QtGui app = QtGui.qApp mw = app.activeWindow()
Sedan så kan du till exempel lista igenom gränssnittets alla widgetar:
for child in mw.children: print 'widget name = ', child.getObjectName(), ', widget type = ', child
Widgetarna i ett Qt gränssnitt är vanligtvis nästlade i "behållar" widgetar, så vårt huvudfönsters barn kan själva innehålla andra barn. Beroende på widgettyp, så finns det många saker du kan göra. Kontrollera API dokumentationen för att se vad som är möjligt.
Att lägga till en ny widget, till exempel en dockWidget (som kan placeras i en av FreeCAD's sidopaneler) är lätt:
myWidget = QtGui.QDockWidget() mw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myWidget)
Du kan sedan lägga till saker direkt i din widget:
myWidget.setObjectName("my Nice New Widget") myWidget.resize(QtCore.QSize(QtCore.QRect(0,0,300,100))) # sätter widgetens storlek label = QtGui.QLabel(myWidget) # skapar en etikett label.setGeometry(QtCore.QRect(50,50,200,24)) # sätter dess storlek label.setObjectName("myLabel") # sätter dess namn, så att den kan hittas genom det
Men en föredragen metod är att skapa ett UI objekt som gör alla inställningar av din widget direkt. Den stora fördelen är att ett sådant UI objekt kan skapas grafiskt med Qt Designer programmet. Ett typiskt objekt som genererats av Qt Designer är som detta:
class myWidget_Ui(object): def setupUi(self, myWidget): myWidget.setObjectName("my Nice New Widget") myWidget.resize(QtCore.QSize(QtCore.QRect(0,0,300,100).size()).expandedTo(myWidget.minimumSizeHint())) # sätter widgetens storlek self.label = QtGui.QLabel(myWidget) # skapar en etikett self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sätter dess storlek self.label.setObjectName("label") # sätter dess namn, så att den kan hittas genom det def retranslateUi(self, draftToolbar): # inbyggd QT funktion som hanterar widget översättningar 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))
För att använda den, så behöver du bara tillämpa den i din nyss skapade widget som så här:
myNewFreeCADWidget = QtGui.QDockWidget() # skapa en ny dckwidget myNewFreeCADWidget.ui = myWidget_Ui() # ladda Ui skriptet myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # ställ in ui FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # lägg till widgeten till huvudfönstret