Restore DockWidget Dock Area

Restore DockWidget Dock Area

richecoeur.m
Explorer Explorer
636 Views
1 Reply
Message 1 of 2

Restore DockWidget Dock Area

richecoeur.m
Explorer
Explorer

Hi, 

 

I am trying to dock a QDockWidget on the left using Pyside. But the addDockWidget function doesn't seem to work :

 

 

 

3dsMax_Main_Window.addDockWidget(DockWidgetArea.LeftDockWidgetArea,my_dock_widget)

 

 

 

I also tried using QMainWindow restoreState() and saveState() functions.

 

Can you provide a snippet on how to manage this in 3dsmax 2022 ?

 

Thank You for your help.

 

 

 

0 Likes
Accepted solutions (1)
637 Views
1 Reply
Reply (1)
Message 2 of 2

richecoeur.m
Explorer
Explorer
Accepted solution

Found the solution, just call my_dock_widget.setFloating(False) after adding your dockwidget to mainwindow:

 

'''
Demonstrates how to create a QDockWidget and Dock it to the left with PySide2 for use in 3ds Max
'''

from PySide2 import QtCore
from PySide2 import QtGui
from PySide2 import QtWidgets
import qtmax

from pymxs import runtime as rt

def make_cylinder():
    cyl = rt.Cylinder(radius=10, height=30)
    rt.redrawViews()

    return    

class PyMaxDockWidget(QtWidgets.QDockWidget):
    def __init__(self, parent=None):
        super(PyMaxDockWidget, self).__init__(parent)
        self.setWindowFlags(QtCore.Qt.Tool)
        self.setWindowTitle('Pyside Qt  Dock Window')
        self.initUI()
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

    def initUI(self):
        main_layout = QtWidgets.QVBoxLayout()
        label = QtWidgets.QLabel("Click button to create a cylinder in the scene")
        main_layout.addWidget(label)

        cylinder_btn = QtWidgets.QPushButton("Cylinder")
        cylinder_btn.clicked.connect(make_cylinder)
        main_layout.addWidget(cylinder_btn)
        widget = QtWidgets.QWidget()
        widget.setLayout(main_layout)
        self.setWidget(widget)
        self.resize(250, 100)

def main():
    rt.resetMaxFile(rt.name('noPrompt'))
    main_window = qtmax.GetQMaxMainWindow()
    
    w = PyMaxDockWidget(parent=main_window)
    
    main_window.addDockWidget(QtCore.Qt.LeftDockWidgetArea,w)
    #w.show()
    w.setFloating(False)

if __name__ == '__main__':
    main()

 

 

 

 

0 Likes