Why Code Guidelines?
- Layout files are new in 2.5x, so it's the right time to write and keep them clean.
- Modifying the layout is also interesting for artists. Keep the code as readable as possible is important for them. Also coders who don't work on these files should be able to learn the code as fast as possible.
These guidelines are for every official python script which use buttons inside of blenders interface. So, all button files inside of release/ui. And other scripts (for Render integration...like Povray in release/io) which are bundled with Blender.
Keep assignement names consistent:
"row" for a row layout "col" for a column layout "flow" for a column_flow layout. Please also use these names for split layouts. For example col = split.column(). Use "sub" for sublayouts, and if you need more subsub etc.
Some examples how it should look.
The Basic Code of each panel
class MATERIAL_PT_material(MaterialButtonsPanel): bl_label = "Shading" def draw(self, context): layout = self.layout mat = context.material ob = context.object slot = context.material_slot space = context.space_data
First define the layout.
Define all context you need for the panel. Use short and easy assignement names.
Layout Split Code
split = layout.split() col = split.column() col.prop(mat, "alpha", slider=True) col.prop(mat, "ambient", slider=True) col.prop(mat, "emit") col.prop(mat, "translucency", slider=True) col = split.column() col.prop(mat, "z_transparency") col.prop(mat, "shadeless") col.prop(mat, "tangent_shading") col.prop(mat, "cubic", slider=True)
If you need a sublayout because of align, greying out or something else, use sub as assignement name:
sub = col.column(align=True) sub.prop(mat, "bla")
First define the split.
Now pack every column in 1 block, this improves the readability. Sub layout blocks can be separated as well if this improves the readability.
#For greying out first define the active/enabled condition, then put the buttons there: #Right: sub = col.column() sub.active = tex.distance_metric == 'MINKOVSKY' sub.prop(tex, "minkovsky_exponent", text="Exponent") #Wrong: sub = col.column() sub.prop(tex, "minkovsky_exponent", text="Exponent") sub.active = tex.distance_metric == 'MINKOVSKY'