RRname




```

# -*- coding: utf-8 -*-
from maya import OpenMayaUI
from PySide2 import QtWidgets, QtCore
import shiboken2 as shiboken
import maya.cmds as cmds

ptr = OpenMayaUI.MQtUtil.mainWindow()
parent = shiboken.wrapInstance(int(ptr), QtWidgets.QMainWindow)

class RenameTool(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(RenameTool, self).__init__(parent)
        self.setWindowTitle("RRname")
        self.resize(400, 200)

        self.central_widget = QtWidgets.QWidget()
        self.setCentralWidget(self.central_widget)

        self.main_layout = QtWidgets.QVBoxLayout(self.central_widget)

        # TabWidgetを作成
        self.tab_widget = QtWidgets.QTabWidget()
        self.main_layout.addWidget(self.tab_widget)

        # タブ1: オブジェクト名称変更
        self.rename_tab = QtWidgets.QWidget()
        self.rename_layout = QtWidgets.QVBoxLayout(self.rename_tab)
        self.text_field = QtWidgets.QLineEdit(self.rename_tab)
        self.text_field.setPlaceholderText("new name")
        self.rename_button = QtWidgets.QPushButton("change name", self.rename_tab)
        self.rename_button.clicked.connect(self.rename_selected_objects)
        self.rename_layout.addWidget(self.text_field)
        self.rename_layout.addWidget(self.rename_button)
        self.tab_widget.addTab(self.rename_tab, "object name")

        # タブ2: 設定
        self.settings_tab = QtWidgets.QWidget()
        self.settings_layout = QtWidgets.QVBoxLayout(self.settings_tab)
        self.number_checkbox = QtWidgets.QCheckBox("末尾に番号を付ける", self.settings_tab)
        self.number_checkbox.setChecked(True)
        self.top_layer_checkbox = QtWidgets.QCheckBox("トップレイヤーから適用", self.settings_tab)
        self.top_layer_checkbox.setChecked(False)
        self.settings_layout.addWidget(self.number_checkbox)
        self.settings_layout.addWidget(self.top_layer_checkbox)
        self.tab_widget.addTab(self.settings_tab, "設定")

        # スタイルシートの設定
        self.setStyleSheet(
            '''
            QGroupBox {
                border: 2px solid #256d7b;
                border-radius: 6px;
                margin-top: 1em;
                font-size: 12px;
            }
            QGroupBox::title {
                color: #fff;
                background-color: #256d7b;
                subcontrol-origin: margin;
                padding: 0.5em 0.7em;
                border-top-left-radius: 6px;
                border-top-right-radius: 6px;
            }
            QTabWidget::pane {
                border: 1px solid #256d7b;
                border-radius: 6px;
            }
            QTabWidget::tab-bar {
                alignment: center;
            }
            QTabBar::tab {
                background: #256d7b;
                color: #fff;
                padding: 5px 10px;
                border-top-left-radius: 6px;
                border-top-right-radius: 6px;
                margin-right: 1px;
            }
            QTabBar::tab:selected {
                background: #1e555f;
            }
            '''
        )

    def rename_selected_objects(self):
        base_name = self.text_field.text()
        add_number = self.number_checkbox.isChecked()
        top_layer_only = self.top_layer_checkbox.isChecked()

        selected_objects = cmds.ls(selection=True)
        if not selected_objects:
            cmds.warning(u"オブジェクトが選択されていません。")
            return

        if top_layer_only:
            new_selected_objects = []
            for obj in selected_objects:
                if cmds.listRelatives(obj, parent=True) is None:
                    new_selected_objects.append(obj)
                    descendants = cmds.listRelatives(obj, allDescendents=True) or []
                    new_selected_objects.extend(descendants)
            selected_objects = new_selected_objects

        selected_objects = sorted(selected_objects, key=lambda x: cmds.ls(x, long=True)[0])

        for index, obj in enumerate(selected_objects):
            new_name = base_name
            if add_number:
                new_name = f"{base_name}{index + 1}"
            cmds.rename(obj, new_name)

        cmds.inform(u"選択されたオブジェクトの名前を変更しました。")

def main():
    global rename_tool
    try:
        rename_tool.close()  # 既存のウィンドウを閉じる
    except:
        pass
    rename_tool = RenameTool(parent)
    rename_tool.show()

main()


```