PySide

From FreeCAD Documentation
Revision as of 11:01, 7 December 2013 by Renatorivo (talk | contribs) (Created page with "[http://en.wikipedia.org/wiki/PyQt PyQt] är en python modul som tillåter python applikationer att skapa, komma åt och ändra [http://sv.wikipedia.org/wiki/Qt Qt] applikatio...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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


Pivy/sv
Scripted objects/sv
Available translations of this page: