# Copyright 2012 Autodesk, Inc. All rights reserved. # Use of this software is subject to the terms of the Autodesk license agreement # provided at the time of installation or download, or which otherwise accompanies # this software in either electronic or hard copy form. # # Script description: # Create a tool that demo how to embed native Qt widgets created by PySide into MoBu framework. # # Topic: FBWidgetHolder, FBTool # from pyfbsdk import * from pyfbsdk_additions import * from PySide import QtGui from PySide import shiboken # # Subclass FBWidgetHolder and override its WidgetCreate function # class NativeWidgetHolder(FBWidgetHolder): # # Override WidgetCreate function to create native widget via PySide. # \param parentWidget Memory address of Parent QWidget. # \return Memory address of the child native widget. # def WidgetCreate(self, pWidgetParent): # # IN parameter pWidgetparent is the memory address of the parent Qt widget. # here we should PySide.shiboken.wrapInstance() function to convert it to PySide.QtWidget object. # and use it the as the parent for native Qt widgets created via Python. # Similiar approach is available in the sip python module for PyQt # # Only a single widget is allowed to be the *direct* child of the IN parent widget. # self.mNativeQtWidget = QtGui.QPushButton("Push Button", shiboken.wrapInstance(pWidgetParent, QtGui.QWidget)) # # return the memory address of the *single direct* child QWidget. # return shiboken.getCppPointer(self.mNativeQtWidget)[0] class NativeQtWidgetTool(FBTool): def BuildLayout(self): x = FBAddRegionParam(0,FBAttachType.kFBAttachLeft,"") y = FBAddRegionParam(0,FBAttachType.kFBAttachTop,"") w = FBAddRegionParam(0,FBAttachType.kFBAttachRight,"") h = FBAddRegionParam(0,FBAttachType.kFBAttachBottom,"") self.AddRegion("main","main", x, y, w, h) self.SetControl("main", self.mNativeWidgetHolder) def __init__(self, name): FBTool.__init__(self, name) self.mNativeWidgetHolder = NativeWidgetHolder(); self.BuildLayout() self.StartSizeX = 600 self.StartSizeY = 400 gToolName = "NativeQtWidgetTool" #Development? - need to recreate each time!! gDEVELOPMENT = True if gDEVELOPMENT: FBDestroyToolByName(gToolName) if gToolName in FBToolList: tool = FBToolList[gToolName] ShowTool(tool) else: tool=NativeQtWidgetTool(gToolName) FBAddTool(tool) if gDEVELOPMENT: ShowTool(tool)