перепиши этот код на python3     - global int $quickShelfWidth = 100;
global int $quickShelfHeight = 150;
global string $quickShelfWindow = "";
global string $currentShelves[];
global string $gShelfTopLevel;

global proc QuickShelf() {
    global int $quickShelfWidth;
    global string $quickShelfWindow;
    global int $quickShelfHeight;
    global string $currentShelves[];

    // Установим полки на первый запуск
    if ($quickShelfWindow == "") {
        $currentShelves = {"RIG2"};  // Название полки задано непосредственно в коде
        QuickShelfSet($currentShelves);
    } else {
        // Если окно уже есть, переключаем его видимость
        if (`window -q -vis $quickShelfWindow`) {
            window -e -vis 0 $quickShelfWindow;
        } else {
            int $cursorX = `python "from PySide2.QtGui import QCursor; QCursor.pos().x()"`;
            int $cursorY = `python "QCursor.pos().y()"`;

            window -e -vis 1 $quickShelfWindow;
            window -e -widthHeight $quickShelfWidth $quickShelfHeight -tlc (($cursorY - ($quickShelfHeight / 2)) - 20) ($cursorX - ($quickShelfWidth / 2)) $quickShelfWindow;
        }
    }
}

global proc QuickShelfSet(string $argShelves[]) {
    global string $quickShelfWindow;
    global string $gShelfTopLevel;

    // Удаляем предыдущее окно, если оно существует
    if (`window -exists $quickShelfWindow`) {
        deleteUI -window $quickShelfWindow;
    }

    // Создаем новое окно
    $quickShelfWindow = `window -title "Quick Shelf"`;
    paneLayout -configuration "vertical2";
    gridLayout -numberOfColumns 5 -cellWidthHeight 50 50;

    int $shelfID = 0;

    for ($shelf in $argShelves) {
        // Получаем содержимое полки
        string $shelfPath = getenv("MAYA_APP_DIR") + "/" + `about -v` + "/prefs/shelves/shelf_" + $shelf + ".mel";

        // Проверка на существование файла
        if (`filetest -f $shelfPath`) {
            string $shelfLines[] = freadAllLines($shelfPath);

            string $shelfButtons = "";
            for ($i = 6; $i < (size($shelfLines) - 2); $i++) {
                $shelfButtons = $shelfButtons + $shelfLines[$i] + "\n";
            }

            // Создаем новый shelfLayout и сохраняем его в $gShelfTopLevel
            if ($gShelfTopLevel == "") {
                $gShelfTopLevel = `shelfLayout`;
            }
            eval($shelfButtons);  // Выполняем кнопки полки
            setParent ..;  // Возвращаемся к родительскому
            $shelfID++;
        } else {
            print("Полка " + $shelf + " не найдена по пути: " + $shelfPath + "\n");
        }
    }

    showWindow($quickShelfWindow);  // Отображаем окно
}

global proc QuickShelfUpdate(string $mode, int $shelfID) {
    global string $currentShelves[];
    global string $gShelfTopLevel;

    QuickShelf();

    // Получение текущей активной полки
    if (`tabLayout -exists $gShelfTopLevel`) {
        string $activeShelf = `tabLayout -q -selectTab $gShelfTopLevel`;
        
        if ($mode == "replace") {
            $currentShelves[$shelfID] = $activeShelf;
        } else if ($mode == "remove") {
            stringArrayRemoveAtIndex($shelfID, $currentShelves);
        } else if ($mode == "add" && size($currentShelves) < 4) {
            $currentShelves[size($currentShelves)] = $activeShelf;
        }
    } else {
        print("Ошибка: gShelfTopLevel не существует.\n");
    }

    // Перезагрузка полок
    QuickShelfSet($currentShelves);
}

// Запустите этот скрипт, чтобы проверить
QuickShelf();