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()