Scripting in Maya using Python

Project: Improve scripting skills through making small tools.
Team: Individual project.
Date: September 2018 - Now.
Tasks: Scripting
Programs: Maya, Qt-Designer
Description: I wanted to improve my non-existing scripting knowledge. So, I decided to start by just making some small tools in Maya that would improve my rigging work flow. I use Qt-Designer to to create the UI and convert it into a python file so I can use it in Maya and connect the functionality I scripted to the UI.

Create Controllers


						from PySide2 import QtCore
from PySide2 import QtWidgets
from PySide2 import QtGui
from shiboken2 import wrapInstance

import maya.OpenMayaUI as moui
import maya.cmds as cmds

def maya_main_window():
    main_window_ptr = moui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
                        
class Dialog_Window(QtWidgets.QDialog):
    
          
        
    def create_connections(self):
        self.createctr_btn.clicked.connect(self.control_maker)
        self.control_color(0)
        self.color_red.clicked.connect(lambda: self.control_color(13))
        self.color_blue.clicked.connect(lambda: self.control_color(6))
        self.color_yellow.clicked.connect(lambda: self.control_color(17))
        self.color_green.clicked.connect(lambda: self.control_color(27))
        self.color_lgreen.clicked.connect(lambda: self.control_color(14))
        self.color_lblue.clicked.connect(lambda: self.control_color(18))
        self.color_brown.clicked.connect(lambda: self.control_color(10))
        self.color_purple.clicked.connect(lambda: self.control_color(30))
        self.color_pink.clicked.connect(lambda: self.control_color(20))
        self.pushButton_2.clicked.connect(self.mirror_control)
        self.pushButton.clicked.connect(self.align_control)

    def control_color(self, nr):
        self.nr = nr
        self.color_index = nr
        print self.color_index

        
    def control_maker(self):
        # Get the name from users input
        name = self.lineEdit.text()
        # Get the size from users input
        size = 1
        if self.lineEdit_2.text():
            size = float(self.lineEdit_2.text())
        
        color_input = self.color_index
        # If user did not select a color the color will be default
                
        normal_input = [0,1,0]
        # Gets the users input on the orientation of the color
        if self.orient_x.isChecked():
            normal_input = [0,1,0]
        elif self.orient_y.isChecked():
            normal_input = [1,0,0]
        elif self.orient_z.isChecked():
            normal_input = [0,0,1]
        
        place_input = ""
        # Slightly moves the controller to the left or the right or just middle
        if self.place_normal.isChecked():
            place_input = ""
            
        elif self.place_left.isChecked():
            place_input = "L_"
            
        elif self.place_right.isChecked():
            place_input = "R_" 
        
        # Create and name the controller
        circle_control = cmds.circle(n = place_input + name + "_Cntr", nr = normal_input, r = size)
        group_circle = cmds.group(n = place_input + name + "_Cntr_Grp")
        cmds.setAttr(circle_control[0] + ".overrideEnabled", 1)
        cmds.setAttr(circle_control[0] + ".overrideColor", color_input)
        
        
    def align_control(self):
        selected = cmds.ls(sl= True)
        for all in selected:
            if all != selected[0]:
                alin = cmds.parentConstraint(selected[0], all)
                cmds.delete(alin)
                
    def selected_object(self):
        # Updated the selected parent object window
        selected = cmds.ls(sl=True)
        print selected
        try:
            self.textBrowser.setText(selected[0])
        except:
            pass
            
        
        
    def mirror_control(self):
        
        name = self.lineEdit.text()
        
        color_input = self.color_index
        # Call color input from button
            
            
        place_input = ""
        # M_ for when no side is selected to get rif of duplicate names
        if self.place_normal.isChecked():
            place_input = ""
        elif self.place_left.isChecked():
            place_input = "L_"
        elif self.place_right.isChecked():
            place_input = "R_" 
        # Adds L_, R_ or none to the place input which represents the prefix string >> again
            
        list_selected = []
        selected = cmds.ls(sl= True)
        list_selected.append(selected[0])
        temp_grp = cmds.group(em = True)
        cmds.parent(selected, temp_grp)
        cmds.PickWalkUp()
        dub = cmds.duplicate()

        # Checks the mirror axis
        if self.radioButton.isChecked():
            cmds.xform(s = (-1,1,1))
        elif self.radioButton_2.isChecked():
            cmds.xform(s = (1,-1,1))
        elif self.radioButton_3.isChecked():
            cmds.xform(s = (1,1,-1))
            
        cmds.PickWalkDown()
        cmds.rename(place_input + name + "_Cntr_Grp")
        cmds.parent(w=True)
        cmds.PickWalkDown()
        name = cmds.rename(place_input + name + "_Cntr")
        cmds.setAttr(name + ".overrideColor", color_input)
        cmds.parent(list_selected, w=True)
        cmds.delete(temp_grp)
        cmds.delete(dub[0])
		
	def __init__(self, parent = maya_main_window()):
        super(Dialog_Window, self).__init__(parent)

        self.create_widgets()
        self.create_connections()
        
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)
        
        self.color_index = 0
		
	#Generated code to create the UI from Qt-Designer

    def retranslateUi(self):
        self.setWindowTitle(QtWidgets.QApplication.translate("Controller_Creator", "Controller_Creator", None, -1))
        self.label_2.setText(QtWidgets.QApplication.translate("Controller_Creator", "Select a shape:", None, -1))
        self.label_3.setText(QtWidgets.QApplication.translate("Controller_Creator", "Size", None, -1))
        self.name_controller_label.setText(QtWidgets.QApplication.translate("Controller_Creator", "Name Controller   -   Prefix + name + _Ctr", None, -1))
        self.prefix_grpbox.setTitle(QtWidgets.QApplication.translate("Controller_Creator", "Prefix", None, -1))
        self.place_left.setText(QtWidgets.QApplication.translate("Controller_Creator", "L_", None, -1))
        self.place_right.setText(QtWidgets.QApplication.translate("Controller_Creator", "R_", None, -1))
        self.place_normal.setText(QtWidgets.QApplication.translate("Controller_Creator", "None", None, -1))
        self.custom_collor_label.setText(QtWidgets.QApplication.translate("Controller_Creator", "Color", None, -1))
        self.color_pink.setText(QtWidgets.QApplication.translate("Controller_Creator", "Pink", None, -1))
        self.color_yellow.setText(QtWidgets.QApplication.translate("Controller_Creator", "Yellow", None, -1))
        self.color_lblue.setText(QtWidgets.QApplication.translate("Controller_Creator", "Light Blue", None, -1))
        self.color_green.setText(QtWidgets.QApplication.translate("Controller_Creator", "Green", None, -1))
        self.color_lgreen.setText(QtWidgets.QApplication.translate("Controller_Creator", "Light Green", None, -1))
        self.color_purple.setText(QtWidgets.QApplication.translate("Controller_Creator", "Purple", None, -1))
        self.color_brown.setText(QtWidgets.QApplication.translate("Controller_Creator", "Brown", None, -1))
        self.color_blue.setText(QtWidgets.QApplication.translate("Controller_Creator", "Blue", None, -1))
        self.color_red.setText(QtWidgets.QApplication.translate("Controller_Creator", "Red", None, -1))
        self.controller_orient_grpbox.setTitle(QtWidgets.QApplication.translate("Controller_Creator", "Controller Orientation - Only valid for Create", None, -1))
        self.orient_x.setText(QtWidgets.QApplication.translate("Controller_Creator", "X", None, -1))
        self.orient_y.setText(QtWidgets.QApplication.translate("Controller_Creator", "Y", None, -1))
        self.orient_z.setText(QtWidgets.QApplication.translate("Controller_Creator", "Z", None, -1))
        self.createctr_btn.setText(QtWidgets.QApplication.translate("Controller_Creator", "Create Controller", None, -1))
        self.groupBox.setTitle(QtWidgets.QApplication.translate("Controller_Creator", "Mirror Axis - Only valid for mirror", None, -1))
        self.radioButton.setText(QtWidgets.QApplication.translate("Controller_Creator", "X", None, -1))
        self.radioButton_2.setText(QtWidgets.QApplication.translate("Controller_Creator", "Y", None, -1))
        self.radioButton_3.setText(QtWidgets.QApplication.translate("Controller_Creator", "Z", None, -1))
        self.pushButton_2.setText(QtWidgets.QApplication.translate("Controller_Creator", "Mirror", None, -1))
        self.label.setText(QtWidgets.QApplication.translate("Controller_Creator", "Select Alignment Object than controller(s)", None, -1))
        self.pushButton.setText(QtWidgets.QApplication.translate("Controller_Creator", "Align", None, -1))




        
        
        
        
    def create_widgets(self):
        self.setObjectName("Controller_Creator")
        self.resize(510, 626)
        self.verticalLayoutWidget = QtWidgets.QWidget(self)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 491, 591))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_2.setMinimumSize(QtCore.QSize(0, 15))
        self.label_2.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_2.setObjectName("label_2")
        self.verticalLayout.addWidget(self.label_2)
        self.controller_shape = QtWidgets.QComboBox(self.verticalLayoutWidget)
        self.controller_shape.addItem("Circle")
        self.controller_shape.setEditable(False)
        self.controller_shape.setObjectName("controller_shape")
        self.verticalLayout.addWidget(self.controller_shape)
        self.label_3 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_3.setMinimumSize(QtCore.QSize(0, 15))
        self.label_3.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_3.setObjectName("label_3")
        self.verticalLayout.addWidget(self.label_3)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.lineEdit_2.setMinimumSize(QtCore.QSize(0, 20))
        self.lineEdit_2.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.verticalLayout.addWidget(self.lineEdit_2)
        self.name_controller_label = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.name_controller_label.setMinimumSize(QtCore.QSize(0, 10))
        self.name_controller_label.setMaximumSize(QtCore.QSize(16777215, 15))
        self.name_controller_label.setObjectName("name_controller_label")
        self.verticalLayout.addWidget(self.name_controller_label)
        self.lineEdit = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.lineEdit.setMinimumSize(QtCore.QSize(0, 20))
        self.lineEdit.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.line = QtWidgets.QFrame(self.verticalLayoutWidget)
        self.line.setMaximumSize(QtCore.QSize(16777215, 3))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.verticalLayout.addWidget(self.line)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.prefix_grpbox = QtWidgets.QGroupBox(self.verticalLayoutWidget)
        self.prefix_grpbox.setMinimumSize(QtCore.QSize(0, 45))
        self.prefix_grpbox.setMaximumSize(QtCore.QSize(16777215, 50))
        self.prefix_grpbox.setObjectName("prefix_grpbox")
        self.place_left = QtWidgets.QRadioButton(self.prefix_grpbox)
        self.place_left.setGeometry(QtCore.QRect(0, 20, 175, 20))
        self.place_left.setMaximumSize(QtCore.QSize(16777215, 20))
        self.place_left.setObjectName("place_left")
        self.place_right = QtWidgets.QRadioButton(self.prefix_grpbox)
        self.place_right.setGeometry(QtCore.QRect(60, 20, 537, 20))
        self.place_right.setMaximumSize(QtCore.QSize(16777215, 20))
        self.place_right.setObjectName("place_right")
        self.place_normal = QtWidgets.QRadioButton(self.prefix_grpbox)
        self.place_normal.setGeometry(QtCore.QRect(120, 20, 266, 20))
        self.place_normal.setMaximumSize(QtCore.QSize(16777215, 20))
        self.place_normal.setChecked(True)
        self.place_normal.setObjectName("place_normal")
        self.horizontalLayout.addWidget(self.prefix_grpbox)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.line_2 = QtWidgets.QFrame(self.verticalLayoutWidget)
        self.line_2.setMinimumSize(QtCore.QSize(0, 2))
        self.line_2.setMaximumSize(QtCore.QSize(16777215, 3))
        self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.verticalLayout.addWidget(self.line_2)
        self.custom_collor_label = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.custom_collor_label.setMinimumSize(QtCore.QSize(0, 14))
        self.custom_collor_label.setMaximumSize(QtCore.QSize(16777215, 15))
        self.custom_collor_label.setObjectName("custom_collor_label")
        self.verticalLayout.addWidget(self.custom_collor_label)
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.color_pink = QtWidgets.QPushButton(self.verticalLayoutWidget)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(255, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        self.color_pink.setPalette(palette)
        self.color_pink.setAutoFillBackground(True)
        self.color_pink.setFlat(True)
        self.color_pink.setObjectName("color_pink")
        self.gridLayout.addWidget(self.color_pink, 1, 0, 1, 1)
        self.color_yellow = QtWidgets.QPushButton(self.verticalLayoutWidget)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        self.color_yellow.setPalette(palette)
        self.color_yellow.setAutoFillBackground(True)
        self.color_yellow.setFlat(True)
        self.color_yellow.setObjectName("color_yellow")
        self.gridLayout.addWidget(self.color_yellow, 0, 2, 1, 1)
        self.color_lblue = QtWidgets.QPushButton(self.verticalLayoutWidget)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(0, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        self.color_lblue.setPalette(palette)
        self.color_lblue.setAutoFillBackground(True)
        self.color_lblue.setFlat(True)
        self.color_lblue.setObjectName("color_lblue")
        self.gridLayout.addWidget(self.color_lblue, 1, 1, 1, 1)
        self.color_green = QtWidgets.QPushButton(self.verticalLayoutWidget)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(0, 170, 127))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 170, 127))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 170, 127))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        self.color_green.setPalette(palette)
        self.color_green.setAutoFillBackground(True)
        self.color_green.setFlat(True)
        self.color_green.setObjectName("color_green")
        self.gridLayout.addWidget(self.color_green, 2, 1, 1, 1)
        self.color_lgreen = QtWidgets.QPushButton(self.verticalLayoutWidget)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        self.color_lgreen.setPalette(palette)
        self.color_lgreen.setAutoFillBackground(True)
        self.color_lgreen.setFlat(True)
        self.color_lgreen.setObjectName("color_lgreen")
        self.gridLayout.addWidget(self.color_lgreen, 2, 2, 1, 1)
        self.color_purple = QtWidgets.QPushButton(self.verticalLayoutWidget)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(255, 85, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 85, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 85, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        self.color_purple.setPalette(palette)
        self.color_purple.setAutoFillBackground(True)
        self.color_purple.setFlat(True)
        self.color_purple.setObjectName("color_purple")
        self.gridLayout.addWidget(self.color_purple, 2, 0, 1, 1)
        self.color_brown = QtWidgets.QPushButton(self.verticalLayoutWidget)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(170, 85, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(170, 85, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(170, 85, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        self.color_brown.setPalette(palette)
        self.color_brown.setAutoFillBackground(True)
        self.color_brown.setFlat(True)
        self.color_brown.setObjectName("color_brown")
        self.gridLayout.addWidget(self.color_brown, 1, 2, 1, 1)
        self.color_blue = QtWidgets.QPushButton(self.verticalLayoutWidget)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(49, 49, 240))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(49, 49, 240))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(49, 49, 240))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        self.color_blue.setPalette(palette)
        self.color_blue.setAutoFillBackground(True)
        self.color_blue.setDefault(False)
        self.color_blue.setFlat(True)
        self.color_blue.setObjectName("color_blue")
        self.gridLayout.addWidget(self.color_blue, 0, 1, 1, 1)
        self.color_red = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.color_red.setEnabled(True)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(240, 0, 4))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(240, 0, 4))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(240, 0, 4))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        self.color_red.setPalette(palette)
        self.color_red.setAutoFillBackground(True)
        self.color_red.setCheckable(False)
        self.color_red.setFlat(True)
        self.color_red.setObjectName("color_red")
        self.gridLayout.addWidget(self.color_red, 0, 0, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)
        self.line_3 = QtWidgets.QFrame(self.verticalLayoutWidget)
        self.line_3.setMinimumSize(QtCore.QSize(0, 2))
        self.line_3.setMaximumSize(QtCore.QSize(16777215, 3))
        self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")
        self.verticalLayout.addWidget(self.line_3)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.controller_orient_grpbox = QtWidgets.QGroupBox(self.verticalLayoutWidget)
        self.controller_orient_grpbox.setMinimumSize(QtCore.QSize(0, 45))
        self.controller_orient_grpbox.setMaximumSize(QtCore.QSize(16777215, 50))
        self.controller_orient_grpbox.setCheckable(False)
        self.controller_orient_grpbox.setObjectName("controller_orient_grpbox")
        self.orient_x = QtWidgets.QRadioButton(self.controller_orient_grpbox)
        self.orient_x.setGeometry(QtCore.QRect(10, 20, 50, 20))
        self.orient_x.setMinimumSize(QtCore.QSize(50, 18))
        self.orient_x.setMaximumSize(QtCore.QSize(75, 20))
        self.orient_x.setObjectName("orient_x")
        self.orient_y = QtWidgets.QRadioButton(self.controller_orient_grpbox)
        self.orient_y.setGeometry(QtCore.QRect(60, 20, 50, 20))
        self.orient_y.setMinimumSize(QtCore.QSize(50, 18))
        self.orient_y.setMaximumSize(QtCore.QSize(75, 20))
        self.orient_x.setChecked(True)
        self.orient_y.setObjectName("orient_y")
        self.orient_z = QtWidgets.QRadioButton(self.controller_orient_grpbox)
        self.orient_z.setGeometry(QtCore.QRect(110, 20, 50, 20))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.orient_z.sizePolicy().hasHeightForWidth())
        self.orient_z.setSizePolicy(sizePolicy)
        self.orient_z.setMinimumSize(QtCore.QSize(50, 18))
        self.orient_z.setMaximumSize(QtCore.QSize(75, 20))
        self.orient_z.setChecked(False)
        self.orient_z.setObjectName("orient_z")
        self.horizontalLayout_3.addWidget(self.controller_orient_grpbox)
        self.verticalLayout.addLayout(self.horizontalLayout_3)
        self.groupBox = QtWidgets.QGroupBox(self.verticalLayoutWidget)
        self.groupBox.setMinimumSize(QtCore.QSize(0, 45))
        self.groupBox.setMaximumSize(QtCore.QSize(16777215, 65))
        self.createctr_btn = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.createctr_btn.setObjectName("createctr_btn")
        self.verticalLayout.addWidget(self.createctr_btn)
        self.pushButton_2 = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.groupBox.setObjectName("groupBox")
        self.radioButton = QtWidgets.QRadioButton(self.groupBox)
        self.radioButton.setGeometry(QtCore.QRect(10, 20, 75, 18))
        self.radioButton.setMinimumSize(QtCore.QSize(50, 18))
        self.radioButton.setMaximumSize(QtCore.QSize(75, 20))
        self.radioButton.setChecked(True)
        self.radioButton.setObjectName("radioButton")
        self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox)
        self.radioButton_2.setGeometry(QtCore.QRect(70, 20, 75, 18))
        self.radioButton_2.setMinimumSize(QtCore.QSize(50, 18))
        self.radioButton_2.setMaximumSize(QtCore.QSize(75, 20))
        self.radioButton_2.setObjectName("radioButton_2")
        self.radioButton_3 = QtWidgets.QRadioButton(self.groupBox)
        self.radioButton_3.setGeometry(QtCore.QRect(120, 20, 50, 18))
        self.radioButton_3.setMinimumSize(QtCore.QSize(50, 18))
        self.radioButton_3.setMaximumSize(QtCore.QSize(75, 20))
        self.radioButton_3.setObjectName("radioButton_3")
        self.verticalLayout.addWidget(self.groupBox)
        self.pushButton_2.setObjectName("pushButton_2")
        self.verticalLayout.addWidget(self.pushButton_2)
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label.setMinimumSize(QtCore.QSize(0, 20))
        self.label.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label.setObjectName("label")
        self.verticalLayout_2.addWidget(self.label)
        self.pushButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushButton.setMinimumSize(QtCore.QSize(0, 24))
        self.pushButton.setMaximumSize(QtCore.QSize(16777215, 26))
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout_2.addWidget(self.pushButton)
        self.verticalLayout.addLayout(self.verticalLayout_2)
        

try:
    Dialog.close()
except:
    pass

Dialog = Dialog_Window()
Dialog.show()
					

...

Change color of specified controllers


						#Small UI element to help change the color of objects/controllers

from PySide2 import QtCore
from PySide2 import QtWidgets
from PySide2 import QtGui
from shiboken2 import wrapInstance

import maya.OpenMayaUI as moui
import maya.cmds as cmds

def maya_main_window():
    main_window_ptr = moui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
                        
class Dialog_Window(QtWidgets.QDialog):
    
    def __init__(self, parent = maya_main_window()):
        super(Dialog_Window, self).__init__(parent)
        self.setWindowFlags(self.windowFlags()^QtCore.Qt.WindowContextHelpButtonHint)

        self.create_widgets()
        self.create_connections()
        self.retranslateUi()
        #Set the variable for selected controllers as a kind of global variable outside of the other functions
        self.selected_objects = []
        #Call the slider function once to set the initial color of the UI element
        self.color_change()
        
           
    def create_connections(self):
        self.horizontalSlider.valueChanged.connect(self.color_change)
        self.pushButton.clicked.connect(self.selected_cntr)
        self.pushButton_2.clicked.connect(self.no_cntr)
        
    def selected_cntr(self):
        selected = cmds.ls(sl = True)
        for i in selected:
            #Add selected controllers to the selected objects list
            self.selected_objects.append(i)
        
    def no_cntr(self):
        #Clear the entire objects list
        self.selected_objects = None
    
        
    def color_change(self):
        #Begin by setting brush to the default blue color
        brush = (44,41,112)
        index = 5
        #Set the UI item to the correct color and set the index to the corresponding number
        if self.horizontalSlider.value() == 0:
            brush = QtGui.QBrush(QtGui.QColor(44, 41, 112))
            index = 5
        elif self.horizontalSlider.value() == 1:
            brush = QtGui.QBrush(QtGui.QColor(255, 0, 0))
            index = 13
        elif self.horizontalSlider.value() == 2:
            brush = QtGui.QBrush(QtGui.QColor(0, 0, 255))
            index = 6
        elif self.horizontalSlider.value() == 3:
            brush = QtGui.QBrush(QtGui.QColor(237, 235, 36))
            index = 17
        elif self.horizontalSlider.value() == 4:
            brush = QtGui.QBrush(QtGui.QColor(71, 83, 181))
            index = 15
        elif self.horizontalSlider.value() == 5:
            brush = QtGui.QBrush(QtGui.QColor(148, 50, 49))
            index = 4
        elif self.horizontalSlider.value() == 6:
            brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))
            index = 14
            
        #The set palletis outside the create UI function so it can be edited live
        palette = QtGui.QPalette()
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        self.graphicsView.setPalette(palette)
        
        #Check wheter there are controllers in the selected list or go for currently selected objects
        num = 0
        items = None
        if self.selected_objects != None:
            items = self.selected_objects
        elif self.selected_objects == None:
            items = cmds.ls(sl=True)
            
        #Change the color of the controller
        for i in items:
                cmds.setAttr( items[num] + ".overrideEnabled", 1)
                cmds.setAttr(items[num] + ".overrideColor", index)
                num += 1

	#Generated code to create the UI from Qt-Designer
	def retranslateUi(self):
        self.setWindowTitle(QtWidgets.QApplication.translate("Colorchange", "Color Change", None, -1))
        self.pushButton.setText(QtWidgets.QApplication.translate("Colorchange", "Select Controllers  /  Add controllers to selection", None, -1))
        self.pushButton_2.setText(QtWidgets.QApplication.translate("Colorchange", "Deselect Controllers", None, -1))

        
    def create_widgets(self):
        self.setObjectName("Colorchange")
        self.resize(499, 120)
        self.setMaximumSize(500, 125)
        self.setMinimumSize(415, 50)
        self.gridLayoutWidget = QtWidgets.QWidget(self)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(19, 10, 461, 87))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.graphicsView = QtWidgets.QGraphicsView(self.gridLayoutWidget)
        self.graphicsView.setMaximumSize(QtCore.QSize(75, 20))
        self.graphicsView.setAutoFillBackground(True)
        self.graphicsView.setFrameShadow(QtWidgets.QFrame.Plain)
        self.graphicsView.setObjectName("graphicsView")
        self.gridLayout.addWidget(self.graphicsView, 2, 1, 1, 1)
        self.horizontalSlider = QtWidgets.QSlider(self.gridLayoutWidget)
        self.horizontalSlider.setAutoFillBackground(False)
        self.horizontalSlider.setMaximum(6)
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setTickPosition(QtWidgets.QSlider.TicksAbove)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.gridLayout.addWidget(self.horizontalSlider, 2, 0, 1, 1)
        self.pushButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 1)
        self.pushButton_2 = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.pushButton_2.setObjectName("pushButton_2")
        self.gridLayout.addWidget(self.pushButton_2, 1, 0, 1, 1)
try:
    Dialog.close()
    Dialog.deleteLater()
except:
    pass

Dialog = Dialog_Window()
Dialog.show()




					

...

Create null group on top of a controller


						import maya.cmds as cmds

orin = cmds.ls(sl=True)

if orin != None:
    #Seperate commands for trans, rot ans scale (Can't be done in one).
    trans = cmds.xform(orin, q=True, t= True, ws=True)
    rot = cmds.xform(orin, q=True, ro= True, ws=True)
    scale = cmds.xform(orin, q=True, s= True, ws=True)
    #Move controller to 0,0,0
    cmds.xform(selected[0], ws = True, t = [0,0,0], ro = [0,0,0], s=[1,1,1])
    #group the zeroed out controller and move to stored origonal position
    group = cmds.group(selected, n=selected[0] + "_NullGrp")
    cmds.xform(group, ws = True, t = [trans[0], trans[1], trans[2]], ro = [rot[0], rot[1], rot[2]], s = [scale[0], scale[1], scale[2]])
elif orin == None:
    print "You need to select a controller."
    



					

...

Blend between Two joint chains


						from PySide2 import QtCore
from PySide2 import QtWidgets
from PySide2 import QtGui
from shiboken2 import wrapInstance

import maya.OpenMayaUI as moui
import maya.cmds as cmds

def maya_main_window():
    main_window_ptr = moui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
                        
class Dialog_Window(QtWidgets.QDialog):
    
    def __init__(self, parent = maya_main_window()):
        super(Dialog_Window, self).__init__(parent)
        self.setWindowFlags(self.windowFlags()^QtCore.Qt.WindowContextHelpButtonHint)

        self.create_widgets()
        self.create_connections()
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)
      
    def create_connections(self):
        self.pushbutton_select_chain1_2.clicked.connect(self.select_chain1)
        self.pushbutton_select_chain1.clicked.connect(self.select_chain2)
        self.pushbutton_select_chainchild.clicked.connect(self.select_chainchild)
        self.pushbutton_select_all.clicked.connect(self.select_all)
        self.pushbutton_select_all.clicked.connect(self.select_all)
        self.pushbutton_controller.clicked.connect(self.select_controller)
        self.pushbutton_create.clicked.connect(self.blend_joints)
    
    def select_chain1(self):
        selected = cmds.ls(sl=True)
        self.lineedit_chain1.setText(selected[0])
        
    def select_chain2(self):
        selected = cmds.ls(sl=True)
        self.lineedit_chain2.setText(selected[0])
        
    def select_chainchild(self):
        selected = cmds.ls(sl=True)
        self.lineedit_chainchild.setText(selected[0])
        
    def select_all(self):
        selected = cmds.ls(sl=True)
        self.lineedit_chain1.setText(selected[0])
        self.lineedit_chain2.setText(selected[1])
        self.lineedit_chainchild.setText(selected[2])
        
    def select_controller(self):
         selected = cmds.ls(sl=True)
         self.lineedit_controller.setText(selected[0])
        
    def blend_joints(self):
        
        chain_01 = self.lineedit_chain1.text()
        chain_02 = self.lineedit_chain2.text()
        child_chain = self.lineedit_chainchild.text()
        controller = self.lineedit_controller.text()
        name_attr = self.lineedit_attrname.text()
        
        if self.lineedit_chain1.text() and self.lineedit_chain2.text() and self.lineedit_chainchild.text() and self.lineedit_controller.text() and self.lineedit_controller.text():
            #Get all the joints in the hierarchy
            cmds.select(chain_01, hi=True)
            selected_01 = cmds.ls(sl=True)

            cmds.select(chain_02, hi=True)
            selected_02 = cmds.ls(sl=True)

            cmds.select(child_chain, hi=True)
            selected_child = cmds.ls(sl=True)

            name_nr = 0

            #Create attribute for blend
            cmds.addAttr(controller, ln=name_attr, at = 'float', min=0, max=1, dv=0.5, k=True)

            for i in range(len(selected_01)):
                #Create blend node
                blend_node = cmds.shadingNode('blendColors', au = True, n = "BC_" + selected_child[name_nr])
                #Connect parent joint chains to blend and blend to child joint chain
                cmds.connectAttr(selected_01[name_nr] + ".rotate", blend_node + ".color1")
                cmds.connectAttr(selected_02[name_nr] + ".rotate", blend_node + ".color2")
                cmds.connectAttr(blend_node + ".output", selected_child[name_nr] + ".rotate")
                cmds.connectAttr(controller + "." + name_attr, blend_node + ".blender")

                name_nr +=1
        else:
            print "You didn't fill in all the required fields"

	#Generated code for the UI from Q_Designer
	 def retranslateUi(self):
        self.setWindowTitle(QtWidgets.QApplication.translate("BlendJointChains", "Blend Joints setup", None, -1))
        self.lineedit_controller.setPlaceholderText(QtWidgets.QApplication.translate("BlendJointChains", "Controller to add blend attribute to", None, -1))
        self.label_chain1.setText(QtWidgets.QApplication.translate("BlendJointChains", "Joint chain 1", None, -1))
        self.pushbutton_select_chain1_2.setText(QtWidgets.QApplication.translate("BlendJointChains", "select", None, -1))
        self.pushbutton_select_chain1.setText(QtWidgets.QApplication.translate("BlendJointChains", "select", None, -1))
        self.label_chainchild.setText(QtWidgets.QApplication.translate("BlendJointChains", "Child joint chain", None, -1))
        self.label_chain2.setText(QtWidgets.QApplication.translate("BlendJointChains", "Joint chain 2", None, -1))
        self.pushbutton_select_chainchild.setText(QtWidgets.QApplication.translate("BlendJointChains", "select", None, -1))
        self.pushbutton_controller.setText(QtWidgets.QApplication.translate("BlendJointChains", "select", None, -1))
        self.label_controller.setText(QtWidgets.QApplication.translate("BlendJointChains", "Controller", None, -1))
        self.pushbutton_select_all.setText(QtWidgets.QApplication.translate("BlendJointChains", "Select all", None, -1))
        self.lineedit_attrname.setText(QtWidgets.QApplication.translate("BlendJointChains", "Blend", None, -1))
        self.label_attrname.setText(QtWidgets.QApplication.translate("BlendJointChains", "Attribute name   ", None, -1))
        self.pushbutton_create.setText(QtWidgets.QApplication.translate("BlendJointChains", "Create", None, -1))


        
    def create_widgets(self):
        self.setObjectName("BlendJointChains")
        self.resize(408, 253)
        self.verticalLayoutWidget = QtWidgets.QWidget(self)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 391, 236))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(10, 10, 10, 10)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setContentsMargins(10, 10, 10, 10)
        self.gridLayout.setObjectName("gridLayout")
        self.lineedit_controller = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.lineedit_controller.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_controller.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_controller.setObjectName("lineedit_controller")
        self.gridLayout.addWidget(self.lineedit_controller, 5, 1, 1, 1)
        self.label_chain1 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_chain1.setMinimumSize(QtCore.QSize(0, 20))
        self.label_chain1.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_chain1.setObjectName("label_chain1")
        self.gridLayout.addWidget(self.label_chain1, 0, 0, 1, 1)
        self.pushbutton_select_chain1_2 = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushbutton_select_chain1_2.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_select_chain1_2.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_select_chain1_2.setObjectName("pushbutton_select_chain1_2")
        self.gridLayout.addWidget(self.pushbutton_select_chain1_2, 0, 2, 1, 1)
        self.lineedit_chain1 = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.lineedit_chain1.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_chain1.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_chain1.setObjectName("lineedit_chain1")
        self.gridLayout.addWidget(self.lineedit_chain1, 0, 1, 1, 1)
        self.lineedit_chain2 = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.lineedit_chain2.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_chain2.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_chain2.setObjectName("lineedit_chain2")
        self.gridLayout.addWidget(self.lineedit_chain2, 1, 1, 1, 1)
        self.pushbutton_select_chain1 = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushbutton_select_chain1.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_select_chain1.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_select_chain1.setObjectName("pushbutton_select_chain1")
        self.gridLayout.addWidget(self.pushbutton_select_chain1, 1, 2, 1, 1)
        self.lineedit_chainchild = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.lineedit_chainchild.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_chainchild.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_chainchild.setObjectName("lineedit_chainchild")
        self.gridLayout.addWidget(self.lineedit_chainchild, 2, 1, 1, 1)
        self.label_chainchild = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_chainchild.setMinimumSize(QtCore.QSize(0, 20))
        self.label_chainchild.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_chainchild.setObjectName("label_chainchild")
        self.gridLayout.addWidget(self.label_chainchild, 2, 0, 1, 1)
        self.label_chain2 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_chain2.setMinimumSize(QtCore.QSize(0, 20))
        self.label_chain2.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_chain2.setObjectName("label_chain2")
        self.gridLayout.addWidget(self.label_chain2, 1, 0, 1, 1)
        self.pushbutton_select_chainchild = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushbutton_select_chainchild.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_select_chainchild.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_select_chainchild.setObjectName("pushbutton_select_chainchild")
        self.gridLayout.addWidget(self.pushbutton_select_chainchild, 2, 2, 1, 1)
        self.pushbutton_controller = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushbutton_controller.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_controller.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_controller.setObjectName("pushbutton_controller")
        self.gridLayout.addWidget(self.pushbutton_controller, 5, 2, 1, 1)
        self.label_controller = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_controller.setMinimumSize(QtCore.QSize(0, 20))
        self.label_controller.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_controller.setObjectName("label_controller")
        self.gridLayout.addWidget(self.label_controller, 5, 0, 1, 1)
        self.pushbutton_select_all = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushbutton_select_all.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_select_all.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_select_all.setObjectName("pushbutton_select_all")
        self.gridLayout.addWidget(self.pushbutton_select_all, 3, 1, 1, 1)
        spacerItem = QtWidgets.QSpacerItem(40, 10, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 4, 0, 1, 3)
        self.lineedit_attrname = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.lineedit_attrname.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_attrname.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_attrname.setObjectName("lineedit_attrname")
        self.gridLayout.addWidget(self.lineedit_attrname, 6, 1, 1, 1)
        self.label_attrname = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_attrname.setMinimumSize(QtCore.QSize(0, 20))
        self.label_attrname.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_attrname.setObjectName("label_attrname")
        self.gridLayout.addWidget(self.label_attrname, 6, 0, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)
        self.pushbutton_create = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushbutton_create.setMinimumSize(QtCore.QSize(0, 24))
        self.pushbutton_create.setMaximumSize(QtCore.QSize(16777215, 26))
        self.pushbutton_create.setObjectName("pushbutton_create")
        self.verticalLayout.addWidget(self.pushbutton_create)

try:
    Dialog.close()
    Dialog.deleteLater()
except:
    pass

Dialog = Dialog_Window()
Dialog.show()































					

...

Forces Local Axis visibility On or Off (in a hierarchy)


						from PySide2 import QtCore
from PySide2 import QtWidgets
from PySide2 import QtGui
from shiboken2 import wrapInstance

import maya.OpenMayaUI as moui
import maya.cmds as cmds

def maya_main_window():
    main_window_ptr = moui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
                        
class Dialog_Window(QtWidgets.QDialog):
    
    def __init__(self, parent = maya_main_window()):
        super(Dialog_Window, self).__init__(parent)
        self.setWindowFlags(self.windowFlags()^QtCore.Qt.WindowContextHelpButtonHint)

        self.create_widgets()
        self.create_connections()
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)

           
    def create_connections(self):
        self.pushButton_1.clicked.connect(self.visibility_on)
        self.pushButton_2.clicked.connect(self.visibility_off)
        
    def visibility_on(self):
        cmds.select( hi=True)
        selection = cmds.ls(sl=True)
        for i in selection:
            cmds.setAttr(i + ".displayLocalAxis", 1)
            
    def visibility_off(self):
        cmds.select( hi=True)
        selection = cmds.ls(sl=True)

        for i in selection:
            cmds.setAttr(i + ".displayLocalAxis", 0)
	#Generated code for the UI from Qt-Designer
	def retranslateUi(self):
        self.setWindowTitle(QtWidgets.QApplication.translate("LocalAxisVisibility", "Local Rotation Visibility", None, -1))
        self.label.setText(QtWidgets.QApplication.translate("LocalAxisVisibility", "Local Rotation axis visibility", None, -1))
        self.pushButton_1.setText(QtWidgets.QApplication.translate("LocalAxisVisibility", "Visible", None, -1))
        self.pushButton_2.setText(QtWidgets.QApplication.translate("LocalAxisVisibility", "Hide", None, -1))

        
    def create_widgets(self):
        self.setObjectName("LocalAxisVisibility")
        self.resize(200, 144)
        self.setMaximumSize(205, 149)
        self.setMinimumWidth(205)
        self.verticalLayoutWidget = QtWidgets.QWidget(self)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 180, 121))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.pushButton_1 = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushButton_1.setObjectName("pushButton_01")
        self.verticalLayout.addWidget(self.pushButton_1)
        self.pushButton_2 = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushButton_2.setObjectName("pushButton_2")
        self.verticalLayout.addWidget(self.pushButton_2)
try:
    Dialog.close()
    Dialog.deleteLater()
except:
    pass

Dialog = Dialog_Window()
Dialog.show()
					

...

Automates setting up a no flip leg


						#Automates setting up a reverse foot 
#Makes sure the minimum amount of items needed is selected and will tell you if not
#Also only creates those items if they are not already present

from PySide2 import QtCore
from PySide2 import QtWidgets
from PySide2 import QtGui
from shiboken2 import wrapInstance

import maya.OpenMayaUI as moui
import maya.cmds as cmds

def maya_main_window():
    main_window_ptr = moui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
                        
class Dialog_Window(QtWidgets.QDialog):
    
    def __init__(self, parent = maya_main_window()):
        super(Dialog_Window, self).__init__(parent)
        self.setWindowFlags(self.windowFlags()^QtCore.Qt.WindowContextHelpButtonHint)

        self.create_widgets()
        self.create_connections()
        self.retranslateUi()
        #Set some variables that are needed later
        self.noflip_ik = None
        self.leg_ik = None
        self.final_leg_pv = None
        self.final_noflip_pv = None
        self.flipknee = None
        
               
    def create_connections(self):
        self.pb_select_hipjoint.clicked.connect(self.select_hip)
        self.pb_select_kneejoint.clicked.connect(self.select_knee)
        self.pb_select_anklejoint.clicked.connect(self.select_ankle)
        self.pb_select_all.clicked.connect(self.select_all)
        self.pb_select_footcnt.clicked.connect(self.select_foot)
        self.pb_select_legik.clicked.connect(self.select_legik)
        
        self.pb_altertwist.clicked.connect(self.alter_twist)
        self.pb_createloc.clicked.connect(self.create_pv)
        self.pb_deleteloc.clicked.connect(self.delete_pv)
        self.pb_create_noflip.clicked.connect(self.create_noflip_ik)
        self.pb_finish.clicked.connect(self.create_noflipleg)

    def select_hip(self):
        selected = cmds.ls(sl=True)
        self.le_hipjoint.setText(selected[0])
        
    def select_knee(self):
        selected = cmds.ls(sl=True)
        self.le_kneejoint.setText(selected[0])
        
    def select_ankle(self):
        selected = cmds.ls(sl=True)
        self.le_anklejoint.setText(selected[0])
        
    def select_all(self):
        selected = cmds.ls(sl=True)
        self.le_hipjoint.setText(selected[0])
        self.le_kneejoint.setText(selected[1])
        self.le_anklejoint.setText(selected[2])
        
    def select_foot(self):
        selected = cmds.ls(sl=True)
        self.le_footcntr.setText(selected[0])
        
    def select_legik(self):
        selected = cmds.ls(sl=True)
        self.leg_ik = self.le_legik.setText(selected[0])
        
    def create_pv(self):
        #User inputs
        namehip = self.le_hipjoint.text()
        nameknee = self.le_kneejoint.text()
        nameankle = self.le_anklejoint.text()
        #Create PV locators
        #Check if they aren't already in the scene
        try:
            cmds.select("NoFlip_PV_Locator_Only_Move_Outwards")
            heel_locator = cmds.ls(sl=True)
            print "You already have a NoFlip_PV_Locator created!"
                    
        except:
            noflip_loc = cmds.spaceLocator(n='NoFlip_PV_Locator_Only_Move_Outwards')
            alin = cmds.parentConstraint(nameankle, noflip_loc)
            cmds.delete(alin)
            
        try:
            cmds.select("IKLeg_PV_Locator_Dont_move_sideways")
            heel_locator = cmds.ls(sl=True)
            print "You already have a IKLeg_PV_Locator created!"
                    
        except:
            ikleg_loc = cmds.spaceLocator(n="IKLeg_PV_Locator_Dont_move_sideways")
            alin = cmds.parentConstraint(nameknee, ikleg_loc)
            cmds.delete(alin)
        
    def delete_pv(self):
        #Delete the placement locators (If they are there
        try:
            cmds.delete("IKLeg_PV_Locator_Dont_move_sideways")
        except:
            print "IKLeg_PV_Locator_Dont_move_sideways is already deleted!"
        try:
            cmds.delete("NoFlip_PV_Locator_Only_Move_Outwards")
        except:
            print "NoFlip_PV_Locator_Only_Move_Outwards is already deleted!"

    def create_noflip_ik(self):
        
        namehip = self.le_hipjoint.text()
        nameknee = self.le_kneejoint.text()
        nameankle = self.le_anklejoint.text()
        foot_cntr = self.le_footcntr.text()
        old = self.le_oldname.text()
        #get the lenght so the last part of the name can be inserted after the part that will be changed
        oldlen = len(old)
        side = ""
        if self.rb_None.isChecked():
            side = ""
        elif self.rb_L.isChecked():
            side = "L_"
        elif self.rb_R.isChecked():
            side = "R_"
        
        cmds.select(None)
        #Create the actual pv_locators in case they got moved in a wrong plane
        final_noflip_pv = cmds.spaceLocator(n=side + "NoFlip_PV")
        noflip_pv_grp = cmds.group(final_noflip_pv, n = side + "NoFlip_PV_NullGrp")
        noflip_alin = cmds.parentConstraint("NoFlip_PV_Locator_Only_Move_Outwards", noflip_pv_grp)
        cmds.delete(noflip_alin)
        cmds.parent(noflip_pv_grp, foot_cntr)

        final_leg_pv = cmds.spaceLocator(n=side + "Leg_PV")
        leg_pv_grp = cmds.group(final_leg_pv, n = side + "Leg_PV_NullGrp")
        leg_alin = cmds.parentConstraint("IKLeg_PV_Locator_Dont_move_sideways", leg_pv_grp)
        cmds.delete(leg_alin)


        #Create the duplicate joint chain and name correspondingly and create IK
        #Find the index of the to be replaced userdefined string
        hipindex = namehip.index(old)
        kneeindex = nameknee.index(old)
        ankleindex = nameankle.index(old)

        #Duplicate them seperately so they can be renamed easier
        fliphip = cmds.duplicate(namehip, po=True)
        fliphip = cmds.rename(fliphip, namehip[:hipindex] + "NoFlip" + namehip[(hipindex+oldlen):])

        flipknee = cmds.duplicate(nameknee, po=True)
        flipknee = cmds.rename(flipknee, nameknee[:kneeindex] + "NoFlip" + nameknee[(kneeindex+oldlen):])

        flipankle = cmds.duplicate(nameankle, po=True)
        flipankle = cmds.rename(flipankle, nameankle[:ankleindex] + "NoFlip" + nameankle[(ankleindex+oldlen):])

        #Parent the no flip chain to the world so the user can parent it correctly manually
        if cmds.listRelatives(namehip, p=True) == None:
            pass
        else:
            cmds.parent(fliphip, w=True)
        #Parent the knee and ankle joint
        cmds.parent(flipknee, fliphip)
        cmds.parent(flipankle, flipknee)

        if self.leg_ik != None:
            leg_ik = self.le_legik.text()
        else:
            leg_ik = cmds.ikHandle(sj = namehip, ee = nameankle, sol = "ikRPsolver", n=side + 'Leg_IKHndl')
            cmds.parent(leg_ik[0], foot_cntr)
            
        noflip_ik = cmds.ikHandle(sj = fliphip, ee = flipankle, sol = "ikRPsolver", n=side + 'NoFlip_IKHndl')
        cmds.parent(noflip_ik[0], foot_cntr)


        cmds.poleVectorConstraint(final_noflip_pv, noflip_ik[0])
        cmds.setAttr(noflip_ik[0] + ".twist", 90)
        
        self.noflip_ik = noflip_ik
        self.leg_ik = leg_ik
        self.final_leg_pv = final_leg_pv
        self.flipknee =flipknee

        
    def alter_twist(self):
        #Alter the twist value
        new_value = self.le_twist.text()
        print self.noflip_ik[0]
        cmds.setAttr(self.noflip_ik[0] + ".twist", int(new_value))
        
    def create_noflipleg(self):
        #Finalize the set-up
        cmds.parentConstraint(self.flipknee, self.final_leg_pv, mo=True)
        cmds.poleVectorConstraint(self.final_leg_pv, self.leg_ik[0])
		
		
	#Generated code for UI from Qt-Designer
	def retranslateUi(self):
        self.setWindowTitle(QtWidgets.QApplication.translate("NoFlip_Leg", "NoFlip Leg", None, -1))
        self.l_hipjoint.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Hip Joint", None, -1))
        self.pb_select_all.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "select all", None, -1))
        self.pb_select_anklejoint.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "select", None, -1))
        self.pb_select_hipjoint.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "select", None, -1))
        self.l_anklejoint.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Ankle Joint", None, -1))
        self.pb_select_kneejoint.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "select", None, -1))
        self.pb_select_footcnt.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "select", None, -1))
        self.l_kneejoint.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Knee Joint", None, -1))
        self.le_legik.setPlaceholderText(QtWidgets.QApplication.translate("NoFlip_Leg", "Only if leg IK is already present", None, -1))
        self.l_legik.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Leg IK", None, -1))
        self.l_footcntr.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Foot contr", None, -1))
        self.pb_select_legik.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "select", None, -1))
        self.le_oldname.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "IK", None, -1))
        self.l_replacename.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Part of name you want to replace with NoFlip", None, -1))
        self.groupBox.setTitle(QtWidgets.QApplication.translate("NoFlip_Leg", "Prefix", None, -1))
        self.rb_None.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "None", None, -1))
        self.rb_L.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "L", None, -1))
        self.rb_R.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "R", None, -1))
        self.pb_createloc.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Create Pole Vector placement Locators", None, -1))
        self.pb_deleteloc.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Delete Pole Vector placement Locators", None, -1))
        self.pb_create_noflip.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Create NoFlip IK", None, -1))
        self.l_twist.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Twist", None, -1))
        self.pb_altertwist.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Alter", None, -1))
        self.pb_finish.setText(QtWidgets.QApplication.translate("NoFlip_Leg", "Finish No Flip Leg", None, -1))
        
    def create_widgets(self):
        self.setObjectName("NoFlip_Leg")
        self.resize(348, 511)
        self.verticalLayoutWidget = QtWidgets.QWidget(self)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 331, 491))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setSpacing(10)
        self.verticalLayout.setContentsMargins(5, 10, 5, 10)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout_2 = QtWidgets.QGridLayout()
        self.gridLayout_2.setContentsMargins(-1, 5, -1, 5)
        self.gridLayout_2.setVerticalSpacing(10)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.l_hipjoint = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_hipjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.l_hipjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_hipjoint.setObjectName("l_hipjoint")
        self.gridLayout_2.addWidget(self.l_hipjoint, 0, 0, 1, 1)
        self.pb_select_all = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_all.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_select_all.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_select_all.setObjectName("pb_select_all")
        self.gridLayout_2.addWidget(self.pb_select_all, 3, 1, 1, 1)
        self.pb_select_anklejoint = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_anklejoint.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_select_anklejoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_select_anklejoint.setObjectName("pb_select_anklejoint")
        self.gridLayout_2.addWidget(self.pb_select_anklejoint, 2, 2, 1, 1)
        self.pb_select_hipjoint = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_hipjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_select_hipjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_select_hipjoint.setObjectName("pb_select_hipjoint")
        self.gridLayout_2.addWidget(self.pb_select_hipjoint, 0, 2, 1, 1)
        self.le_hipjoint = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_hipjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.le_hipjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_hipjoint.setObjectName("le_hipjoint")
        self.gridLayout_2.addWidget(self.le_hipjoint, 0, 1, 1, 1)
        self.l_anklejoint = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_anklejoint.setMinimumSize(QtCore.QSize(0, 20))
        self.l_anklejoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_anklejoint.setObjectName("l_anklejoint")
        self.gridLayout_2.addWidget(self.l_anklejoint, 2, 0, 1, 1)
        self.pb_select_kneejoint = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_kneejoint.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_select_kneejoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_select_kneejoint.setObjectName("pb_select_kneejoint")
        self.gridLayout_2.addWidget(self.pb_select_kneejoint, 1, 2, 1, 1)
        self.pb_select_footcnt = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_footcnt.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_select_footcnt.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_select_footcnt.setObjectName("pb_select_footcnt")
        self.gridLayout_2.addWidget(self.pb_select_footcnt, 4, 2, 1, 1)
        self.l_kneejoint = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_kneejoint.setMinimumSize(QtCore.QSize(0, 20))
        self.l_kneejoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_kneejoint.setObjectName("l_kneejoint")
        self.gridLayout_2.addWidget(self.l_kneejoint, 1, 0, 1, 1)
        self.le_legik = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_legik.setMinimumSize(QtCore.QSize(0, 20))
        self.le_legik.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_legik.setObjectName("le_legik")
        self.gridLayout_2.addWidget(self.le_legik, 5, 1, 1, 1)
        self.le_kneejoint = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_kneejoint.setMinimumSize(QtCore.QSize(0, 20))
        self.le_kneejoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_kneejoint.setObjectName("le_kneejoint")
        self.gridLayout_2.addWidget(self.le_kneejoint, 1, 1, 1, 1)
        self.le_anklejoint = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_anklejoint.setMinimumSize(QtCore.QSize(0, 20))
        self.le_anklejoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_anklejoint.setObjectName("le_anklejoint")
        self.gridLayout_2.addWidget(self.le_anklejoint, 2, 1, 1, 1)
        self.l_legik = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_legik.setMinimumSize(QtCore.QSize(0, 20))
        self.l_legik.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_legik.setObjectName("l_legik")
        self.gridLayout_2.addWidget(self.l_legik, 5, 0, 1, 1)
        self.l_footcntr = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_footcntr.setMinimumSize(QtCore.QSize(0, 20))
        self.l_footcntr.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_footcntr.setObjectName("l_footcntr")
        self.gridLayout_2.addWidget(self.l_footcntr, 4, 0, 1, 1)
        self.pb_select_legik = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_legik.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_select_legik.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_select_legik.setObjectName("pb_select_legik")
        self.gridLayout_2.addWidget(self.pb_select_legik, 5, 2, 1, 1)
        self.le_footcntr = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_footcntr.setMinimumSize(QtCore.QSize(0, 20))
        self.le_footcntr.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_footcntr.setObjectName("le_footcntr")
        self.gridLayout_2.addWidget(self.le_footcntr, 4, 1, 1, 1)
        self.le_oldname = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_oldname.setMinimumSize(QtCore.QSize(0, 20))
        self.le_oldname.setMaximumSize(QtCore.QSize(75, 22))
        self.le_oldname.setObjectName("le_oldname")
        self.gridLayout_2.addWidget(self.le_oldname, 6, 2, 1, 1)
        self.l_replacename = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_replacename.setMinimumSize(QtCore.QSize(0, 20))
        self.l_replacename.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_replacename.setObjectName("l_replacename")
        self.gridLayout_2.addWidget(self.l_replacename, 6, 0, 1, 2)
        self.verticalLayout.addLayout(self.gridLayout_2)
        self.groupBox = QtWidgets.QGroupBox(self.verticalLayoutWidget)
        self.groupBox.setObjectName("groupBox")
        self.rb_None = QtWidgets.QRadioButton(self.groupBox)
        self.rb_None.setGeometry(QtCore.QRect(60, 10, 82, 18))
        self.rb_None.setMinimumSize(QtCore.QSize(0, 18))
        self.rb_None.setMaximumSize(QtCore.QSize(16777215, 20))
        self.rb_None.setObjectName("rb_None")
        self.rb_None.setChecked(True)
        self.rb_L = QtWidgets.QRadioButton(self.groupBox)
        self.rb_L.setGeometry(QtCore.QRect(150, 10, 82, 18))
        self.rb_L.setMinimumSize(QtCore.QSize(0, 18))
        self.rb_L.setMaximumSize(QtCore.QSize(16777215, 20))
        self.rb_L.setObjectName("rb_L")
        self.rb_R = QtWidgets.QRadioButton(self.groupBox)
        self.rb_R.setGeometry(QtCore.QRect(230, 10, 82, 18))
        self.rb_R.setMinimumSize(QtCore.QSize(0, 18))
        self.rb_R.setMaximumSize(QtCore.QSize(16777215, 20))
        self.rb_R.setObjectName("rb_R")
        self.verticalLayout.addWidget(self.groupBox)
        self.line_2 = QtWidgets.QFrame(self.verticalLayoutWidget)
        self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.verticalLayout.addWidget(self.line_2)
        self.pb_createloc = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_createloc.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_createloc.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_createloc.setObjectName("pb_createloc")
        self.verticalLayout.addWidget(self.pb_createloc)
        self.pb_deleteloc = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_deleteloc.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_deleteloc.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_deleteloc.setObjectName("pb_deleteloc")
        self.verticalLayout.addWidget(self.pb_deleteloc)
        self.line = QtWidgets.QFrame(self.verticalLayoutWidget)
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.verticalLayout.addWidget(self.line)
        self.pb_create_noflip = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_create_noflip.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_create_noflip.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_create_noflip.setObjectName("pb_create_noflip")
        self.verticalLayout.addWidget(self.pb_create_noflip)
        self.gridLayout_3 = QtWidgets.QGridLayout()
        self.gridLayout_3.setContentsMargins(20, -1, 20, -1)
        self.gridLayout_3.setHorizontalSpacing(20)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.l_twist = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_twist.setMinimumSize(QtCore.QSize(0, 20))
        self.l_twist.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_twist.setObjectName("l_twist")
        self.gridLayout_3.addWidget(self.l_twist, 0, 0, 1, 1)
        self.le_twist = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.le_twist.sizePolicy().hasHeightForWidth())
        self.le_twist.setSizePolicy(sizePolicy)
        self.le_twist.setMinimumSize(QtCore.QSize(0, 20))
        self.le_twist.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_twist.setObjectName("le_twist")
        self.gridLayout_3.addWidget(self.le_twist, 0, 1, 1, 1)
        self.pb_altertwist = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_altertwist.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_altertwist.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_altertwist.setObjectName("pb_altertwist")
        self.gridLayout_3.addWidget(self.pb_altertwist, 0, 2, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout_3)
        self.line_3 = QtWidgets.QFrame(self.verticalLayoutWidget)
        self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")
        self.verticalLayout.addWidget(self.line_3)
        self.pb_finish = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_finish.setMinimumSize(QtCore.QSize(0, 20))
        self.pb_finish.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pb_finish.setObjectName("pb_finish")
        self.verticalLayout.addWidget(self.pb_finish)
try:
    Dialog.close()
    Dialog.deleteLater()
except:
    pass

Dialog = Dialog_Window()
Dialog.show()





					

...

Automates creating a reverse foot


						#Automates setting up a reverse foot 
#Makes sure the minimum amount of items needed is selected and will tell you if not
#Also only creates those items if they are not already present

from PySide2 import QtCore
from PySide2 import QtWidgets
from PySide2 import QtGui
from shiboken2 import wrapInstance

import maya.OpenMayaUI as moui
import maya.cmds as cmds

def maya_main_window():
    main_window_ptr = moui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
                        
class Dialog_Window(QtWidgets.QDialog):
    
    def __init__(self, parent = maya_main_window()):
        super(Dialog_Window, self).__init__(parent)
        self.setWindowFlags(self.windowFlags()^QtCore.Qt.WindowContextHelpButtonHint)

        self.create_widgets()
        self.create_connections()
        self.retranslateUi()
           
    def create_connections(self):
        self.pb_select_anklejnt.clicked.connect(self.select_ankle)
        self.pb_select_footjnt.clicked.connect(self.select_foot)
        self.pb_select_toejnt.clicked.connect(self.select_toe)
        self.pb_select_alljnt.clicked.connect(self.select_all)
        self.pb_select_legik.clicked.connect(self.select_IK)
        self.pb_select_footcntr.clicked.connect(self.select_controller)
        
        self.pb_placementloc_create.clicked.connect(self.create_placement_loc)
        self.pb_placementloc_delete.clicked.connect(self.delete_placement_loc)
        self.pb_create.clicked.connect(self.create_reffoot)
        
    def select_ankle(self):
        selected = cmds.ls(sl=True)
        self.le_anklejnt.setText(selected[0])
        
    def select_foot(self):
        selected = cmds.ls(sl=True)
        self.le_footjnt.setText(selected[0])
        
    def select_toe(self):
        selected = cmds.ls(sl=True)
        self.le_toejnt.setText(selected[0])
        
    def select_all(self):
        selected = cmds.ls(sl=True)
        self.le_anklejnt.setText(selected[0])
        self.le_footjnt.setText(selected[1])
        self.le_toejnt.setText(selected[2])
        
    def select_IK(self):
        selected = cmds.ls(sl=True)
        self.le_legik.setText(selected[0])
        
    def select_controller(self):
        selected = cmds.ls(sl=True)
        self.le_legik_2.setText(selected[0])
        
    
    def create_placement_loc(self):
        #Checks if there is already a locator for it in the scene before creating a new one
        try:
            cmds.select("Reverse_Heel")
            heel_locator = cmds.ls(sl=True)
            print "You already have a Reverse_Heel locator created!"
            
        except:
            cmds.spaceLocator(n='Reverse_Heel')
        #Checks if there is already a locator for it in the scene before creating a new one
        try:
            cmds.select("Reverse_CenterBank")
            heel_locator = cmds.ls(sl=True)
            print "You already have a Reverse_CenterBank locator created!"
        except:
            cmds.spaceLocator(n='Reverse_CenterBank')
        #Checks if there is already a locator for it in the scene before creating a new one
        try:
            cmds.select("Reverse_EdgeBank")
            heel_locator = cmds.ls(sl=True)
            print "You already have a Reverse_EdgeBank locator created!"
            
        except:
            cmds.spaceLocator(n='Reverse_EdgeBank')

                
    
    def delete_placement_loc(self):
        try:
            cmds.delete("Reverse_Heel")
        except:
            print "Reverse_Heel locator is already deleted."
        try:
            cmds.delete("Reverse_CenterBank")
        except:
            print "Reverse_CenterBank locator is already deleted."
        try:
            cmds.delete("Reverse_EdgeBank")
        except:
            print "Reverse_EdgeBank locator is already deleted."
        
    
    def create_reffoot(self):
        radius = 0.2
        side = ""
        ankle = self.le_anklejnt.text()
        foot = self.le_footjnt.text()
        toe = self.le_toejnt.text()
        #cmds.spaceLocator(n='Reverse_Heel')
        heel = 'Reverse_Heel'
        #cmds.spaceLocator(n='Reverse_CenterBank')
        cbank = 'Reverse_CenterBank'
        #cmds.spaceLocator(n='Reverse_EdgeBank')
        ebank = 'Reverse_EdgeBank'

        leg_IK = self.le_legik.text()
        foot_cntr = self.le_legik_2.text()
        
        
        list_heel = cmds.ls("Reverse_Heel")
        list_cbank = cmds.ls('Reverse_CenterBank')
        list_ebank = cmds.ls('Reverse_EdgeBank')
        list_ankle = cmds.ls(ankle)
        list_foot = cmds.ls(foot)
        list_toe = cmds.ls(toe)
        
        if self.rb_L.isChecked():
            side = "L_"
        if self.rb_L_2.isChecked():
            side = "R_"
        if self.rb_L_3.isChecked():
            side = ""
       
       
        if list_heel != [] and list_cbank !=[] and list_ebank != []:
            if list_ankle != [] and list_foot != [] and list_toe != []:
                cmds.select(None)
                #Align rev cbank to cbank locator
                rev_cbank_jnt = cmds.joint(n = side + "cbank_revjnt", rad=radius)
                alin_cbank = cmds.pointConstraint(cbank, rev_cbank_jnt)
                cmds.delete(alin_cbank)
                #Align rev ebank to ebank locator
                rev_ebank_jnt = cmds.joint(n = side + "ebank_revjnt", rad=radius)
                alin_ebank = cmds.pointConstraint(ebank, rev_ebank_jnt)
                cmds.delete(alin_ebank)
                #Align rev heel to heel locator
                rev_heel_jnt = cmds.joint(n = side + "heel_revjnt", rad=radius)
                alin_heel = cmds.pointConstraint(heel, rev_heel_jnt)
                cmds.delete(alin_heel)
                #Aligh rev pivot to foot joint
                rev_pivot_jnt = cmds.joint(n = side + "pivot_revjnt", rad=radius)
                alin_pivot = cmds.pointConstraint(foot, rev_pivot_jnt)
                cmds.delete(alin_pivot)
                #Aligh rev toe to toe joint
                rev_toe_jnt = cmds.joint(n = side + "toe_revjnt", rad=radius)
                alin_toe = cmds.pointConstraint(toe, rev_toe_jnt)
                cmds.delete(alin_toe)
                #Align rev ball joint to foot joint
                rev_ball_jnt = cmds.joint(n = side + "ball_revjnt", rad=radius)
                alin_ball = cmds.pointConstraint(foot, rev_ball_jnt)
                cmds.delete(alin_ball)
                #Align rev ankle joint to ankle joint
                rev_ankle_jnt = cmds.joint(n = side + "ankle_revjnt", rad=radius)
                alin_ankle = cmds.pointConstraint(ankle, rev_ankle_jnt)
                cmds.delete(alin_ankle)

                #Orient the joints --- Maybe add the option to change that orientation??
                #Though not neccesary since parent contraints don't care about orientation
                cmds.joint(rev_cbank_jnt, e = True, oj = 'xyz', sao = 'yup', ch = True)
                cmds.joint(rev_ebank_jnt, e = True, oj = 'none')
                cmds.joint(rev_heel_jnt, e = True, oj = 'xyz', sao = 'yup', ch = True)
                cmds.joint(rev_ankle_jnt, e = True, oj = 'none')

                #Create IK in normal IK chain to be controlled by the reversed foot by parenting
                foot_IK = cmds.ikHandle(sj = ankle, ee = foot, sol = "ikSCsolver", n=side + 'foot_IKHndl')
                toe_IK = cmds.ikHandle(sj = foot, ee = toe, sol = "ikSCsolver", n=side + 'toe_IKHndl')

                cmds.parent(toe_IK[0], rev_pivot_jnt)
                cmds.parent(foot_IK[0], rev_toe_jnt)
                
                
                
                if leg_IK != None:
                    cmds.parent(leg_IK, rev_ankle_jnt)
                    
                if foot_cntr != None:
                    #Group the reverse foot and let it be controlled by the
                    rev_grp = cmds.group(rev_cbank_jnt, n= side + "revfoot_Grp")
                    cmds.parentConstraint(foot_cntr, rev_grp, mo=True)

                    #Create attributes on foot controlle
                    
                    cmds.addAttr(foot_cntr, ln = "C_Bank", at='float', dv=0, k=True)
                    cmds.addAttr(foot_cntr, ln = "E_Bank", at='float', dv=0, k=True)
                    cmds.addAttr(foot_cntr, ln = "Heel", at='float', dv=0, k=True)
                    cmds.addAttr(foot_cntr, ln = "Pivot", at='float', dv=0, k=True)
                    cmds.addAttr(foot_cntr, ln = "Toe", at='float', dv=0, k=True)
                    cmds.addAttr(foot_cntr, ln = "Twist", at='float', dv=0, k=True)
                    cmds.addAttr(foot_cntr, ln = "Ball", at='float', dv=0, k=True)
                    
                    #Connect the created attributes to the reverse foot joints
                    cmds.connectAttr(foot_cntr + '.C_Bank', rev_cbank_jnt + '.rotateZ')
                    cmds.connectAttr(foot_cntr + '.E_Bank', rev_ebank_jnt + '.rotateZ')
                    cmds.connectAttr(foot_cntr + '.Heel', rev_heel_jnt + '.rotateZ')
                    cmds.connectAttr(foot_cntr + '.Pivot', rev_pivot_jnt + '.rotateY')
                    cmds.connectAttr(foot_cntr + '.Toe', rev_toe_jnt + '.rotateZ')
                    cmds.connectAttr(foot_cntr + '.Twist', rev_toe_jnt + '.rotateY')
                    cmds.connectAttr(foot_cntr + '.Ball', rev_ball_jnt + '.rotateZ')
            else:
                print "You haven't filled in all the required joints...."
        else:
            print "You don't have all the required locator's....."

	#Generated code for the UI from Qt-Designer
	 def retranslateUi(self):
        self.setWindowTitle(QtWidgets.QApplication.translate("Dialog", "Dialog", None, -1))
        self.pb_placementloc_create.setText(QtWidgets.QApplication.translate("Dialog", "Create Placement Locators", None, -1))
        self.pb_placementloc_delete.setText(QtWidgets.QApplication.translate("Dialog", "Delete Placement Locators", None, -1))
        self.l_footjnt.setText(QtWidgets.QApplication.translate("Dialog", "Foot joint", None, -1))
        self.l_toejnt.setText(QtWidgets.QApplication.translate("Dialog", "Toe joint", None, -1))
        self.l_anklejnt.setText(QtWidgets.QApplication.translate("Dialog", "Ankle joint", None, -1))
        self.pb_select_anklejnt.setText(QtWidgets.QApplication.translate("Dialog", "select", None, -1))
        self.le_legik.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Select leg IK if you want it parented", None, -1))
        self.pb_select_alljnt.setText(QtWidgets.QApplication.translate("Dialog", "select all", None, -1))
        self.pb_select_legik.setText(QtWidgets.QApplication.translate("Dialog", "select", None, -1))
        self.pb_select_toejnt.setText(QtWidgets.QApplication.translate("Dialog", "select", None, -1))
        self.pb_select_footjnt.setText(QtWidgets.QApplication.translate("Dialog", "select", None, -1))
        self.l_legik.setText(QtWidgets.QApplication.translate("Dialog", "Leg IK", None, -1))
        self.l_legik_2.setText(QtWidgets.QApplication.translate("Dialog", "Controller", None, -1))
        self.pb_select_footcntr.setText(QtWidgets.QApplication.translate("Dialog", "select", None, -1))
        self.le_legik_2.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "If you want standard attributes created", None, -1))
        self.groupBox.setTitle(QtWidgets.QApplication.translate("Dialog", "Prefix", None, -1))
        self.rb_L.setText(QtWidgets.QApplication.translate("Dialog", "L", None, -1))
        self.rb_L_2.setText(QtWidgets.QApplication.translate("Dialog", "R", None, -1))
        self.rb_L_3.setText(QtWidgets.QApplication.translate("Dialog", "None", None, -1))
        self.pb_create.setText(QtWidgets.QApplication.translate("Dialog", "Create Reverse Foot", None, -1))
        
    def create_widgets(self):
        self.setObjectName("Dialog")
        self.resize(383, 410)
        self.setMinimumSize(QtCore.QSize(200, 35))
        self.setMaximumSize(QtCore.QSize(383, 410))
        self.verticalLayoutWidget = QtWidgets.QWidget(self)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 361, 395))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(5, 10, 5, 10)
        self.verticalLayout.setObjectName("verticalLayout")
        self.pb_placementloc_create = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_placementloc_create.setMinimumSize(QtCore.QSize(0, 2))
        self.pb_placementloc_create.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pb_placementloc_create.setObjectName("pb_placementloc_create")
        self.verticalLayout.addWidget(self.pb_placementloc_create)
        self.pb_placementloc_delete = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_placementloc_delete.setMinimumSize(QtCore.QSize(0, 22))
        self.pb_placementloc_delete.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pb_placementloc_delete.setObjectName("pb_placementloc_delete")
        self.verticalLayout.addWidget(self.pb_placementloc_delete)
        self.line = QtWidgets.QFrame(self.verticalLayoutWidget)
        self.line.setMaximumSize(QtCore.QSize(16777215, 3))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.verticalLayout.addWidget(self.line)
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SetMinimumSize)
        self.gridLayout.setContentsMargins(5, 0, 5, -1)
        self.gridLayout.setHorizontalSpacing(6)
        self.gridLayout.setVerticalSpacing(14)
        self.gridLayout.setObjectName("gridLayout")
        self.le_toejnt = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_toejnt.setMinimumSize(QtCore.QSize(0, 20))
        self.le_toejnt.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_toejnt.setObjectName("le_toejnt")
        self.gridLayout.addWidget(self.le_toejnt, 2, 1, 1, 1)
        self.le_footjnt = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_footjnt.setMinimumSize(QtCore.QSize(0, 20))
        self.le_footjnt.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_footjnt.setObjectName("le_footjnt")
        self.gridLayout.addWidget(self.le_footjnt, 1, 1, 1, 1)
        self.l_footjnt = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_footjnt.setMinimumSize(QtCore.QSize(0, 20))
        self.l_footjnt.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_footjnt.setObjectName("l_footjnt")
        self.gridLayout.addWidget(self.l_footjnt, 1, 0, 1, 1)
        self.l_toejnt = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_toejnt.setMinimumSize(QtCore.QSize(0, 20))
        self.l_toejnt.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_toejnt.setObjectName("l_toejnt")
        self.gridLayout.addWidget(self.l_toejnt, 2, 0, 1, 1)
        self.l_anklejnt = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_anklejnt.setMinimumSize(QtCore.QSize(0, 20))
        self.l_anklejnt.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_anklejnt.setObjectName("l_anklejnt")
        self.gridLayout.addWidget(self.l_anklejnt, 0, 0, 1, 1)
        self.pb_select_anklejnt = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_anklejnt.setMinimumSize(QtCore.QSize(0, 22))
        self.pb_select_anklejnt.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pb_select_anklejnt.setObjectName("pb_select_anklejnt")
        self.gridLayout.addWidget(self.pb_select_anklejnt, 0, 2, 1, 1)
        self.le_legik = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_legik.setMinimumSize(QtCore.QSize(0, 20))
        self.le_legik.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_legik.setObjectName("le_legik")
        self.gridLayout.addWidget(self.le_legik, 4, 1, 1, 1)
        self.pb_select_alljnt = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_alljnt.setMinimumSize(QtCore.QSize(0, 22))
        self.pb_select_alljnt.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pb_select_alljnt.setObjectName("pb_select_alljnt")
        self.gridLayout.addWidget(self.pb_select_alljnt, 3, 1, 1, 1)
        self.pb_select_legik = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_legik.setMinimumSize(QtCore.QSize(0, 22))
        self.pb_select_legik.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pb_select_legik.setObjectName("pb_select_legik")
        self.gridLayout.addWidget(self.pb_select_legik, 4, 2, 1, 1)
        self.pb_select_toejnt = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_toejnt.setMinimumSize(QtCore.QSize(0, 22))
        self.pb_select_toejnt.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pb_select_toejnt.setObjectName("pb_select_toejnt")
        self.gridLayout.addWidget(self.pb_select_toejnt, 2, 2, 1, 1)
        self.pb_select_footjnt = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_footjnt.setMinimumSize(QtCore.QSize(0, 22))
        self.pb_select_footjnt.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pb_select_footjnt.setObjectName("pb_select_footjnt")
        self.gridLayout.addWidget(self.pb_select_footjnt, 1, 2, 1, 1)
        self.l_legik = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_legik.setMinimumSize(QtCore.QSize(0, 20))
        self.l_legik.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_legik.setObjectName("l_legik")
        self.gridLayout.addWidget(self.l_legik, 4, 0, 1, 1)
        self.le_anklejnt = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_anklejnt.setMinimumSize(QtCore.QSize(0, 20))
        self.le_anklejnt.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_anklejnt.setObjectName("le_anklejnt")
        self.gridLayout.addWidget(self.le_anklejnt, 0, 1, 1, 1)
        self.l_legik_2 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.l_legik_2.setMinimumSize(QtCore.QSize(0, 20))
        self.l_legik_2.setMaximumSize(QtCore.QSize(16777215, 22))
        self.l_legik_2.setObjectName("l_legik_2")
        self.gridLayout.addWidget(self.l_legik_2, 5, 0, 1, 1)
        self.pb_select_footcntr = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_select_footcntr.setMinimumSize(QtCore.QSize(0, 22))
        self.pb_select_footcntr.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pb_select_footcntr.setObjectName("pb_select_footcntr")
        self.gridLayout.addWidget(self.pb_select_footcntr, 5, 2, 1, 1)
        self.le_legik_2 = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.le_legik_2.setMinimumSize(QtCore.QSize(0, 20))
        self.le_legik_2.setMaximumSize(QtCore.QSize(16777215, 22))
        self.le_legik_2.setObjectName("le_legik_2")
        self.gridLayout.addWidget(self.le_legik_2, 5, 1, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setContentsMargins(5, -1, 5, -1)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.groupBox = QtWidgets.QGroupBox(self.verticalLayoutWidget)
        self.groupBox.setMinimumSize(QtCore.QSize(0, 50))
        self.groupBox.setMaximumSize(QtCore.QSize(16777215, 50))
        self.groupBox.setObjectName("groupBox")
        self.rb_L = QtWidgets.QRadioButton(self.groupBox)
        self.rb_L.setGeometry(QtCore.QRect(10, 20, 81, 22))
        self.rb_L.setMinimumSize(QtCore.QSize(0, 20))
        self.rb_L.setMaximumSize(QtCore.QSize(16777215, 22))
        self.rb_L.setObjectName("rb_L")
        self.rb_L_2 = QtWidgets.QRadioButton(self.groupBox)
        self.rb_L_2.setGeometry(QtCore.QRect(90, 20, 109, 22))
        self.rb_L_2.setMinimumSize(QtCore.QSize(0, 20))
        self.rb_L_2.setMaximumSize(QtCore.QSize(16777215, 22))
        self.rb_L_2.setObjectName("rb_L_2")
        self.rb_L_3 = QtWidgets.QRadioButton(self.groupBox)
        self.rb_L_3.setGeometry(QtCore.QRect(170, 20, 167, 22))
        self.rb_L_3.setMinimumSize(QtCore.QSize(0, 20))
        self.rb_L_3.setMaximumSize(QtCore.QSize(16777215, 22))
        self.rb_L_3.setChecked(True)
        self.rb_L_3.setObjectName("rb_L_3")
        self.horizontalLayout.addWidget(self.groupBox)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.pb_create = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pb_create.setMinimumSize(QtCore.QSize(0, 2))
        self.pb_create.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pb_create.setObjectName("pb_create")
        self.verticalLayout.addWidget(self.pb_create)

try:
    Dialog.close()
    Dialog.deleteLater()
except:
    pass

Dialog = Dialog_Window()
Dialog.show()






					

...

Automates setting up a FK or IK tail/spine/neck


						from PySide2 import QtCore
from PySide2 import QtWidgets
from PySide2 import QtGui
from shiboken2 import wrapInstance

import maya.OpenMayaUI as moui
import maya.cmds as cmds

def maya_main_window():
    main_window_ptr = moui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
                        
class Dialog_Window(QtWidgets.QDialog):
    
    def __init__(self, parent = maya_main_window()):
        super(Dialog_Window, self).__init__(parent)
        self.setWindowFlags(self.windowFlags()^QtCore.Qt.WindowContextHelpButtonHint)

        self.create_widgets()
        self.create_connections()
        self.retranslateUi()
        self.tabWidget.setCurrentIndex(3)
        QtCore.QMetaObject.connectSlotsByName(self)
        
    def create_connections(self):
        self.pushbutton_jnts_along_crv_t2.clicked.connect(self.create_joints_along_curve)
        self.pushbutton_insertjnt_t1.clicked.connect(self.insert_joints)
        self.pushbutton_setuptail_t3.clicked.connect(self.tail_setup)
        self.pushbutton_setupspine_t4.clicked.connect(self.spine_setup)
        self.pushbutton_selectcurve_t4.clicked.connect(self.selected_curve)
        self.pushbutton_selectbeginjnt_t4.clicked.connect(self.selected_begin_jnt)
        self.pushbutton_selectendjnt_t4.clicked.connect(self.selected_end_jnt)

    
    def selected_object(self):
        # Updated the selected parent object window
        selected = cmds.ls(sl=True)        
        try:
            self.textbrowser_begin_jnt_t1.setText(selected[0])
        except:
            self.textbrowser_begin_jnt_t1.setText("Nothing selected")
        try:
            self.textbrowser_end_jnt_t1.setText(selected[1])
        except:
            self.textbrowser_end_jnt_t1.setText("Nothing selected")
        try:
            self.textbrowser_selected_crv_t2.setText(selected[0])
        except:
            self.textbrowser_selected_crv_t2.setText("Nothing selected")
        try:
            self.textbrowser_selectedjnt_t3.setText(selected[0])
        except:
            self.textbrowser_selectedjnt_t3.setText("Nothing selected")
            
            

    def create_joints_along_curve(self):
        selected_crv = cmds.ls(sl=True)
        
        #User inputs
        if self.lineedit_prefix_t2.text():
            prefix = self.lineedit_prefix_t2.text() + "_"
        else:
            prefix = ""
        
        if self.lineedit_name_t2.text():
            name = self.lineedit_name_t2.text()
        else:
            name = 0
        
        if self.lineedit_amount_t2.text():
            spans = int(self.lineedit_amount_t2.text())
        else:
            spans = 0
        
        #User input radius
        rad_begin = float(self.lineedit_radius_begin_t2.text())
        rad_end = float(self.lineedit_radius_end_t2.text())
        increment = (rad_begin - rad_end) / (spans)
        increment_count = rad_begin + increment
                                                                                                                           
        if  name > 0 and spans > 0:
                #create a new crv to keep the origonal from being edited
                new_crv = cmds.duplicate(name = "new_" + selected_crv[0])
                rebuild_crv = cmds.rebuildCurve(cch = True, d = 3, rt = 0, s = spans, kep = True, kr = 2, rpo = True)
                crv_point = 0
                counter = 1
                for i in range(spans + 1):
                    pos_points = cmds.pointOnCurve(rebuild_crv, pr = crv_point)
                    new = cmds.joint(p= pos_points)
                    cmds.joint(new, e=True, rad = increment_count)
                    crv_point += 1
                    if i == 0:
                        begin = cmds.rename(prefix + name + "_beginJnt" + str(counter))
                        cmds.joint(begin, e = True, oj = 'xyz', sao = 'yup', ch = True, rad = rad_begin)
                    elif i == (spans):
                        end = cmds.rename(prefix + name + "_endJnt" + str(counter) )
                        cmds.joint(end, e = True, oj = 'none', rad = rad_end)
                    else:
                        cmds.rename(prefix + name + "_jnt" + str(counter))
                        
                    increment_count -= increment
                    counter += 1
                cmds.joint(begin, e = True, oj = 'xyz', sao = 'yup', ch = True)
                cmds.joint(end, e = True, oj = 'none')
 
        else:
            print "You did not fill in all the required fields"
            
    def insert_joints(self):
        
        # get the begin and end joint, in that order
        selected = cmds.ls(sl = True)
        # could add option to select x,y or z orientation of origonal joints, but usually X is used
        joint_orient = ".translateX"
        
        #Check if text is entered
        if self.lineedit_prefic_t1.text():
            prefix = self.lineedit_prefic_t1.text() + "_"
        else:
            prefix = ""
        
        if self.lineedit_name_t1.text():
            name = self.lineedit_name_t1.text()
        else:
            name = 0
            
        if self.lineedit_amount_t1.text():
            amount = int(self.lineedit_amount_t1.text())
        else:
            amount = 0
            
        rad_begin = float(self.lineedit_radius_begin_t1.text())
        rad_end = float(self.lineedit_radius_end_t1.text())
        # change radius of origonal joints
        cmds.joint(selected[0], e =True, rad = rad_begin)
        cmds.joint(selected[1], e =True, rad = rad_end)

            
        #get the distance each joint has to be away to get desired amount of joints insterted
        lenght = cmds.getAttr(selected[1] + joint_orient)
        difference = lenght / (amount + 1)
        
        # name and number of joints need to be entered other
        increment = (rad_begin - rad_end) / (amount + 1)
        increment_count = rad_end + increment
        if amount > 0 and name > 0:
            count = amount + 1
            for i in range(amount):
                new_jnt = cmds.insertJoint(selected[0])
                cmds.rename(prefix  + name + "_jnt" + str(count))
                cmds.setAttr((prefix  + name + "_jnt" + str(count)) + joint_orient, difference)
                cmds.joint((prefix  + name + "_jnt" + str(count)), e =True, rad = increment_count)
                count -= 1
                increment_count += increment
                
            # move the original end joint back 
            cmds.setAttr(selected[1] + joint_orient, difference)
            if self.checkbox_suffix_t1.isChecked():
                cmds.rename(selected[0],(prefix  + name  + "_beginjnt1"))
                cmds.rename(selected[1],(prefix  + name  + "_endJnt" + str(amount + 2)))
            else:
                cmds.rename(selected[0],(prefix  + name  +"_jnt1"))
                cmds.rename(selected[1],(prefix  + name  + "jnt" + str(amount + 2)))
        else:
            print "You did not fill in all the required fields"
            
    def tail_setup(self):
        #user inputs
        if self.lineedit_name_t3.text():
            name = self.lineedit_name_t3.text()
        else:
            name = 0
        
        #Check if text is entered
        if self.lineedit_prefix_t3.text():
            prefix = self.lineedit_prefix_t3.text() + "_"
        else:
            prefix = "" 
        
        
        
        rad_begin = float(self.lineedit_beginradius_t3.text())
        rad_end = float(self.lineedit_endradius_t3.text())
        size_begin = float(self.lineedit_beginsize_t3.text())
        size_end = float(self.lineedit_endsize_t3.text())
        
        circle = self.radiobutton_circle_t3.isChecked()
        custom = self.radiobutton_custom_t3.isChecked()
        
        #getting it from a selection becomes very complicated, selection order etc. so user needs to imput controller name manually        
        if self.lineedit_customcntrname_t3:
            custom_controller = self.lineedit_customcntrname_t3.text()
        else:
            custom_controller = 0

        cmds.select( hi=True)
        selected = cmds.ls(sl=True)
        #get the lenght so the code doesn't create a controller for the last joint
        lenght = len(selected) -1

        #calculate incremente per joint
        increment = (rad_begin - rad_end) / (lenght - 1)
        increment_count = rad_begin 
        increment_s = (size_begin - size_end) / (lenght - 1)
        increment_count_s = size_begin 

        #make sure name count starts at 1
        nr = 1

        #For some reason combining them into one caused some problems so I decided to just split them for now
        #if user wants simple circle controllers
        if name > 0:
            if self.radiobutton_circle_t3.isChecked():
                for i in selected:
                    if i != selected[lenght]:
                        circle = cmds.circle(n = prefix + name + "_cntr" + str(nr), nr = [1,0,0], r = increment_count)
                        cmds.group(n = prefix + name + "_cntr_grp" + str(nr))
                        null_grp = cmds.group(n = prefix + name + "_cntr_nullgrp" + str(nr))
                        alin = cmds.parentConstraint(i, null_grp)
                        cmds.delete(alin)
                        
                        if i != selected[0]:
                            # parent second to first, third to second etc.... but skip parenting the first one to something
                            cmds.parent(prefix + name + "_cntr_nullgrp" + str(nr), prefix + name + "_cntr" + str(nr-1))
                        if i == selected[1]: 
                            # directly connect rotation of first controller to the second controllers group
                            cmds.connectAttr(prefix + name + "_cntr" + str(nr-1) + ".rotate", prefix + name + "_cntr_grp" + str(nr) + ".rotate")
                        if i != selected[0] and i != selected[1]:
                            #connect rotate x
                            adl_x = cmds.shadingNode('addDoubleLinear', au = True, n= "ADL_" + prefix + name + "_rotateX_" + str(nr-1))
                            cmds.connectAttr(prefix + name + "_cntr_grp" + str(nr-1) + '.rotateX' , "ADL_" + prefix + name + "_rotateX_" + str(nr-1) + ".input1")
                            cmds.connectAttr(prefix + name + "_cntr" + str(nr-1) + '.rotateX', "ADL_" + prefix + name + "_rotateX_" + str(nr-1) + ".input2")
                            cmds.connectAttr("ADL_" + prefix + name + "_rotateX_" + str(nr-1) + ".output", prefix + name + "_cntr_grp" + str(nr) + '.rotateX')
                            #connect rotate y
                            adl_y = cmds.shadingNode('addDoubleLinear', au = True, n= "ADL_" + prefix + name + "_rotateY_" + str(nr-1))
                            cmds.connectAttr(prefix + name + "_cntr_grp" + str(nr-1) + '.rotateY' , "ADL_" + prefix + name + "_rotateY_" + str(nr-1) + ".input1")
                            cmds.connectAttr(prefix + name + "_cntr" + str(nr-1) + '.rotateY', "ADL_" + prefix + name + "_rotateY_" + str(nr-1) + ".input2")
                            cmds.connectAttr("ADL_" + prefix + name + "_rotateY_" + str(nr-1) + ".output", prefix + name + "_cntr_grp" + str(nr) + '.rotateY')
                            #connect rotate z
                            adl_z = cmds.shadingNode('addDoubleLinear', au = True, n= "ADL_" + prefix + name + "_rotateZ_" + str(nr-1))
                            cmds.connectAttr(prefix + name + "_cntr_grp" + str(nr-1) + '.rotateZ' , "ADL_" + prefix + name + "_rotateZ_" + str(nr-1) + ".input1")
                            cmds.connectAttr(prefix + name + "_cntr" + str(nr-1) + '.rotateZ', "ADL_" + prefix + name + "_rotateZ_" + str(nr-1) + ".input2")
                            cmds.connectAttr("ADL_" + prefix + name + "_rotateZ_" + str(nr-1) + ".output", prefix + name + "_cntr_grp" + str(nr) + '.rotateZ')
                        #contraint joints to controllers
                        cmds.parentConstraint(prefix + name + "_cntr" + str(nr), i, mo = True)
                        increment_count -= increment
                        nr +=1
                
            if self.radiobutton_custom_t3.isChecked() and custom_controller > 0:
                test = cmds.select(custom_controller)
                cmds.FreezeTransformations(custom_controller)
                cmds.makeIdentity(a=True, t=True, r=True, s=True)
                cmds.DeleteHistory(custom_controller)
                for i in selected:
                    if i != selected[lenght]:
                        cmds.duplicate(custom_controller, n = prefix + name + "_cntr" + str(nr))
                        test = cmds.CreateEmptyGroup()
                        cmds.rename(test, prefix + name + "_cntr_grp" + str(nr))
                        cmds.parent(prefix + name + "_cntr" + str(nr), prefix + name + "_cntr_grp" + str(nr))
                        test2 = cmds.CreateEmptyGroup()
                        cmds.rename(test2, prefix + name + "_cntr_nullgrp" + str(nr))
                        cmds.parent(prefix + name + "_cntr_grp" + str(nr), prefix + name + "_cntr_nullgrp" + str(nr))
                        cmds.xform(prefix + name + "_cntr_nullgrp" + str(nr), s = (increment_count_s, increment_count_s, increment_count_s))
                        alin = cmds.parentConstraint(i, prefix + name + "_cntr_nullgrp" + str(nr))
                        cmds.delete(alin)

                        if i != selected[0]:
                            # parent second to first, third to second etc.... but skip parenting the first one to something
                            cmds.parent(prefix + name + "_cntr_nullgrp" + str(nr), prefix + name + "_cntr" + str(nr-1))
                        if i == selected[1]: 
                            # directly connect rotation of first controller to the second controllers group
                            cmds.connectAttr(prefix + name + "_cntr" + str(nr-1) + ".rotate", prefix + name + "_cntr_grp" + str(nr) + ".rotate")
                        if i != selected[0] and i != selected[1]:
                            #connect rotate x
                            adl_x = cmds.shadingNode('addDoubleLinear', au = True, n= "ADL_" + prefix + name + "_rotateX_" + str(nr-1))
                            cmds.connectAttr(prefix + name + "_cntr_grp" + str(nr-1) + '.rotateX' , "ADL_" + prefix + name + "_rotateX_" + str(nr-1) + ".input1")
                            cmds.connectAttr(prefix + name + "_cntr" + str(nr-1) + '.rotateX', "ADL_" + prefix + name + "_rotateX_" + str(nr-1) + ".input2")
                            cmds.connectAttr("ADL_" + prefix + name + "_rotateX_" + str(nr-1) + ".output", prefix + name + "_cntr_grp" + str(nr) + '.rotateX')
                            #connect rotate y
                            adl_y = cmds.shadingNode('addDoubleLinear', au = True, n= "ADL_" + prefix + name + "_rotateY_" + str(nr-1))
                            cmds.connectAttr(prefix + name + "_cntr_grp" + str(nr-1) + '.rotateY' , "ADL_" + prefix + name + "_rotateY_" + str(nr-1) + ".input1")
                            cmds.connectAttr(prefix + name + "_cntr" + str(nr-1) + '.rotateY', "ADL_" + prefix + name + "_rotateY_" + str(nr-1) + ".input2")
                            cmds.connectAttr("ADL_" + prefix + name + "_rotateY_" + str(nr-1) + ".output", prefix + name + "_cntr_grp" + str(nr) + '.rotateY')
                            #connect rotate z
                            adl_z = cmds.shadingNode('addDoubleLinear', au = True, n= "ADL_" + prefix + name + "_rotateZ_" + str(nr-1))
                            cmds.connectAttr(prefix + name + "_cntr_grp" + str(nr-1) + '.rotateZ' , "ADL_" + prefix + name + "_rotateZ_" + str(nr-1) + ".input1")
                            cmds.connectAttr(prefix + name + "_cntr" + str(nr-1) + '.rotateZ', "ADL_" + prefix + name + "_rotateZ_" + str(nr-1) + ".input2")
                            cmds.connectAttr("ADL_" + prefix + name + "_rotateZ_" + str(nr-1) + ".output", prefix + name + "_cntr_grp" + str(nr) + '.rotateZ')
                        #contraint joints to controllers
                        cmds.parentConstraint(prefix + name + "_cntr" + str(nr), i, mo = True)
                        increment_count_s -= increment_s
                        nr +=1
            else:
                print "You need to specify you custom controller"
        else:
            print "You did not fill in all the required fields"
            
            
            
    def selected_curve(self):
        selected = cmds.ls(sl=True)
        self.lineedit_curve_t4.setText(selected[0])
        return selected
        
    def selected_begin_jnt(self):
        selected = cmds.ls(sl=True)
        self.lineedit_beginjnt_t4.setText(selected[0])
        return selected
        
    def selected_end_jnt(self):
        selected = cmds.ls(sl=True)
        self.lineedit_endjnt_t4.setText(selected[0])
        return selected
        
        
    def spine_setup(self):

        #selected_crv = self.lineedit_curve_t4.text()
        #end_jnt = self.lineedit_endjnt_t4.text()
        #begin_jnt = self.lineedit_beginjnt_t4.text()
        
        selected_crv = "new_curve1"
        begin_jnt = "M_spine_beginJnt1"
        end_jnt = "M_spine_endJnt11"
        
        if self.lineedit_name_t4.text():
            name = self.lineedit_name_t4.text()
        else:
            name = 0
        
        #Check if text is entered
        if self.lineedit_prefix_t4.text():
            prefix = self.lineedit_prefix_t4.text() + "_"
        else:
            prefix = ""
            
            
        #This one is for just three control points
        spans = 5
        rad_ends = float(self.lineedit_beginradius_t4.text())
        rad_middle = float(self.lineedit_endradius_t4.text())
        size_ends = float(self.lineedit_beginsize_t4.text())
        size_middle = float(self.lineedit_endsize_t4.text())
            
        if name > 0:
            new_crv = cmds.duplicate(selected_crv, n=(prefix + name + "_IKCrv"))
            rebuild_crv = cmds.rebuildCurve(new_crv, cch = True, d = 3, rt = 0, s = (spans -1), kep = True, kr = 2, rpo = True)
            #Get the name of the new curve for later
            new_crv_name = cmds.ls(rebuild_crv)

            #Create IKSpline handle
            cmds.ikHandle(sj = begin_jnt, ee = end_jnt, c= new_crv_name[0], sol = "ikSplineSolver", ccv=False, pcv=False, n= (prefix + name + "_IKSH"))

            crv_point = 0
            counter = 1
            span_count = 0
            cluster_list = []
            controller_list = []
            nr = 1

            #-1 at the end as remainder that count starts at 0 (ability to have more)
            middle = (spans / 2 + 1) -1
        
            if self.radiobutton_circle_t4.isChecked():
                for i in range(spans):
                #Need to create a controller for begin and end
                #And create cluster for 2 controllers
                    if i == 0 or i == (spans-1):
                        begin_cluster = cmds.cluster(new_crv_name[0] + ".cv[" + str(span_count)+ ":" + str(span_count+1) + "]", n = (prefix + name + "_Clst" + str(nr)))
                        
                        circle = cmds.circle(n = prefix + name + "_Cntr" + str(nr), r = rad_ends)
                        cmds.group()
                        null_grp = cmds.rename(prefix + name + "_CntrGrp" + str(nr))
                        alin = cmds.parentConstraint(begin_cluster, null_grp)
                        cmds.delete(alin)
                        
                        cmds.parentConstraint(circle, begin_cluster)
                        cluster_list.append(begin_cluster[1])
                        
                        controller_list.append(circle[0])

                        span_count += 2
                        nr += 1
                #Need to create a controller for middle
                    elif i == middle:
                        middle_cluster  = cmds.cluster(new_crv_name[0] + ".cv[" + str(span_count)+ "]", n = (prefix + name + "_Clst" + str(nr)))
                        
                        circle = cmds.circle(r = rad_middle, n = prefix + name + "_Cntr" + str(nr))
                        cmds.group()
                        null_grp = cmds.rename(prefix + name + "_CntrGrp" + str(nr))
                        alin = cmds.parentConstraint(middle_cluster, null_grp)
                        cmds.delete(alin)
                        
                        cmds.parentConstraint(circle, middle_cluster)
                        
                        cluster_list.append(middle_cluster[1])
                        
                        controller_list.append(null_grp)
                        
                        span_count += 1
                        nr += 1

                #No need to creat controllers for the inbetween clusters
                    else:
                        middle_cluster  = cmds.cluster(new_crv_name[0] + ".cv[" + str(span_count)+ "]", n = (prefix + name + "_Clst" + str(nr)))
                        middle_cluster_getname = cmds.ls(middle_cluster)
                        cluster_list.append(middle_cluster_getname[1])
                        span_count += 1
                        nr += 1
                    
                        
            if self.radiobutton_custom_t4.isChecked():
                custom_controller = self.lineedit_customcntrname_t4.text()
                test = cmds.select(custom_controller)
                cmds.FreezeTransformations(custom_controller)
                cmds.makeIdentity(a=True, t=True, r=True, s=True)
                cmds.DeleteHistory(custom_controller)
                
                for i in range(spans):
                #Need to create a controller for begin and end
                #And create cluster for 2 controllers
                    if i == 0 or i == (spans-1):
                        begin_cluster = cmds.cluster(new_crv_name[0] + ".cv[" + str(span_count)+ ":" + str(span_count+1) + "]", n = (prefix + name + "_Clst" + str(nr)))
                        
                        circle = cmds.duplicate(custom_controller, n = prefix + name + "_Cntr" + str(nr))
                        cmds.group(circle)
                        null_grp = cmds.rename(prefix + name + "_CntrGrp" + str(nr))
                        alin = cmds.parentConstraint(begin_cluster, null_grp)
                        cmds.delete(alin)
                        cmds.xform(null_grp, s = (size_ends,size_ends,size_ends))
                        
                        cmds.parentConstraint(begin_cluster, circle)
                        cluster_list.append(begin_cluster[1])
                        
                        controller_list.append(circle[0])

                        span_count += 2
                        nr += 1
                #Need to create a controller for middle
                    elif i == middle:
                        middle_cluster  = cmds.cluster(new_crv_name[0] + ".cv[" + str(span_count)+ "]", n = (prefix + name + "_Clst" + str(nr)))
                        
                        circle = cmds.duplicate(custom_controller, n = prefix + name + "_Cntr" + str(nr))
                        empty_grp = cmds.CreateEmptyGroup()
                        null_grp = cmds.rename(empty_grp, prefix + name + "_CntrGrp" + str(nr))
                        cmds.parent(circle, null_grp)
                        alin = cmds.parentConstraint(middle_cluster, null_grp)
                        cmds.delete(alin)
                        cmds.xform(null_grp, s = (size_middle,size_middle,size_middle))
                        
                        cmds.parentConstraint(circle, middle_cluster)
                        
                        cluster_list.append(middle_cluster[1])
                        
                        controller_list.append(null_grp)
                        
                        span_count += 1
                        nr += 1

                #No need to creat controllers for the inbetween clusters
                    else:
                        middle_cluster  = cmds.cluster(new_crv_name[0] + ".cv[" + str(span_count)+ "]", n = (prefix + name + "_Clst" + str(nr)))
                        middle_cluster_getname = cmds.ls(middle_cluster)
                        cluster_list.append(middle_cluster_getname[1])
                        span_count += 1
                        nr += 1 

                
                    
            #parent all clusters correspondingly
            cmds.parentConstraint(cluster_list[0], cluster_list[middle], mo=True)
            cmds.parentConstraint(cluster_list[spans-1], cluster_list[middle], mo=True)

            cmds.parentConstraint(cluster_list[0], cluster_list[middle -1], mo=True)
            cmds.parentConstraint(cluster_list[middle], cluster_list[middle -1], mo=True)

            cmds.parentConstraint(cluster_list[spans-1], cluster_list[middle +1], mo=True)
            cmds.parentConstraint(cluster_list[middle], cluster_list[middle +1], mo=True)

            #parent controllers correctly
            cmds.parentConstraint(controller_list[0], controller_list[1], mo=True)
            cmds.parentConstraint(controller_list[2], controller_list[1], mo=True)
        else:
            print "You did not fill in all the required fields"

    
    def closeEvent( self, event):
        # Clean up the script job stuff prior to closing the dialog.
        try:
            cmds.scriptJob( kill=self.SCRIPT_JOB_NUMBER, force=True )
            super( Dialog_Window, self ).closeEvent( event )
        except:
            pass
			
	#Generated code for the UI from Qt-Designer
	def retranslateUi(self):
        self.setWindowTitle(QtWidgets.QApplication.translate("Dialog", "Curve SetUp helper", None, -1))
        self.label_begin_jnt_t1.setText(QtWidgets.QApplication.translate("Dialog", "Begin Joint", None, -1))
        self.label_end_jnt_t1.setText(QtWidgets.QApplication.translate("Dialog", "End_Joint", None, -1))
        self.label_prefix_t1.setText(QtWidgets.QApplication.translate("Dialog", "Prefix", None, -1))
        self.lineedit_prefic_t1.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Noting entered results in \' \'", None, -1))
        self.label_name_t1.setText(QtWidgets.QApplication.translate("Dialog", "Name", None, -1))
        self.lineedit_name_t1.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Fill in base joint name.....", None, -1))
        self.checkbox_suffix_t1.setText(QtWidgets.QApplication.translate("Dialog", "Add suffix (begin/end)", None, -1))
        self.label_amout_t1.setText(QtWidgets.QApplication.translate("Dialog", "Amount", None, -1))
        self.label_radius_begin_t1.setText(QtWidgets.QApplication.translate("Dialog", "Begin Radius", None, -1))
        self.lineedit_radius_begin_t1.setText(QtWidgets.QApplication.translate("Dialog", "1", None, -1))
        self.label_radius_end_t1.setText(QtWidgets.QApplication.translate("Dialog", "End Radius", None, -1))
        self.lineedit_radius_end_t1.setText(QtWidgets.QApplication.translate("Dialog", "0.5", None, -1))
        self.pushbutton_insertjnt_t1.setText(QtWidgets.QApplication.translate("Dialog", "Insert Joints", None, -1))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.insert_jnts), QtWidgets.QApplication.translate("Dialog", "Insert", None, -1))
        self.label_selected_crv_t2.setText(QtWidgets.QApplication.translate("Dialog", "Selected Curve", None, -1))
        self.label_prefix_t2.setText(QtWidgets.QApplication.translate("Dialog", "Prefix", None, -1))
        self.lineedit_prefix_t2.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Noting entered results in \' \'", None, -1))
        self.label_name_t2.setText(QtWidgets.QApplication.translate("Dialog", "Name", None, -1))
        self.lineedit_name_t2.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Fill in base joint name.....", None, -1))
        self.label_amount_t2.setText(QtWidgets.QApplication.translate("Dialog", "Amount of Joints", None, -1))
        self.label_radius_begin_t2.setText(QtWidgets.QApplication.translate("Dialog", "Begin Radius", None, -1))
        self.lineedit_radius_begin_t2.setText(QtWidgets.QApplication.translate("Dialog", "1", None, -1))
        self.label_radius_begin_t2_2.setText(QtWidgets.QApplication.translate("Dialog", "End Radius", None, -1))
        self.lineedit_radius_end_t2.setText(QtWidgets.QApplication.translate("Dialog", "0.5", None, -1))
        self.pushbutton_jnts_along_crv_t2.setText(QtWidgets.QApplication.translate("Dialog", "Create Joints along Curve", None, -1))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.jnts_on_crv), QtWidgets.QApplication.translate("Dialog", "Along Curve", None, -1))
        self.label_selectedjnt_t3.setText(QtWidgets.QApplication.translate("Dialog", "Selected begin Joint", None, -1))
        self.groupbox_shape_t3.setTitle(QtWidgets.QApplication.translate("Dialog", "Shape", None, -1))
        self.radiobutton_circle_t3.setText(QtWidgets.QApplication.translate("Dialog", "Circle", None, -1))
        self.label_beginradius_t3.setText(QtWidgets.QApplication.translate("Dialog", "Begin Radius", None, -1))
        self.lineedit_beginradius_t3.setText(QtWidgets.QApplication.translate("Dialog", "1", None, -1))
        self.label_endradius_t3.setText(QtWidgets.QApplication.translate("Dialog", "End Radius", None, -1))
        self.lineedit_endradius_t3.setText(QtWidgets.QApplication.translate("Dialog", "0.5", None, -1))
        self.radiobutton_custom_t3.setText(QtWidgets.QApplication.translate("Dialog", "Custom", None, -1))
        self.label_beginsize_t3.setText(QtWidgets.QApplication.translate("Dialog", "Begin size", None, -1))
        self.lineedit_beginsize_t3.setText(QtWidgets.QApplication.translate("Dialog", "1", None, -1))
        self.label_endsize_t3.setText(QtWidgets.QApplication.translate("Dialog", "End size", None, -1))
        self.lineedit_endsize_t3.setText(QtWidgets.QApplication.translate("Dialog", "0.5", None, -1))
        self.label_customcntrname_t3.setText(QtWidgets.QApplication.translate("Dialog", "Custom controller\'s name:", None, -1))
        self.lineedit_customcntrname_t3.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Enter custom made controllers name", None, -1))
        self.label_prefix_t3.setText(QtWidgets.QApplication.translate("Dialog", "Prefix", None, -1))
        self.lineedit_prefix_t3.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Noting entered results in \' \'", None, -1))
        self.label_name_t3.setText(QtWidgets.QApplication.translate("Dialog", "Name", None, -1))
        self.lineedit_name_t3.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Fill in base controllers name.....", None, -1))
        self.checkbox_cntrtojnt_t3.setText(QtWidgets.QApplication.translate("Dialog", "Connect Controllers to Joints", None, -1))
        self.checkbox_connectcntr_t3.setText(QtWidgets.QApplication.translate("Dialog", "Connect Controllers to eachother", None, -1))
        self.pushbutton_setuptail_t3.setText(QtWidgets.QApplication.translate("Dialog", "Create", None, -1))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), QtWidgets.QApplication.translate("Dialog", "Tail Set-Up", None, -1))
        self.label_curve_t4.setText(QtWidgets.QApplication.translate("Dialog", "Curve", None, -1))
        self.pushbutton_selectcurve_t4.setText(QtWidgets.QApplication.translate("Dialog", "select", None, -1))
        self.label_baginjnt_t4.setText(QtWidgets.QApplication.translate("Dialog", "Begin Joint", None, -1))
        self.pushbutton_selectbeginjnt_t4.setText(QtWidgets.QApplication.translate("Dialog", "select", None, -1))
        self.label_endjnt_t4.setText(QtWidgets.QApplication.translate("Dialog", "End Joint", None, -1))
        self.pushbutton_selectendjnt_t4.setText(QtWidgets.QApplication.translate("Dialog", "select", None, -1))
        self.groupbox_shape_t4.setTitle(QtWidgets.QApplication.translate("Dialog", "Shape", None, -1))
        self.radiobutton_circle_t4.setText(QtWidgets.QApplication.translate("Dialog", "Circle", None, -1))
        self.label_beginradius_t4.setText(QtWidgets.QApplication.translate("Dialog", "End Radius", None, -1))
        self.lineedit_beginradius_t4.setText(QtWidgets.QApplication.translate("Dialog", "1", None, -1))
        self.label_endradius_t4.setText(QtWidgets.QApplication.translate("Dialog", "Middle Radius", None, -1))
        self.lineedit_endradius_t4.setText(QtWidgets.QApplication.translate("Dialog", "1", None, -1))
        self.radiobutton_custom_t4.setText(QtWidgets.QApplication.translate("Dialog", "Custom", None, -1))
        self.label_beginsize_t4.setText(QtWidgets.QApplication.translate("Dialog", "End size", None, -1))
        self.lineedit_beginsize_t4.setText(QtWidgets.QApplication.translate("Dialog", "1", None, -1))
        self.label_endsize_t4.setText(QtWidgets.QApplication.translate("Dialog", "Middle size", None, -1))
        self.lineedit_endsize_t4.setText(QtWidgets.QApplication.translate("Dialog", "1", None, -1))
        self.label_customcntrname_t4.setText(QtWidgets.QApplication.translate("Dialog", "Custom controller\'s name:", None, -1))
        self.lineedit_customcntrname_t4.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Enter custom made controllers name", None, -1))
        self.label_prefix_t4.setText(QtWidgets.QApplication.translate("Dialog", "Prefix", None, -1))
        self.lineedit_prefix_t4.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Noting entered results in \' \'", None, -1))
        self.label_name_t4.setText(QtWidgets.QApplication.translate("Dialog", "Name", None, -1))
        self.lineedit_name_t4.setPlaceholderText(QtWidgets.QApplication.translate("Dialog", "Fill in base controllers name.....", None, -1))
        self.pushbutton_setupspine_t4.setText(QtWidgets.QApplication.translate("Dialog", "Create", None, -1))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.spine), QtWidgets.QApplication.translate("Dialog", "Spine", None, -1))


        
    def create_widgets(self):
        self.setObjectName("Curve Set-Up helper")
        self.resize(295, 450)
        self.setMaximumSize(300,455)
        self.setMinimumSize(200, 10)
        self.verticalLayoutWidget = QtWidgets.QWidget(self)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 281, 431))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.tabWidget = QtWidgets.QTabWidget(self.verticalLayoutWidget)
        self.tabWidget.setObjectName("tabWidget")
        self.insert_jnts = QtWidgets.QWidget()
        self.insert_jnts.setObjectName("insert_jnts")
        self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.insert_jnts)
        self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(0, 0, 271, 371))
        self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
        self.verticalLayout_2.setContentsMargins(10, -1, 10, 10)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_begin_jnt_t1 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_begin_jnt_t1.sizePolicy().hasHeightForWidth())
        self.label_begin_jnt_t1.setSizePolicy(sizePolicy)
        self.label_begin_jnt_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.label_begin_jnt_t1.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_begin_jnt_t1.setObjectName("label_begin_jnt_t1")
        self.verticalLayout_2.addWidget(self.label_begin_jnt_t1)
        self.textbrowser_begin_jnt_t1 = QtWidgets.QTextBrowser(self.verticalLayoutWidget_2)
        self.textbrowser_begin_jnt_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.textbrowser_begin_jnt_t1.setMaximumSize(QtCore.QSize(16777215, 20))
        self.textbrowser_begin_jnt_t1.setObjectName("textbrowser_begin_jnt_t1")
        self.verticalLayout_2.addWidget(self.textbrowser_begin_jnt_t1)
        self.label_end_jnt_t1 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        self.label_end_jnt_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.label_end_jnt_t1.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_end_jnt_t1.setObjectName("label_end_jnt_t1")
        self.verticalLayout_2.addWidget(self.label_end_jnt_t1)
        self.textbrowser_end_jnt_t1 = QtWidgets.QTextBrowser(self.verticalLayoutWidget_2)
        self.textbrowser_end_jnt_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.textbrowser_end_jnt_t1.setMaximumSize(QtCore.QSize(16777215, 20))
        self.textbrowser_end_jnt_t1.setObjectName("textbrowser_end_jnt_t1")
        self.verticalLayout_2.addWidget(self.textbrowser_end_jnt_t1)
        self.label_prefix_t1 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        self.label_prefix_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.label_prefix_t1.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_prefix_t1.setObjectName("label_prefix_t1")
        self.verticalLayout_2.addWidget(self.label_prefix_t1)
        self.lineedit_prefic_t1 = QtWidgets.QLineEdit(self.verticalLayoutWidget_2)
        self.lineedit_prefic_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_prefic_t1.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_prefic_t1.setObjectName("lineedit_prefic_t1")
        self.verticalLayout_2.addWidget(self.lineedit_prefic_t1)
        self.label_name_t1 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        self.label_name_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.label_name_t1.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_name_t1.setObjectName("label_name_t1")
        self.verticalLayout_2.addWidget(self.label_name_t1)
        self.lineedit_name_t1 = QtWidgets.QLineEdit(self.verticalLayoutWidget_2)
        self.lineedit_name_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_name_t1.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_name_t1.setObjectName("lineedit_name_t1")
        self.verticalLayout_2.addWidget(self.lineedit_name_t1)
        self.checkbox_suffix_t1 = QtWidgets.QCheckBox(self.verticalLayoutWidget_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.checkbox_suffix_t1.sizePolicy().hasHeightForWidth())
        self.checkbox_suffix_t1.setSizePolicy(sizePolicy)
        self.checkbox_suffix_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.checkbox_suffix_t1.setMaximumSize(QtCore.QSize(16777215, 20))
        self.checkbox_suffix_t1.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.checkbox_suffix_t1.setObjectName("checkbox_suffix_t1")
        self.verticalLayout_2.addWidget(self.checkbox_suffix_t1)
        self.label_amout_t1 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        self.label_amout_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.label_amout_t1.setMaximumSize(QtCore.QSize(16777215, 24))
        self.label_amout_t1.setObjectName("label_amout_t1")
        self.verticalLayout_2.addWidget(self.label_amout_t1)
        self.lineedit_amount_t1 = QtWidgets.QLineEdit(self.verticalLayoutWidget_2)
        self.lineedit_amount_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_amount_t1.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_amount_t1.setObjectName("lineedit_amount_t1")
        self.verticalLayout_2.addWidget(self.lineedit_amount_t1)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_radius_begin_t1 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        self.label_radius_begin_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.label_radius_begin_t1.setMaximumSize(QtCore.QSize(70, 20))
        self.label_radius_begin_t1.setObjectName("label_radius_begin_t1")
        self.horizontalLayout.addWidget(self.label_radius_begin_t1)
        self.lineedit_radius_begin_t1 = QtWidgets.QLineEdit(self.verticalLayoutWidget_2)
        self.lineedit_radius_begin_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_radius_begin_t1.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_radius_begin_t1.setObjectName("lineedit_radius_begin_t1")
        self.horizontalLayout.addWidget(self.lineedit_radius_begin_t1)
        self.label_radius_end_t1 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        self.label_radius_end_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.label_radius_end_t1.setMaximumSize(QtCore.QSize(70, 20))
        self.label_radius_end_t1.setObjectName("label_radius_end_t1")
        self.horizontalLayout.addWidget(self.label_radius_end_t1)
        self.lineedit_radius_end_t1 = QtWidgets.QLineEdit(self.verticalLayoutWidget_2)
        self.lineedit_radius_end_t1.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_radius_end_t1.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_radius_end_t1.setObjectName("lineedit_radius_end_t1")
        self.horizontalLayout.addWidget(self.lineedit_radius_end_t1)
        self.verticalLayout_2.addLayout(self.horizontalLayout)
        self.pushbutton_insertjnt_t1 = QtWidgets.QPushButton(self.verticalLayoutWidget_2)
        self.pushbutton_insertjnt_t1.setObjectName("pushbutton_insertjnt_t1")
        self.verticalLayout_2.addWidget(self.pushbutton_insertjnt_t1)
        self.tabWidget.addTab(self.insert_jnts, "")
        self.jnts_on_crv = QtWidgets.QWidget()
        self.jnts_on_crv.setObjectName("jnts_on_crv")
        self.verticalLayoutWidget_3 = QtWidgets.QWidget(self.jnts_on_crv)
        self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(0, 0, 271, 301))
        self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_3)
        self.verticalLayout_3.setContentsMargins(10, 7, 10, 10)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.label_selected_crv_t2 = QtWidgets.QLabel(self.verticalLayoutWidget_3)
        self.label_selected_crv_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.label_selected_crv_t2.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_selected_crv_t2.setObjectName("label_selected_crv_t2")
        self.verticalLayout_3.addWidget(self.label_selected_crv_t2)
        self.textbrowser_selected_crv_t2 = QtWidgets.QTextBrowser(self.verticalLayoutWidget_3)
        self.textbrowser_selected_crv_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.textbrowser_selected_crv_t2.setMaximumSize(QtCore.QSize(16777215, 20))
        self.textbrowser_selected_crv_t2.setObjectName("textbrowser_selected_crv_t2")
        self.verticalLayout_3.addWidget(self.textbrowser_selected_crv_t2)
        self.label_prefix_t2 = QtWidgets.QLabel(self.verticalLayoutWidget_3)
        self.label_prefix_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.label_prefix_t2.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_prefix_t2.setObjectName("label_prefix_t2")
        self.verticalLayout_3.addWidget(self.label_prefix_t2)
        self.lineedit_prefix_t2 = QtWidgets.QLineEdit(self.verticalLayoutWidget_3)
        self.lineedit_prefix_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_prefix_t2.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_prefix_t2.setObjectName("lineedit_prefix_t2")
        self.verticalLayout_3.addWidget(self.lineedit_prefix_t2)
        self.label_name_t2 = QtWidgets.QLabel(self.verticalLayoutWidget_3)
        self.label_name_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.label_name_t2.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_name_t2.setObjectName("label_name_t2")
        self.verticalLayout_3.addWidget(self.label_name_t2)
        self.lineedit_name_t2 = QtWidgets.QLineEdit(self.verticalLayoutWidget_3)
        self.lineedit_name_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_name_t2.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_name_t2.setObjectName("lineedit_name_t2")
        self.verticalLayout_3.addWidget(self.lineedit_name_t2)
        self.label_amount_t2 = QtWidgets.QLabel(self.verticalLayoutWidget_3)
        self.label_amount_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.label_amount_t2.setMaximumSize(QtCore.QSize(16777215, 20))
        self.label_amount_t2.setObjectName("label_amount_t2")
        self.verticalLayout_3.addWidget(self.label_amount_t2)
        self.lineedit_amount_t2 = QtWidgets.QLineEdit(self.verticalLayoutWidget_3)
        self.lineedit_amount_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_amount_t2.setMaximumSize(QtCore.QSize(60, 20))
        self.lineedit_amount_t2.setObjectName("lineedit_amount_t2")
        self.verticalLayout_3.addWidget(self.lineedit_amount_t2)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_radius_begin_t2 = QtWidgets.QLabel(self.verticalLayoutWidget_3)
        self.label_radius_begin_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.label_radius_begin_t2.setMaximumSize(QtCore.QSize(70, 20))
        self.label_radius_begin_t2.setObjectName("label_radius_begin_t2")
        self.horizontalLayout_2.addWidget(self.label_radius_begin_t2)
        self.lineedit_radius_begin_t2 = QtWidgets.QLineEdit(self.verticalLayoutWidget_3)
        self.lineedit_radius_begin_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_radius_begin_t2.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_radius_begin_t2.setObjectName("lineedit_radius_begin_t2")
        self.horizontalLayout_2.addWidget(self.lineedit_radius_begin_t2)
        self.label_radius_begin_t2_2 = QtWidgets.QLabel(self.verticalLayoutWidget_3)
        self.label_radius_begin_t2_2.setMinimumSize(QtCore.QSize(0, 18))
        self.label_radius_begin_t2_2.setMaximumSize(QtCore.QSize(70, 20))
        self.label_radius_begin_t2_2.setObjectName("label_radius_begin_t2_2")
        self.horizontalLayout_2.addWidget(self.label_radius_begin_t2_2)
        self.lineedit_radius_end_t2 = QtWidgets.QLineEdit(self.verticalLayoutWidget_3)
        self.lineedit_radius_end_t2.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_radius_end_t2.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_radius_end_t2.setObjectName("lineedit_radius_end_t2")
        self.horizontalLayout_2.addWidget(self.lineedit_radius_end_t2)
        self.verticalLayout_3.addLayout(self.horizontalLayout_2)
        self.pushbutton_jnts_along_crv_t2 = QtWidgets.QPushButton(self.verticalLayoutWidget_3)
        self.pushbutton_jnts_along_crv_t2.setObjectName("pushbutton_jnts_along_crv_t2")
        self.verticalLayout_3.addWidget(self.pushbutton_jnts_along_crv_t2)
        self.tabWidget.addTab(self.jnts_on_crv, "")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.verticalLayoutWidget_4 = QtWidgets.QWidget(self.tab)
        self.verticalLayoutWidget_4.setGeometry(QtCore.QRect(0, 0, 271, 401))
        self.verticalLayoutWidget_4.setObjectName("verticalLayoutWidget_4")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_4)
        self.verticalLayout_4.setContentsMargins(10, 10, 10, 0)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.label_selectedjnt_t3 = QtWidgets.QLabel(self.verticalLayoutWidget_4)
        self.label_selectedjnt_t3.setMinimumSize(QtCore.QSize(0, 16))
        self.label_selectedjnt_t3.setMaximumSize(QtCore.QSize(16777215, 18))
        self.label_selectedjnt_t3.setObjectName("label_selectedjnt_t3")
        self.verticalLayout_4.addWidget(self.label_selectedjnt_t3)
        self.textbrowser_selectedjnt_t3 = QtWidgets.QTextBrowser(self.verticalLayoutWidget_4)
        self.textbrowser_selectedjnt_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.textbrowser_selectedjnt_t3.setMaximumSize(QtCore.QSize(16777215, 20))
        self.textbrowser_selectedjnt_t3.setObjectName("textbrowser_selectedjnt_t3")
        self.verticalLayout_4.addWidget(self.textbrowser_selectedjnt_t3)
        self.groupbox_shape_t3 = QtWidgets.QGroupBox(self.verticalLayoutWidget_4)
        self.groupbox_shape_t3.setMaximumSize(QtCore.QSize(16777215, 175))
        self.groupbox_shape_t3.setObjectName("groupbox_shape_t3")
        self.radiobutton_circle_t3 = QtWidgets.QRadioButton(self.groupbox_shape_t3)
        self.radiobutton_circle_t3.setGeometry(QtCore.QRect(10, 20, 267, 17))
        self.radiobutton_circle_t3.setChecked(True)
        self.radiobutton_circle_t3.setObjectName("radiobutton_circle_t3")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.groupbox_shape_t3)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(9, 40, 241, 22))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.label_beginradius_t3 = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.label_beginradius_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.label_beginradius_t3.setMaximumSize(QtCore.QSize(70, 20))
        self.label_beginradius_t3.setObjectName("label_beginradius_t3")
        self.horizontalLayout_3.addWidget(self.label_beginradius_t3)
        self.lineedit_beginradius_t3 = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
        self.lineedit_beginradius_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_beginradius_t3.setMaximumSize(QtCore.QSize(45, 20))
        self.lineedit_beginradius_t3.setObjectName("lineedit_beginradius_t3")
        self.horizontalLayout_3.addWidget(self.lineedit_beginradius_t3)
        self.label_endradius_t3 = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.label_endradius_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.label_endradius_t3.setMaximumSize(QtCore.QSize(60, 20))
        self.label_endradius_t3.setObjectName("label_endradius_t3")
        self.horizontalLayout_3.addWidget(self.label_endradius_t3)
        self.lineedit_endradius_t3 = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
        self.lineedit_endradius_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_endradius_t3.setMaximumSize(QtCore.QSize(45, 20))
        self.lineedit_endradius_t3.setObjectName("lineedit_endradius_t3")
        self.horizontalLayout_3.addWidget(self.lineedit_endradius_t3)
        self.radiobutton_custom_t3 = QtWidgets.QRadioButton(self.groupbox_shape_t3)
        self.radiobutton_custom_t3.setGeometry(QtCore.QRect(10, 70, 101, 17))
        self.radiobutton_custom_t3.setObjectName("radiobutton_custom_t3")
        self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.groupbox_shape_t3)
        self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(10, 140, 241, 22))
        self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.label_beginsize_t3 = QtWidgets.QLabel(self.horizontalLayoutWidget_2)
        self.label_beginsize_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.label_beginsize_t3.setMaximumSize(QtCore.QSize(60, 20))
        self.label_beginsize_t3.setObjectName("label_beginsize_t3")
        self.horizontalLayout_4.addWidget(self.label_beginsize_t3)
        self.lineedit_beginsize_t3 = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2)
        self.lineedit_beginsize_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_beginsize_t3.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_beginsize_t3.setObjectName("lineedit_beginsize_t3")
        self.horizontalLayout_4.addWidget(self.lineedit_beginsize_t3)
        self.label_endsize_t3 = QtWidgets.QLabel(self.horizontalLayoutWidget_2)
        self.label_endsize_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.label_endsize_t3.setMaximumSize(QtCore.QSize(60, 20))
        self.label_endsize_t3.setObjectName("label_endsize_t3")
        self.horizontalLayout_4.addWidget(self.label_endsize_t3)
        self.lineedit_endsize_t3 = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2)
        self.lineedit_endsize_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_endsize_t3.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_endsize_t3.setObjectName("lineedit_endsize_t3")
        self.horizontalLayout_4.addWidget(self.lineedit_endsize_t3)
        self.label_customcntrname_t3 = QtWidgets.QLabel(self.groupbox_shape_t3)
        self.label_customcntrname_t3.setGeometry(QtCore.QRect(10, 90, 241, 20))
        self.label_customcntrname_t3.setObjectName("label_customcntrname_t3")
        self.lineedit_customcntrname_t3 = QtWidgets.QLineEdit(self.groupbox_shape_t3)
        self.lineedit_customcntrname_t3.setGeometry(QtCore.QRect(10, 110, 241, 20))
        self.lineedit_customcntrname_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_customcntrname_t3.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_customcntrname_t3.setObjectName("lineedit_customcntrname_t3")
        self.verticalLayout_4.addWidget(self.groupbox_shape_t3)
        self.label_prefix_t3 = QtWidgets.QLabel(self.verticalLayoutWidget_4)
        self.label_prefix_t3.setMinimumSize(QtCore.QSize(0, 14))
        self.label_prefix_t3.setMaximumSize(QtCore.QSize(16777215, 16))
        self.label_prefix_t3.setObjectName("label_prefix_t3")
        self.verticalLayout_4.addWidget(self.label_prefix_t3)
        self.lineedit_prefix_t3 = QtWidgets.QLineEdit(self.verticalLayoutWidget_4)
        self.lineedit_prefix_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_prefix_t3.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_prefix_t3.setObjectName("lineedit_prefix_t3")
        self.verticalLayout_4.addWidget(self.lineedit_prefix_t3)
        self.label_name_t3 = QtWidgets.QLabel(self.verticalLayoutWidget_4)
        self.label_name_t3.setMinimumSize(QtCore.QSize(0, 14))
        self.label_name_t3.setMaximumSize(QtCore.QSize(16777215, 16))
        self.label_name_t3.setObjectName("label_name_t3")
        self.verticalLayout_4.addWidget(self.label_name_t3)
        self.lineedit_name_t3 = QtWidgets.QLineEdit(self.verticalLayoutWidget_4)
        self.lineedit_name_t3.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_name_t3.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_name_t3.setObjectName("lineedit_name_t3")
        self.verticalLayout_4.addWidget(self.lineedit_name_t3)
        self.checkbox_cntrtojnt_t3 = QtWidgets.QCheckBox(self.verticalLayoutWidget_4)
        self.checkbox_cntrtojnt_t3.setMinimumSize(QtCore.QSize(0, 14))
        self.checkbox_cntrtojnt_t3.setMaximumSize(QtCore.QSize(16777215, 16))
        self.checkbox_cntrtojnt_t3.setChecked(True)
        self.checkbox_cntrtojnt_t3.setObjectName("checkbox_cntrtojnt_t3")
        self.verticalLayout_4.addWidget(self.checkbox_cntrtojnt_t3)
        self.checkbox_connectcntr_t3 = QtWidgets.QCheckBox(self.verticalLayoutWidget_4)
        self.checkbox_connectcntr_t3.setMinimumSize(QtCore.QSize(0, 14))
        self.checkbox_connectcntr_t3.setMaximumSize(QtCore.QSize(16777215, 16))
        self.checkbox_connectcntr_t3.setChecked(True)
        self.checkbox_connectcntr_t3.setObjectName("checkbox_connectcntr_t3")
        self.verticalLayout_4.addWidget(self.checkbox_connectcntr_t3)
        self.pushbutton_setuptail_t3 = QtWidgets.QPushButton(self.verticalLayoutWidget_4)
        self.pushbutton_setuptail_t3.setObjectName("pushbutton_setuptail_t3")
        self.verticalLayout_4.addWidget(self.pushbutton_setuptail_t3)
        self.tabWidget.addTab(self.tab, "")
        self.verticalLayout.addWidget(self.tabWidget)
        self.spine = QtWidgets.QWidget()
        self.spine.setObjectName("spine")
        self.verticalLayoutWidget_5 = QtWidgets.QWidget(self.spine)
        self.verticalLayoutWidget_5.setGeometry(QtCore.QRect(0, 0, 281, 410))
        self.verticalLayoutWidget_5.setObjectName("verticalLayoutWidget_5")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_5)
        self.verticalLayout_5.setContentsMargins(10, 10, 10, 10)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_5.setSpacing(0)
        self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.label_curve_t4 = QtWidgets.QLabel(self.verticalLayoutWidget_5)
        self.label_curve_t4.setMinimumSize(QtCore.QSize(60, 14))
        self.label_curve_t4.setMaximumSize(QtCore.QSize(60, 16))
        self.label_curve_t4.setObjectName("label_curve_t4")
        self.horizontalLayout_5.addWidget(self.label_curve_t4)
        self.lineedit_curve_t4 = QtWidgets.QLineEdit(self.verticalLayoutWidget_5)
        self.lineedit_curve_t4.setMinimumSize(QtCore.QSize(120, 0))
        self.lineedit_curve_t4.setMaximumSize(QtCore.QSize(120, 16777215))
        self.lineedit_curve_t4.setObjectName("lineedit_curve_t4")
        self.horizontalLayout_5.addWidget(self.lineedit_curve_t4)
        self.pushbutton_selectcurve_t4 = QtWidgets.QPushButton(self.verticalLayoutWidget_5)
        self.pushbutton_selectcurve_t4.setMinimumSize(QtCore.QSize(50, 20))
        self.pushbutton_selectcurve_t4.setMaximumSize(QtCore.QSize(60, 24))
        self.pushbutton_selectcurve_t4.setObjectName("pushbutton_selectcurve_t4")
        self.horizontalLayout_5.addWidget(self.pushbutton_selectcurve_t4)
        self.verticalLayout_5.addLayout(self.horizontalLayout_5)
        self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_8.setObjectName("horizontalLayout_8")
        self.label_baginjnt_t4 = QtWidgets.QLabel(self.verticalLayoutWidget_5)
        self.label_baginjnt_t4.setMinimumSize(QtCore.QSize(60, 14))
        self.label_baginjnt_t4.setMaximumSize(QtCore.QSize(60, 16))
        self.label_baginjnt_t4.setObjectName("label_baginjnt_t4")
        self.horizontalLayout_8.addWidget(self.label_baginjnt_t4)
        self.lineedit_beginjnt_t4 = QtWidgets.QLineEdit(self.verticalLayoutWidget_5)
        self.lineedit_beginjnt_t4.setMinimumSize(QtCore.QSize(120, 0))
        self.lineedit_beginjnt_t4.setMaximumSize(QtCore.QSize(120, 16777215))
        self.lineedit_beginjnt_t4.setObjectName("lineedit_beginjnt_t4")
        self.horizontalLayout_8.addWidget(self.lineedit_beginjnt_t4)
        self.pushbutton_selectbeginjnt_t4 = QtWidgets.QPushButton(self.verticalLayoutWidget_5)
        self.pushbutton_selectbeginjnt_t4.setMinimumSize(QtCore.QSize(50, 20))
        self.pushbutton_selectbeginjnt_t4.setMaximumSize(QtCore.QSize(60, 24))
        self.pushbutton_selectbeginjnt_t4.setObjectName("pushbutton_selectbeginjnt_t4")
        self.horizontalLayout_8.addWidget(self.pushbutton_selectbeginjnt_t4)
        self.verticalLayout_5.addLayout(self.horizontalLayout_8)
        self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_9.setObjectName("horizontalLayout_9")
        self.label_endjnt_t4 = QtWidgets.QLabel(self.verticalLayoutWidget_5)
        self.label_endjnt_t4.setMinimumSize(QtCore.QSize(60, 14))
        self.label_endjnt_t4.setMaximumSize(QtCore.QSize(60, 16))
        self.label_endjnt_t4.setObjectName("label_endjnt_t4")
        self.horizontalLayout_9.addWidget(self.label_endjnt_t4)
        self.lineedit_endjnt_t4 = QtWidgets.QLineEdit(self.verticalLayoutWidget_5)
        self.lineedit_endjnt_t4.setMinimumSize(QtCore.QSize(120, 0))
        self.lineedit_endjnt_t4.setMaximumSize(QtCore.QSize(120, 16777215))
        self.lineedit_endjnt_t4.setObjectName("lineedit_endjnt_t4")
        self.horizontalLayout_9.addWidget(self.lineedit_endjnt_t4)
        self.pushbutton_selectendjnt_t4 = QtWidgets.QPushButton(self.verticalLayoutWidget_5)
        self.pushbutton_selectendjnt_t4.setMinimumSize(QtCore.QSize(50, 20))
        self.pushbutton_selectendjnt_t4.setMaximumSize(QtCore.QSize(60, 24))
        self.pushbutton_selectendjnt_t4.setObjectName("pushbutton_selectendjnt_t4")
        self.horizontalLayout_9.addWidget(self.pushbutton_selectendjnt_t4)
        self.verticalLayout_5.addLayout(self.horizontalLayout_9)
        self.groupbox_shape_t4 = QtWidgets.QGroupBox(self.verticalLayoutWidget_5)
        self.groupbox_shape_t4.setMinimumSize(QtCore.QSize(0, 175))
        self.groupbox_shape_t4.setMaximumSize(QtCore.QSize(16777215, 175))
        self.groupbox_shape_t4.setObjectName("groupbox_shape_t4")
        self.radiobutton_circle_t4 = QtWidgets.QRadioButton(self.groupbox_shape_t4)
        self.radiobutton_circle_t4.setGeometry(QtCore.QRect(10, 20, 267, 17))
        self.radiobutton_circle_t4.setChecked(True)
        self.radiobutton_circle_t4.setObjectName("radiobutton_circle_t4")
        self.horizontalLayoutWidget_6 = QtWidgets.QWidget(self.groupbox_shape_t4)
        self.horizontalLayoutWidget_6.setGeometry(QtCore.QRect(9, 40, 241, 22))
        self.horizontalLayoutWidget_6.setObjectName("horizontalLayoutWidget_6")
        self.horizontalLayout_10 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_6)
        self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_10.setObjectName("horizontalLayout_10")
        self.label_beginradius_t4 = QtWidgets.QLabel(self.horizontalLayoutWidget_6)
        self.label_beginradius_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.label_beginradius_t4.setMaximumSize(QtCore.QSize(60, 20))
        self.label_beginradius_t4.setObjectName("label_beginradius_t4")
        self.horizontalLayout_10.addWidget(self.label_beginradius_t4)
        self.lineedit_beginradius_t4 = QtWidgets.QLineEdit(self.horizontalLayoutWidget_6)
        self.lineedit_beginradius_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_beginradius_t4.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_beginradius_t4.setObjectName("lineedit_beginradius_t4")
        self.horizontalLayout_10.addWidget(self.lineedit_beginradius_t4)
        self.label_endradius_t4 = QtWidgets.QLabel(self.horizontalLayoutWidget_6)
        self.label_endradius_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.label_endradius_t4.setMaximumSize(QtCore.QSize(60, 20))
        self.label_endradius_t4.setObjectName("label_endradius_t4")
        self.horizontalLayout_10.addWidget(self.label_endradius_t4)
        self.lineedit_endradius_t4 = QtWidgets.QLineEdit(self.horizontalLayoutWidget_6)
        self.lineedit_endradius_t4.setMinimumSize(QtCore.QSize(30, 18))
        self.lineedit_endradius_t4.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_endradius_t4.setObjectName("lineedit_endradius_t4")
        self.horizontalLayout_10.addWidget(self.lineedit_endradius_t4)
        self.radiobutton_custom_t4 = QtWidgets.QRadioButton(self.groupbox_shape_t4)
        self.radiobutton_custom_t4.setGeometry(QtCore.QRect(10, 70, 101, 17))
        self.radiobutton_custom_t4.setObjectName("radiobutton_custom_t4")
        self.horizontalLayoutWidget_7 = QtWidgets.QWidget(self.groupbox_shape_t4)
        self.horizontalLayoutWidget_7.setGeometry(QtCore.QRect(10, 140, 241, 22))
        self.horizontalLayoutWidget_7.setObjectName("horizontalLayoutWidget_7")
        self.horizontalLayout_11 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_7)
        self.horizontalLayout_11.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_11.setObjectName("horizontalLayout_11")
        self.label_beginsize_t4 = QtWidgets.QLabel(self.horizontalLayoutWidget_7)
        self.label_beginsize_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.label_beginsize_t4.setMaximumSize(QtCore.QSize(60, 20))
        self.label_beginsize_t4.setObjectName("label_beginsize_t4")
        self.horizontalLayout_11.addWidget(self.label_beginsize_t4)
        self.lineedit_beginsize_t4 = QtWidgets.QLineEdit(self.horizontalLayoutWidget_7)
        self.lineedit_beginsize_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_beginsize_t4.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_beginsize_t4.setObjectName("lineedit_beginsize_t4")
        self.horizontalLayout_11.addWidget(self.lineedit_beginsize_t4)
        self.label_endsize_t4 = QtWidgets.QLabel(self.horizontalLayoutWidget_7)
        self.label_endsize_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.label_endsize_t4.setMaximumSize(QtCore.QSize(60, 20))
        self.label_endsize_t4.setObjectName("label_endsize_t4")
        self.horizontalLayout_11.addWidget(self.label_endsize_t4)
        self.lineedit_endsize_t4 = QtWidgets.QLineEdit(self.horizontalLayoutWidget_7)
        self.lineedit_endsize_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_endsize_t4.setMaximumSize(QtCore.QSize(50, 20))
        self.lineedit_endsize_t4.setObjectName("lineedit_endsize_t4")
        self.horizontalLayout_11.addWidget(self.lineedit_endsize_t4)
        self.label_customcntrname_t4 = QtWidgets.QLabel(self.groupbox_shape_t4)
        self.label_customcntrname_t4.setGeometry(QtCore.QRect(10, 90, 241, 20))
        self.label_customcntrname_t4.setObjectName("label_customcntrname_t4")
        self.lineedit_customcntrname_t4 = QtWidgets.QLineEdit(self.groupbox_shape_t4)
        self.lineedit_customcntrname_t4.setGeometry(QtCore.QRect(10, 110, 241, 20))
        self.lineedit_customcntrname_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_customcntrname_t4.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_customcntrname_t4.setObjectName("lineedit_customcntrname_t4")
        self.verticalLayout_5.addWidget(self.groupbox_shape_t4)
        self.label_prefix_t4 = QtWidgets.QLabel(self.verticalLayoutWidget_5)
        self.label_prefix_t4.setMinimumSize(QtCore.QSize(0, 14))
        self.label_prefix_t4.setMaximumSize(QtCore.QSize(16777215, 16))
        self.label_prefix_t4.setObjectName("label_prefix_t4")
        self.verticalLayout_5.addWidget(self.label_prefix_t4)
        self.lineedit_prefix_t4 = QtWidgets.QLineEdit(self.verticalLayoutWidget_5)
        self.lineedit_prefix_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_prefix_t4.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_prefix_t4.setObjectName("lineedit_prefix_t4")
        self.verticalLayout_5.addWidget(self.lineedit_prefix_t4)
        self.label_name_t4 = QtWidgets.QLabel(self.verticalLayoutWidget_5)
        self.label_name_t4.setMinimumSize(QtCore.QSize(0, 14))
        self.label_name_t4.setMaximumSize(QtCore.QSize(16777215, 16))
        self.label_name_t4.setObjectName("label_name_t4")
        self.verticalLayout_5.addWidget(self.label_name_t4)
        self.lineedit_name_t4 = QtWidgets.QLineEdit(self.verticalLayoutWidget_5)
        self.lineedit_name_t4.setMinimumSize(QtCore.QSize(0, 18))
        self.lineedit_name_t4.setMaximumSize(QtCore.QSize(16777215, 20))
        self.lineedit_name_t4.setObjectName("lineedit_name_t4")
        self.verticalLayout_5.addWidget(self.lineedit_name_t4)
        self.pushbutton_setupspine_t4 = QtWidgets.QPushButton(self.verticalLayoutWidget_5)
        self.pushbutton_setupspine_t4.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_setupspine_t4.setMaximumSize(QtCore.QSize(16777215, 24))
        self.pushbutton_setupspine_t4.setObjectName("pushbutton_setupspine_t4")
        self.verticalLayout_5.addWidget(self.pushbutton_setupspine_t4)
        self.tabWidget.addTab(self.spine, "")
        self.verticalLayout.addWidget(self.tabWidget)
        
        self.SCRIPT_JOB_NUMBER = cmds.scriptJob( event=[ 'idle', self.selected_object ], protected = True)

try:
    Dialog.close()
    Dialog.deleteLater()
except:
    pass

Dialog = Dialog_Window()
Dialog.show()
					

...

Automates fingers including a spread and curl attribute, works with different amounts of fingers


						from PySide2 import QtCore
from PySide2 import QtWidgets
from PySide2 import QtGui
from shiboken2 import wrapInstance

import maya.OpenMayaUI as moui
import maya.cmds as cmds

def maya_main_window():
    main_window_ptr = moui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
                        
class Dialog_Window(QtWidgets.QDialog):
    
    def __init__(self, parent = maya_main_window()):
        super(Dialog_Window, self).__init__(parent)
        self.setWindowFlags(self.windowFlags()^QtCore.Qt.WindowContextHelpButtonHint)

        self.create_widgets()
        self.create_connections()
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)
        
    def create_connections(self):
        self.pushbutton_thumbjoint.clicked.connect(self.select_thumb)
        self.pushbutton_indexjoint.clicked.connect(self.select_index)
        self.pushbutton_middlejoint.clicked.connect(self.select_middle)
        self.pushbutton_ringjoint.clicked.connect(self.select_ring)
        self.pushbutton_pinkyjoint.clicked.connect(self.select_pinky)
        self.pushbutton_create.clicked.connect(self.finger_setup)
        self.pushbutton_handcontroller.clicked.connect(self.select_hand)
    
    
    def select_thumb(self):
        selected = cmds.ls(sl=True)
        self.lineedit_thumbjoint.setText(selected[0])
        
        
    def select_index(self):
        selected = cmds.ls(sl=True)
        self.lineedit_indexjoint.setText(selected[0])
    
    def select_middle(self):
        selected = cmds.ls(sl=True)
        self.lineedit_middlejoint.setText(selected[0])
    
    def select_ring(self):
        selected = cmds.ls(sl=True)
        self.lineedit_ringjoint.setText(selected[0])
        
    def select_pinky(self):
        selected = cmds.ls(sl=True)
        self.lineedit_pinkyjoint.setText(selected[0])
        
    def select_hand(self):
        selected = cmds.ls(sl=True)
        self.lineedit_handcontroller.setText(selected[0])
        
        
        
    def finger_setup(self):
        name_nr = 0
        name  = []
        selected_fingers = []

        if self.lineedit_thumbjoint.text():
            selected_fingers.append(self.lineedit_thumbjoint.text())
            name.append(self.lineedit_thumbname.text())
        if self.lineedit_indexjoint.text():
            selected_fingers.append(self.lineedit_indexjoint.text())
            name.append(self.lineedit_indexname.text())
        if self.lineedit_middlejoint.text():
            selected_fingers.append(self.lineedit_middlejoint.text())
            name.append(self.lineedit_middlename.text())
        if self.lineedit_ringjoint.text():
            selected_fingers.append(self.lineedit_ringjoint.text())
            name.append(self.lineedit_ringname.text())
        if self.lineedit_pinkyjoint.text():
            selected_fingers.append(self.lineedit_pinkyjoint.text())
            name.append(self.lineedit_pinkyname.text())
            

        #Get prefix
        if self.lineedit_prefix.text():
            prefix = self.lineedit_prefix.text()
        else:
            prefix = ""
            
        #For setting the positive or negative rotation
        is_middle = len(name) % 2
        md_y_list_end = []
        
        #not accasible by user yet
        rad_increment = 0.8
        
        #Hand controller to which the attributes will be added
        if self.lineedit_handcontroller.text():
            selected_hand = self.lineedit_handcontroller.text()
        else:
            selected_hand = 0
        
        #Add curl and spread atribute to the selected hand controller
        cmds.addAttr(selected_hand, ln = "Curl", at='float', dv = 0, k=True)
        cmds.addAttr(selected_hand, ln = "Spread", at='float', dv = 0, k=True)
        
        if selected_hand > 0 and len(selected_fingers) > 0:
            for i in selected_fingers:
                cmds.select(i, hi = True)
                selected = cmds.ls(sl=True)
                lenght = len(selected) -1
                nr = 1

                circle_ctr_list = []
                circle_ctrgrp_list = []
                adl_z_list = []
                adl_y_list = []
                md_y_list = []
                list_nr = 0

                for i in selected:
                    if i != selected[lenght]:
                        if i == selected[0]:
                            circle = cmds.circle(n = prefix + name[name_nr] + "_Maincntr" + str(nr), nr = [1,0,0], r = rad_increment*1.5)
                            circle_ctr_list.insert(0, circle[0])
                            cntr_grp = cmds.group(n = prefix +name[name_nr] + "_Maincntrgrp" + str(nr))
                            circle_ctrgrp_list.insert(0, cntr_grp)
                            null_grp = cmds.group(n = prefix + name[name_nr] + "_Mainnullgrp" + str(nr))
                            align = cmds.parentConstraint(i, null_grp)
                            cmds.delete(align)
                            
                        circle = cmds.circle(n = prefix + name[name_nr] + "_cntr" + str(nr), nr = [1,0,0], r = rad_increment)
                        circle_ctr_list.append(circle[0])
                        cntr_grp = cmds.group(n = prefix +name[name_nr] + "_cntrgrp" + str(nr))
                        circle_ctrgrp_list.append(cntr_grp)
                        null_grp = cmds.group(n = prefix + name[name_nr] + "_nullgrp" + str(nr))
                        align = cmds.parentConstraint(i, null_grp)
                        cmds.delete(align)
                        cmds.parentConstraint(circle[0], i)
                        cmds.parent(null_grp, circle_ctr_list[nr-1])
                        
                        #Curl + Main Controller (Rotate Z)
                        adl_z = cmds.shadingNode('addDoubleLinear', au=True, n="ADL_" + prefix + name[name_nr] + "Curl" + str(nr))
                        adl_z_list.append(adl_z)
                        cmds.connectAttr(circle_ctr_list[0] + '.rotateZ', adl_z_list[list_nr] + '.input1')
                        cmds.connectAttr(circle_ctrgrp_list[0] + '.rotateZ', adl_z_list[list_nr] + '.input2')
                        cmds.connectAttr(adl_z_list[list_nr] + '.output', circle_ctrgrp_list[list_nr + 1] + '.rotateZ')
                        
                        #Only connect to the first controller (Fingers don't bend sideways)
                        if i == selected[0]:
                            #Spread + Main Controller (Rotate Y > ! positive and negative)
                            adl_y = cmds.shadingNode('addDoubleLinear', au=True, n="ADL_" + prefix + name[name_nr] + "Spread" + str(nr))
                            adl_y_list.append(adl_y)
                            cmds.connectAttr(adl_y_list[list_nr] + '.output', circle_ctrgrp_list[list_nr + 1] + '.rotateY')
                            cmds.connectAttr(circle_ctr_list[0] + '.rotateY', adl_y_list[list_nr] + '.input1')
                            
                            md_y = cmds.shadingNode('multiplyDivide', au = True, n="MD_" + prefix + name[name_nr] + "Spread" + str(nr))
                            md_y_list.append(md_y)
                            md_y_list_end.append(md_y)
                            cmds.connectAttr(selected_hand + ".Spread" ,md_y_list[list_nr] + ".input1X")
                            cmds.connectAttr(md_y_list[list_nr] + ".outputX", circle_ctrgrp_list[0] + '.rotateY')
                        #Connect atribute on hand to group that controls overall curl
                            
                        nr +=1
                        list_nr +=1
                cmds.connectAttr(selected_hand + ".Curl", circle_ctrgrp_list[0] + '.rotateZ')
                name_nr +=1
                
            #Now the fingers on the inside need to spread in and the outer fingers need to spread out
            #If the amount of fingers is odd
            if is_middle > 0:
                middle = len(name) / 2
                for i in range(len(name)):
                    if i == middle:
                        cmds.setAttr(md_y_list_end[i] + ".input2X", 0)
                    elif i < middle:
                        cmds.setAttr(md_y_list_end[i] + ".input2X", 1)
                    elif i > middle:
                        cmds.setAttr(md_y_list_end[i] + ".input2X", -1)
            #if the amount of fingers is even
            elif is_middle == 0:
                middle = (len(name) /2)
                for i in range(len(name)):
                    if i < middle:
                        cmds.setAttr(md_y_list_end[i] + ".input2X", -1)
                    elif i >= middle:
                        cmds.setAttr(md_y_list_end[i] + ".input2X", 1)
        else:
            print "You need to fill in the hand controller and select a minumum of 1 finger"

	#Generated code for the UI from Qt-Designer
	def retranslateUi(self):
        self.setWindowTitle(QtWidgets.QApplication.translate("Finger SetUp", "Finger SetUp", None, -1))
        self.groupBox.setTitle(QtWidgets.QApplication.translate("FingerSetUp", "Select the first Joint of each finger (No need to fill all of them)", None, -1))
        self.label_ringjoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "Ring finger Joint", None, -1))
        self.lineedit_thumbname.setText(QtWidgets.QApplication.translate("FingerSetUp", "thumb", None, -1))
        self.lineedit_indexname.setText(QtWidgets.QApplication.translate("FingerSetUp", "index", None, -1))
        self.label_middlejoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "Middle finger Joint", None, -1))
        self.lineedit_middlename.setText(QtWidgets.QApplication.translate("FingerSetUp", "middle", None, -1))
        self.lineedit_ringname.setText(QtWidgets.QApplication.translate("FingerSetUp", "ring", None, -1))
        self.label_indexname.setText(QtWidgets.QApplication.translate("FingerSetUp", "         name", None, -1))
        self.lineedit_pinkyname.setText(QtWidgets.QApplication.translate("FingerSetUp", "pinky", None, -1))
        self.label_ringname.setText(QtWidgets.QApplication.translate("FingerSetUp", "         name", None, -1))
        self.label_handcontroller.setText(QtWidgets.QApplication.translate("FingerSetUp", "Hand Controller", None, -1))
        self.label_middlename.setText(QtWidgets.QApplication.translate("FingerSetUp", "         name", None, -1))
        self.label_thumbjoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "Thumb Joint", None, -1))
        self.label_indexjoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "Index finger Joint", None, -1))
        self.pushbutton_thumbjoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "select", None, -1))
        self.label_pinkyname.setText(QtWidgets.QApplication.translate("FingerSetUp", "          name", None, -1))
        self.label_thumbname.setText(QtWidgets.QApplication.translate("FingerSetUp", "          name", None, -1))
        self.pushbutton_indexjoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "select", None, -1))
        self.pushbutton_middlejoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "select", None, -1))
        self.pushbutton_ringjoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "select", None, -1))
        self.pushbutton_pinkyjoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "select", None, -1))
        self.label_pinkyjoint.setText(QtWidgets.QApplication.translate("FingerSetUp", "Pinky Joint", None, -1))
        self.pushbutton_handcontroller.setText(QtWidgets.QApplication.translate("FingerSetUp", "select", None, -1))
        self.lineedit_endrad.setText(QtWidgets.QApplication.translate("FingerSetUp", "0.5", None, -1))
        self.lineedit_beginrad.setText(QtWidgets.QApplication.translate("FingerSetUp", "1", None, -1))
        self.label_endrad.setText(QtWidgets.QApplication.translate("FingerSetUp", "End Radius", None, -1))
        self.label_beginrad.setText(QtWidgets.QApplication.translate("FingerSetUp", "Begin Radius", None, -1))
        self.label_prefix.setText(QtWidgets.QApplication.translate("FingerSetUp", "prefix", None, -1))
        self.lineedit_prefix.setPlaceholderText(QtWidgets.QApplication.translate("FingerSetUp", "You don\'t have to enter a prefix", None, -1))
        self.pushbutton_create.setText(QtWidgets.QApplication.translate("FingerSetUp", "Create", None, -1))

        
    def create_widgets(self):
        self.setObjectName("FingerSetUp")
        self.resize(360, 501)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
        self.verticalLayoutWidget = QtWidgets.QWidget(self)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 340, 480))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(3, 10, 3, 5)
        self.verticalLayout.setObjectName("verticalLayout")
        self.groupBox = QtWidgets.QGroupBox(self.verticalLayoutWidget)
        self.groupBox.setObjectName("groupBox")
        self.gridLayoutWidget = QtWidgets.QWidget(self.groupBox)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 20, 311, 321))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(10, 0, 10, -1)
        self.gridLayout.setObjectName("gridLayout")
        self.label_ringjoint = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_ringjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.label_ringjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_ringjoint.setObjectName("label_ringjoint")
        self.gridLayout.addWidget(self.label_ringjoint, 6, 0, 1, 1)
        self.lineedit_thumbname = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_thumbname.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_thumbname.setMaximumSize(QtCore.QSize(160, 22))
        self.lineedit_thumbname.setObjectName("lineedit_thumbname")
        self.gridLayout.addWidget(self.lineedit_thumbname, 1, 1, 1, 2)
        self.lineedit_indexname = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_indexname.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_indexname.setMaximumSize(QtCore.QSize(160, 22))
        self.lineedit_indexname.setObjectName("lineedit_indexname")
        self.gridLayout.addWidget(self.lineedit_indexname, 3, 1, 1, 2)
        self.label_middlejoint = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_middlejoint.setMinimumSize(QtCore.QSize(0, 20))
        self.label_middlejoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_middlejoint.setObjectName("label_middlejoint")
        self.gridLayout.addWidget(self.label_middlejoint, 4, 0, 1, 1)
        self.lineedit_middlename = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_middlename.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_middlename.setMaximumSize(QtCore.QSize(160, 22))
        self.lineedit_middlename.setObjectName("lineedit_middlename")
        self.gridLayout.addWidget(self.lineedit_middlename, 5, 1, 1, 2)
        self.lineedit_ringname = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_ringname.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_ringname.setMaximumSize(QtCore.QSize(160, 22))
        self.lineedit_ringname.setObjectName("lineedit_ringname")
        self.gridLayout.addWidget(self.lineedit_ringname, 7, 1, 1, 2)
        self.label_indexname = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_indexname.setMinimumSize(QtCore.QSize(0, 20))
        self.label_indexname.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_indexname.setObjectName("label_indexname")
        self.gridLayout.addWidget(self.label_indexname, 3, 0, 1, 1)
        self.lineedit_pinkyname = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_pinkyname.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_pinkyname.setMaximumSize(QtCore.QSize(160, 22))
        self.lineedit_pinkyname.setObjectName("lineedit_pinkyname")
        self.gridLayout.addWidget(self.lineedit_pinkyname, 9, 1, 1, 2)
        self.label_ringname = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_ringname.setMinimumSize(QtCore.QSize(0, 20))
        self.label_ringname.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_ringname.setObjectName("label_ringname")
        self.gridLayout.addWidget(self.label_ringname, 7, 0, 1, 1)
        self.label_handcontroller = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_handcontroller.setMinimumSize(QtCore.QSize(0, 20))
        self.label_handcontroller.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_handcontroller.setObjectName("label_handcontroller")
        self.gridLayout.addWidget(self.label_handcontroller, 11, 0, 1, 1)
        self.label_middlename = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_middlename.setMinimumSize(QtCore.QSize(0, 20))
        self.label_middlename.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_middlename.setObjectName("label_middlename")
        self.gridLayout.addWidget(self.label_middlename, 5, 0, 1, 1)
        self.label_thumbjoint = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_thumbjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.label_thumbjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_thumbjoint.setObjectName("label_thumbjoint")
        self.gridLayout.addWidget(self.label_thumbjoint, 0, 0, 1, 1)
        self.label_indexjoint = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_indexjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.label_indexjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_indexjoint.setObjectName("label_indexjoint")
        self.gridLayout.addWidget(self.label_indexjoint, 2, 0, 1, 1)
        self.lineedit_thumbjoint = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_thumbjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_thumbjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_thumbjoint.setObjectName("lineedit_thumbjoint")
        self.gridLayout.addWidget(self.lineedit_thumbjoint, 0, 1, 1, 1)
        self.pushbutton_thumbjoint = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.pushbutton_thumbjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_thumbjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_thumbjoint.setObjectName("pushbutton_thumbjoint")
        self.gridLayout.addWidget(self.pushbutton_thumbjoint, 0, 2, 1, 1)
        self.lineedit_pinkyjoint = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_pinkyjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_pinkyjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_pinkyjoint.setObjectName("lineedit_pinkyjoint")
        self.gridLayout.addWidget(self.lineedit_pinkyjoint, 8, 1, 1, 1)
        self.lineedit_indexjoint = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_indexjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_indexjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_indexjoint.setObjectName("lineedit_indexjoint")
        self.gridLayout.addWidget(self.lineedit_indexjoint, 2, 1, 1, 1)
        self.label_pinkyname = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_pinkyname.setMinimumSize(QtCore.QSize(0, 20))
        self.label_pinkyname.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_pinkyname.setObjectName("label_pinkyname")
        self.gridLayout.addWidget(self.label_pinkyname, 9, 0, 1, 1)
        self.lineedit_ringjoint = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_ringjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_ringjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_ringjoint.setObjectName("lineedit_ringjoint")
        self.gridLayout.addWidget(self.lineedit_ringjoint, 6, 1, 1, 1)
        self.label_thumbname = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_thumbname.setMinimumSize(QtCore.QSize(0, 20))
        self.label_thumbname.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_thumbname.setAutoFillBackground(False)
        self.label_thumbname.setObjectName("label_thumbname")
        self.gridLayout.addWidget(self.label_thumbname, 1, 0, 1, 1)
        self.pushbutton_indexjoint = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.pushbutton_indexjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_indexjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_indexjoint.setObjectName("pushbutton_indexjoint")
        self.gridLayout.addWidget(self.pushbutton_indexjoint, 2, 2, 1, 1)
        self.pushbutton_middlejoint = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.pushbutton_middlejoint.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_middlejoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_middlejoint.setObjectName("pushbutton_middlejoint")
        self.gridLayout.addWidget(self.pushbutton_middlejoint, 4, 2, 1, 1)
        self.pushbutton_ringjoint = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.pushbutton_ringjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_ringjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_ringjoint.setObjectName("pushbutton_ringjoint")
        self.gridLayout.addWidget(self.pushbutton_ringjoint, 6, 2, 1, 1)
        self.lineedit_middlejoint = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_middlejoint.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_middlejoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_middlejoint.setObjectName("lineedit_middlejoint")
        self.gridLayout.addWidget(self.lineedit_middlejoint, 4, 1, 1, 1)
        self.pushbutton_pinkyjoint = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.pushbutton_pinkyjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_pinkyjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_pinkyjoint.setObjectName("pushbutton_pinkyjoint")
        self.gridLayout.addWidget(self.pushbutton_pinkyjoint, 8, 2, 1, 1)
        self.label_pinkyjoint = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_pinkyjoint.setMinimumSize(QtCore.QSize(0, 20))
        self.label_pinkyjoint.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_pinkyjoint.setObjectName("label_pinkyjoint")
        self.gridLayout.addWidget(self.label_pinkyjoint, 8, 0, 1, 1)
        spacerItem = QtWidgets.QSpacerItem(40, 2, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 10, 0, 1, 3)
        self.lineedit_handcontroller = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.lineedit_handcontroller.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_handcontroller.setMaximumSize(QtCore.QSize(160, 22))
        self.lineedit_handcontroller.setText("")
        self.lineedit_handcontroller.setObjectName("lineedit_handcontroller")
        self.gridLayout.addWidget(self.lineedit_handcontroller, 11, 1, 1, 1)
        self.pushbutton_handcontroller = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.pushbutton_handcontroller.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_handcontroller.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_handcontroller.setObjectName("pushbutton_handcontroller")
        self.gridLayout.addWidget(self.pushbutton_handcontroller, 11, 2, 1, 1)
        self.gridLayoutWidget_2 = QtWidgets.QWidget(self.groupBox)
        self.gridLayoutWidget_2.setGeometry(QtCore.QRect(0, 380, 311, 31))
        self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
        self.gridLayout_2.setContentsMargins(10, -1, 10, -1)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.lineedit_endrad = QtWidgets.QLineEdit(self.gridLayoutWidget_2)
        self.lineedit_endrad.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_endrad.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_endrad.setObjectName("lineedit_endrad")
        self.gridLayout_2.addWidget(self.lineedit_endrad, 0, 3, 1, 1)
        self.lineedit_beginrad = QtWidgets.QLineEdit(self.gridLayoutWidget_2)
        self.lineedit_beginrad.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_beginrad.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_beginrad.setObjectName("lineedit_beginrad")
        self.gridLayout_2.addWidget(self.lineedit_beginrad, 0, 1, 1, 1)
        self.label_endrad = QtWidgets.QLabel(self.gridLayoutWidget_2)
        self.label_endrad.setMinimumSize(QtCore.QSize(0, 20))
        self.label_endrad.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_endrad.setObjectName("label_endrad")
        self.gridLayout_2.addWidget(self.label_endrad, 0, 2, 1, 1)
        self.label_beginrad = QtWidgets.QLabel(self.gridLayoutWidget_2)
        self.label_beginrad.setMinimumSize(QtCore.QSize(0, 20))
        self.label_beginrad.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_beginrad.setObjectName("label_beginrad")
        self.gridLayout_2.addWidget(self.label_beginrad, 0, 0, 1, 1)
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.groupBox)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 350, 311, 31))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(10, -1, 10, -1)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_prefix = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.label_prefix.setMinimumSize(QtCore.QSize(0, 20))
        self.label_prefix.setMaximumSize(QtCore.QSize(16777215, 22))
        self.label_prefix.setObjectName("label_prefix")
        self.horizontalLayout.addWidget(self.label_prefix)
        self.lineedit_prefix = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
        self.lineedit_prefix.setMinimumSize(QtCore.QSize(0, 20))
        self.lineedit_prefix.setMaximumSize(QtCore.QSize(16777215, 22))
        self.lineedit_prefix.setObjectName("lineedit_prefix")
        self.horizontalLayout.addWidget(self.lineedit_prefix)
        self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.groupBox)
        self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(0, 430, 311, 31))
        self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.pushbutton_create = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
        self.pushbutton_create.setMinimumSize(QtCore.QSize(0, 20))
        self.pushbutton_create.setMaximumSize(QtCore.QSize(16777215, 22))
        self.pushbutton_create.setObjectName("pushbutton_create")
        self.horizontalLayout_2.addWidget(self.pushbutton_create)
        self.verticalLayout.addWidget(self.groupBox)
try:
    Dialog.close()
    Dialog.deleteLater()
except:
    pass

Dialog = Dialog_Window()
Dialog.show()


































					

...